当前位置: 首页 > Web前端 > CSS

CSS那些事——居中布局

时间:2023-03-30 16:23:05 CSS

前言居中布局是前端页面最常见的布局需求。刚开始学习前端的时候,有过一段时间的困扰,后来在看了《CSS居中:完整指南》一文后掌握了方法。下面简单总结一下我现在知道的居中布局方法。概述首先我们来看一下居中布局需求的分类:水平居中、垂直居中、垂直居中、水平居中。对于不同的元素类型,无论是行内元素还是块级元素,我们都可以有不同的处理方式。这里引用mdn的文档,对内联元素和块级元素进行简单说明,有助于理解相应的实现原理。内联元素:内联元素只占据其相应标签的边框所包含的空间。如a、img、span、button、input、label、select、textarea等。块级元素:块级元素占据其父元素(容器)的整个空间。如div、h1~6、p、form、table、ul、ol等。当然,对于以上类型的元素,我们也可以设置display:inline-block使其成为行内框,使用方法内联元素使它们居中。下面总结了不同布局需求对应的实现方法。注意,本文所说的内联元素是display属性为inline或inline-block的元素。水平居中的内联元素将text-align属性定义为包含父元素的中心。.parent{text-align:center;}优点:兼容性好,适合多个inline-block元素在同一行居中,与每个元素的宽度无关。浏览器兼容性:所有块级元素都将当前元素的margin-left和margin-right属性设置为auto。一般缩写如下:.child{margin:0auto;}这时候的元素自然需要设置width属性,否则作为块级元素,其宽度为100%,不需要居中它。浏览器兼容性:所有垂直居中的内联元素都使用line-height如果内容是单行的,可以在包含的父元素中定义相同的高度和line-height。.parent{高度:20px;行高:20px;white-space:nowrap;}浏览器兼容性:都使用padding或者使用padding属性居中,但是使用条件比较有限,受外层包含元素的高度影响。.parent{padding-top:20px;padding-bottom:20px;}浏览器兼容性:所有使用伪元素对齐使用垂直对齐属性。场景。浏览器兼容性:所有Html:

如果这两种技术都行不通,你可以使用“幽灵元素”技术,在容器内放置一个全高的伪元素,然后文本垂直对齐。

CSS:.container{height:200px;背景颜色:#aaa;}.container::before{内容:“”;显示:内联块;高度:100%;宽度:0;vertical-align:middle;}p{width:300px;显示:内联块;vertical-align:middle;}效果:块级元素知道绝对定位和外边距。parent{位置:相对;}.child{位置:绝对;顶部:50%;左:0;高度:200px;margin-top:-100px;}浏览器兼容性:所有绝对定位方法。parent{position:relative;}.child{position:absolute;高度:200px;顶部:0;底部:0;左:0;margin:auto;}该方法需要设置高度属性。浏览器兼容性:所有。未知高度使用变换property.parent{position:relative;}.child{position:absolute;顶部:50%;左:0;transform:translateY(-50%);}浏览器兼容性:IE9+(希望兼容IE8?可以考虑将元素设置为inline-block,使用伪元素居中的方式。)对于垂直和水平居中,这个问题可以通过结合以上1点和2点来实现。行内元素使用text-align和line-height属性。块级元素的已知高宽使用absolute+margin的方式。.parent{位置:相对;}.child{位置:绝对;顶部:50%;左:50%;高度:200px;宽度:200px;边距顶部:-100px;margin-left:-100px;}绝对定位居中方式:.parent{position:relative;}.child{position:absolute;高度:200px;顶部:0;底部:0;左:0;右:0;margin:auto;}未知的高度和宽度使用变换方法:.parent{position:absolute;顶部:50%;左:50%;transform:translate(-50%,-50%);}其他居中方法前三节的方法都是使用率比较高的方法,兼容性比较好。此外,还有一些方法可以实现居中。使用float实现水平居中Html:1
2
CSS:.container{背景颜色:#aaa;宽度:600px;高度:200px;位置:相对;}.parent{显示:内联块;位置:相对;左:50%;向左飘浮;清除:左;}.child{背景色:#6aa;宽度:100px;高度:100px;位置:相对;右:50%;float:left;}作用:不考虑兼容性使用flex在这种情况下,flex可以轻松实现水平和垂直居中。父{显示:flex;证明内容:居中;align-items:center;}usingtableusingtable也有很好的兼容性,但是tablelayout会带来pageheavyrowperformance的问题,一般不使用。.child{宽度:100px;高度:100px;显示:表格单元格;文本对齐:居中;vertical-align:middle;}使用calc计算属性使用CSS3calc属性根据当前页面布局计算尺寸。兼容性:IE9+Html:CSS:.parent{background-color:#aaa;宽度:600px;最小高度:400px;位置:相对;}.child{背景色:#ff2;宽度:200px;高度:200px;位置:绝对;顶部:计算(50%-100px);左:计算(50%-100px);}效果:参考文章CSS中的Centering:ACompleteGuide盘点8种CSS实现垂直居中和水平居中绝对定位居中技术AbsoluteHorizo??ntalAndVerticalCenteringInCSS实现元素水平居中的六种方式第一种技术文章写到这里^_^。