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

        談談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號
        主站蜘蛛池模板: 亚洲精品欧美综合| 国产精品自在线拍国产电影| 51国偷自产精品一区在线视频| 亚洲人精品午夜射精日韩| 亚洲国产精品久久| 国产精品露脸国语对白| 尤物TV国产精品看片在线| 国产一区二区三精品久久久无广告| 国产福利91精品一区二区三区| 无码精品国产一区二区三区免费 | 国产乱子伦精品免费视频| 国产成人精品日本亚洲专| 精品无码久久久久国产| 亚洲韩国精品无码一区二区三区| 男人的天堂精品国产一区| 国产精品综合久久第一页| 国产99视频精品免费视频76| 九九热这里只有在线精品视| 99久久精品影院老鸭窝| 精品久久久久久亚洲精品 | 99精品福利国产在线| 国产精品莉莉欧美自在线线| 国产精品无码成人午夜电影| 国内少妇偷人精品视频免费| 精品亚洲成a人片在线观看| 日产精品久久久久久久| 久久香综合精品久久伊人| 久久香蕉超碰97国产精品| 精品久久久噜噜噜久久久| 国产精品久久久久jk制服| 久久精品一本到99热免费| 国精无码欧精品亚洲一区| 99国产精品无码| 国产精品视频网| 亚洲国产精品自在在线观看 | 中文字幕日本精品一区二区三区| 一本精品中文字幕在线| 亚洲高清国产拍精品26U| 亚洲第一极品精品无码久久| 久久精品麻豆日日躁夜夜躁| 99热精品在线|