站長資訊網
        最全最豐富的資訊網站

        談談CSS實現水平垂直居中布局的方法

        談談CSS實現水平垂直居中布局的方法

        最近面試的時候,面試官問到了CSS水平垂直居中布局的方式,對于剛入前端沒多久的我,無疑是一臉懵逼,閑了趕緊查閱資料分析一波,給各位分享一下,避免落坑。

        首先先說明一下html和一些基礎css樣式,下面就不再贅述!
        html

        <body> 		<div class="div1"> 			<div class="box  size">垂直水平居中</div> 		</div> 	</body>

        公共css代碼如下

        <style type="text/css"> 			/* 公共樣式 */ 			.div1{ 				width: 300px; 				height: 300px; 				border:1px solid aqua; 				 			} 			.box{ 				background: #00FFFF; 			} 			.box.size{ 				width:100px; 				height:100px; 			} </style>

        這些css樣式在后續介紹中默認帶上,不再贅述!

        一、 absolute 和 margin auto(常用)

        同樣居中元素的寬高必須固定,并且需要得知子元素的寬高
        這種方式通過設置各個方向的距離都是0,此時再將margin設為auto,就可以在各個方向上居中了

        .div1{ 				position: relative; 			} 			.box{ 				position: absolute; 				top:0; 				left: 0; 				right: 0; 				bottom: 0; 				 				margin: auto; 			}

        二、absolute 和margin(負值)

        簡單說一下原理,利用了絕對定位,絕對定位的百分比是相對于父元素的寬高,所以我們可以根據這個原理將元素居中顯示。但是要注意:絕對定位是基于子元素的左上角來說的,但是要想讓子元素居中顯示,就要解決這個問題。
        此時可以利用margin的負值來實現效果,當外邊距為負值時,元素向相反方向定位,這樣我們將子元素的外邊距設置為子元素的寬高的一半就可以實現了。(PS:缺點就是必須得到子元素的寬高)

        .div1{ 				position: relative; 			} 			.box{ 				top: 50%; 				left: 50%; 				position: absolute; 				margin-top: -50px; 				margin-left: -50px; 			}

        三、absolute 和 calc

        同樣需要子元素的寬高固定,并知道寬高,css3具有計算屬性。
        top的百分比是基于元素左上角減去寬度的一半即可(PS:依賴calc的兼容性)

        .div1{ 			   position: relative; 		   } 		   .box{ 			   position: absolute; 			   top: calc(50% - 50px );  				/* 減號前后沒有空格,該樣式不生效*/ 			   left: calc(50% - 50px ); 		   }

        當我在寫這段代碼的時候,發現一個有趣的事情,calc(50%-50px)如果減號前后沒有空格的話,樣式就不會生效,寫上空格的話,就會正常生效了,具體原因我也不太清楚emmmmm

        下面的方法將不需要知曉子元素的寬高即可設置

        html修改為:

        <body> 		<div class="div1"> 			<div class="box">水平垂直居中,不需要子元素固定寬高</div> 		</div> 	</body>

        公共css如下

        	.div1{ 				width: 300px; 				height: 300px; 				border: 1px solid red; 			} 			.box{ 				background: #00FFFF; 			}

        四、flex(常用)

        flex是現代的布局方案僅僅需要幾行代碼即可實現居中效果

        .div1{ 				display: flex; 				justify-content: center; 				align-items: center; 			}			

        五、line-height

        利用行內元素居中屬性也可以做到水平垂直居中。把box設置為行內元素,通過text-align就可以實現水平居中vertical-align 也可以在垂直方向做到居中(PS:這種方法需要在子元素中將文字顯示重置為想要的效果)

                  .div1{ 				line-height: 300px; 				text-align: center; 				font-size: 0px; 			} 			.box{ 				font-size: 10px; 				display: inline-block; 				vertical-align: middle; 				line-height:initial; 				/* 修正文字 */ 			 	text-align: left; 	        }

        六、absolute 和 transform

        不需要子元素寬高固定,但是依賴于translate2d的兼容性

                   .div1{ 				position: relative; 			} 			.box{ 				position: absolute; 				top: 50%; 				left: 50%; 				transform: translate(-50%,-50%); 			}

        七、css-table

        css新增的table屬性,可以把普通元素改變為table元素的顯示效果,也可以實現水平居中

                   .div1{ 				display:table-cell; 				text-align: center; 				vertical-align: middle; 			} 			.box{ 				display:inline-block; 			}

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲欧美日韩久久精品第一区| 99精品久久精品| 国内精品久久久久影院一蜜桃| 国产呦小j女精品视频| 国产精品无码av在线播放| 欧美人与性动交α欧美精品成人色XXXX视频 | 99精品视频在线| 亚洲精品tv久久久久| 国产精品欧美一区二区三区| 18国产精品白浆在线观看免费| 久久青青草原精品国产| 亚洲乱码日产精品a级毛片久久| 精品欧美一区二区在线观看| 97精品国产自在现线免费观看| 99免费精品视频| 国产a视频精品免费观看| 精品乱码一区二区三区四区| 日产精品99久久久久久| 亚洲精品国产美女久久久| 亚洲国产综合精品一区在线播放| 久久精品中文字幕有码| 国产精品日韩深夜福利久久| 国产精品 猎奇 另类视频| 99国内精品久久久久久久| 亚洲一区精品中文字幕| 麻豆精品久久久一区二区| 国产午夜精品视频| 精品一区二区三区在线视频| 国产精品一国产精品| 大伊香蕉精品视频在线导航| 99久久免费国产精精品| 99久久久国产精品免费无卡顿 | 国产亚洲精品自在线观看| 国产精品成人久久久久久久| 国产精品久操视频| 国产精品极品美女自在线观看免费| 国产精品 91 第一页| 国自产精品手机在线观看视频| 国产午夜精品一本在线观看| 国产精品99久久久久久董美香| 国产午夜精品一区二区三区不卡|