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

CSS中的各种居中

时间:2023-03-30 23:10:35 CSS

前言在我看来,CSS入门路上最烦的莫过于CSS的各种居中。刚学CSS的时候,居中的问题经常困扰我。那么为什么CSS居中这么烦人呢?在我看来,这是因为CSS的居中方式及其适用范围,导致在应用时很难区分哪个有效。下面我简单梳理一下CSS的居中方法。水平居中1.内联元素的水平居中对于内联元素(例如text、link或inline-*元素)的水平居中:.inline{text-align:center;}该方法针对inline-block,inline-table,等等都有效。2、块级元素水平居中块级元素(如div、p等)水平居中:.block{margin:0auto;}这个方法是设置margin-left和margin-right为汽车。但是这个方法的前提是你得设置块级元素的宽度,否则它的宽度会填满它的父元素。3.多个块级元素的水平居中当多个块级元素需要在一行中居中时,我们可以将它们设置为inline-block或flex。1)inline-block.inline-block-center{display:inline-block;text-align:right;}2)flexbox.flex-center{display:flex;justify-content:center;}verticalcenterverticalcenter比horizo??ntalcentering更复杂。接下来我会按照思路逐步梳理一下垂直居中的方法(包括不可行的方法):1)既然块级元素的水平居中可以使用margin:0auto,那么垂直居中可以使用margin吗?:auto0呢?不能。因为如果margin-top设置为auto,默认值为0。2)OK,那我手动用calc指定margin-topmargin-top:calc(50%-50px);不。因为margin-top的百分比其实是根据父元素的宽度来决定的。3)好吧,让我使用relative:position:relative;顶部:计算(50%-50px);这次它会起作用。但是这种方法的缺点是不能改变元素的高度。4)对于inline-element和table-cell,垂直居中也可以使用vertical-align:display:table-cell;vertical-align:middle;但此时由于table-cell是内联的,所以宽度会变成和子元素一样,当指定宽度强制为100%时,子元素的高度会变成和父元素一样元素。5)使用伪元素:verticallycentered

.box{width:400px;高度:300px;边框:1px纯红色;文本对齐:居中;}.box:before{内容:'';显示:内联块;高度:100%;vertical-align:middle;}.boxspan{vertical-align:middle;}这种方法的前提是只有行内元素才能居中。那么为什么要在这里添加一个伪元素呢?根据W3C标准,vertical-align的定义是:该属性影响内联级元素生成的框在行框内的垂直定位。然后伪元素在这里生成一个高度为100%的空内联框,然后内联元素以这个内联框为基线垂直居中。6)使用弹性布局:.container{display:flex;弹性方向:列;justify-content:center;}水平和垂直居中水平和垂直居中的方法很多,非常繁琐。有些方法可以结合水平居中和垂直居中(比如添加伪元素方法的text-align+vertical-align),这里就不一一介绍了,只介绍一种最好的方法——几乎通用的flex布局:.container{显示:flex;证明内容:居中;align-items:center;}justify-content影响flex-item在主轴上的位置;而align-item会影响flex-item在横轴位置上的位置结论以上方法基本可以使用CSS完成各种情况的居中。如果读者觉得有什么需要补充的,或者有错误的地方,欢迎指正。