CSS笔记(〇):元素居中

0.水平居中

元素水平居中需求比较常见,常见的作法是经过margin来完成。css

元素默认的margin-left和margin-right应该都是0。flex

而元素水平居中其实只须要把margin-left和margin-right都设置成auto就能够了。spa

.demo {
    margin-left:auto;
    margin-right:auto;
}

网上有一种常见的写法是:code

.demo {
    margin: 0 auto;
}

这样写简短些,不过在设置margin-left和margin-right为auto时,也设置了margin-top和margin-bottom为0。it

1.垂直居中

垂直居中作起来比较麻烦,常见的一种方法是经过vertical-align:middle来实现。class

但是vertical-align的效用很奇怪,竟然是让兄弟元素向本身对齐(竟然是做用在别的元素身上)。方法

下面使用 伪元素first-child 和 before 配合vertical-align实现垂直居中:demo

.demo-parent > * {
    display: inline;
    vertical-align:middle;
}

.demo-parent:first-child:before {
    content: "";
    height: 100%;
    display:inline-block;
    vertical-align:middle;
}

0.因为vertical-align做用于“同行”兄弟元素,因此兄弟元素至少是display:inline这样可共行的。因为是相互对其,因此也须要vertical-align属性。margin

1.因为vertical-align对齐是以本身的高度作参照,伪元素height:100%是为了和父元素同样宽,display:inline-block是使内容为空的该伪元素能够有高度。伪元素

2.注意vertical-align实际上是一个伪元素的属性,并不是demo-parent的。

demo-parent的子元素因为这个兄弟伪元素而垂直居中。

前提是同行,若是元素被挤到下一行,这个伪元素的vertical-align并不对其起做用。

2.CSS3中简便的写法

CSS3为display属性添加了flex这个新的可用值,在该值下只须要简单地给父元素设置几个属性就能够实现居中。

justify-content:center;使得子元素水平居中

align-items:center;使得子元素垂直居中

.demo-parent {
    display:flex;
    justify-content:center;
    align-items:center;
}
相关文章
相关标签/搜索