资讯专栏INFORMATION COLUMN

CSS居中完全指南——构建CSS居中决策树

AlienZHOU / 1908人阅读

摘要:但是部分浏览器存在兼容性的问题。核心代码宽高不固定水平垂直居中演示使用布局垂直水平居中核心代码使用布局垂直水平居中演示使用布局垂直水平居中核心代码使用布局垂直水平居中演示

CSS居中完全指南——构建CSS居中决策树

</>复制代码

  1. 本文总结CSS居中,包括水平居中和垂直居中.本文相当于CSS决策树,下次再遇到CSS居中问题时有章可循.

  2. 参考Centering in CSS: A Complete Guide和【基础】这15种CSS居中的方式,你都用过哪几种

  3. 本文的引用归原作者所有.

  4. 代码在线演示工具JSbin使用指南

1.Horizontally 水平居中 1.1 inlineinline-*元素水平居中

给需要居中的元素一个block父元素,需要居中子元素为 文本 或者 inline, inline-block, inline-table, inline-flex

核心代码

</>复制代码

  1. .center-children {
  2. text-align: center;
  3. }

JSbin演示地址
效果:

1.2block元素水平居中

父元素为block,子元素也为bolck,且子元素设置了宽度(没宽度子元素就继承父元素宽度,居中没有意义).
无论正在居中块级元素的宽度或父级的宽度如何,都会起作用。

方法:子元素margin: 0 auto;左右外边距设置为自动填充

核心代码

</>复制代码

  1. .center-me {
  2. margin: 0 auto;
  3. }

效果:

block元素水平居中JSbin演示地址

1.3多个block元素水平居中 1.3.1 多个block元素一行排列水平居中

方法一:利用inline-block,原理是将子元素转化为inline-block.再用text-align: center;

方法二:利用display: flex.注意:子元素高度会保持一致.看下方例子.

核心代码:

</>复制代码

  1. .inline-block-center {
  2. text-align: center;
  3. }
  4. .inline-block-center div {
  5. display: inline-block;
  6. text-align: left;
  7. }
  8. .flex-center {
  9. display: flex;
  10. justify-content: center;
  11. }

效果:


多个block元素一行排列水平居中JSbin演示地址

1.3.2 多个block元素每行一个水平居中

因为每个block元素独占一行,所以方法仍然是margin: 0 auto;

演示:

多个block元素每行一个水平居中JSbin演示

2.Vertically垂直居中

垂直居中比较麻烦

2.1 inlineinline-* 元素单行垂直居中

需要垂直居中的元素为单行的inlineinline-* 元素,例如一个text或者a链接(包括a链接变化而成的按钮)

2.1.1 方法一:上下使用相同的padding(推荐)

上下和左右使用相同的padding可以不用设置宽高,既可以在修改文本内容是自适应,又可以减少出现BUG的几率.
核心代码:

</>复制代码

  1. .link {
  2. padding-top: 30px;
  3. padding-bottom: 30px;
  4. }

演示:

方法一:上下使用相同的paddingJSbin演示地址

2.1.2 方法二:设置line-height与高度相同

核心代码

</>复制代码

  1. .center-text-trick {
  2. height: 100px;
  3. line-height: 100px;
  4. white-space: nowrap;
  5. /*nowrap文本内的换行无效内容只能在一行显示*/
  6. }

设置line-height与高度相同JSbin演示地址

2.2 多行文本垂直居中

多行文本使用增加上下padding垂直居中的方法仍然有效且良好,不需设置宽高,推荐使用.
如果这样做不起作用,那么文本所在的元素可能是table或者table-cell元素,无论是真正的table还是后期自己添加的CSS.
下面说说这两种情况使用其他方法的垂直居中.

2.2.1:方法一:display: table;vertical-align: middle;

核心代码:

</>复制代码

  1. .center-table {
  2. display: table;
  3. }
  4. .center-table p {
  5. display: table-cell;
  6. vertical-align: middle;
  7. }

table+vertical-align: middle多行文本垂直居中JSbin演示

2.2.2 使用flex布局多行文本居中

一个flex-child可以简单地在flex-parent的中心.
核心代码

</>复制代码

  1. .flex-center-vertically {
  2. display: flex;
  3. justify-content: center;
  4. flex-direction: column;
  5. height: 400px;
  6. }

使用flex多行文本居中JSbin演示地址

2.3 block元素垂直居中 2.3.1已知block元素高度

原理是绝对定位,top: 50%;然后 margin-top设置为负边距且值为他本身高度的一半.
核心代码:

</>复制代码

  1. .parent {
  2. position: relative;
  3. }
  4. .child {
  5. position: absolute;
  6. top: 50%;
  7. height: 100px;
  8. margin-top: -50px; /* account for padding and border if not using box-sizing: border-box; */
  9. }

</>复制代码

  1. 注意:使用 position: absolute;绝对定位会使元素脱离文档流

已知block元素高垂直居中演示

2.3.2 block元素高度未知垂直居中

借助CSS3中的transform属性向Y轴反向偏移50%的方法实现垂直居中。但是部分浏览器存在兼容性的问题。
核心代码:

</>复制代码

  1. .parent {
  2. position: relative;
  3. }
  4. .child {
  5. position: absolute;
  6. top: 50%;
  7. transform: translateY(-50%);
  8. }

transform用法


block元素高度未知垂直居中JSbin演示

2.3.3 使用flex布局block元素高度未知垂直居中

核心代码:

</>复制代码

  1. .parent {
  2. display: flex;
  3. flex-direction: column;
  4. justify-content: center;
  5. }

用flex布局block元素高度未知垂直居中JSbin演示

3.Both Horizontally and Vertically水平垂直居中 3.1有固定宽高的元素

核心代码:
依旧是绝对定位+宽高一半的负边距

</>复制代码

  1. .parent {
  2. position: relative;
  3. }
  4. .child {
  5. width: 300px;
  6. height: 100px;
  7. padding: 20px;
  8. position: absolute;
  9. top: 50%;
  10. left: 50%;
  11. margin: -70px 0 0 -170px;
  12. }

有固定宽高的元素JSbin演示

3.2 宽高不固定

利用2D变换,在水平和垂直两个方向都向反向平移宽高的一半,从而使元素水平垂直居中。

核心代码

</>复制代码

  1. .parent {
  2. position: relative;
  3. }
  4. .child {
  5. position: absolute;
  6. top: 50%;
  7. left: 50%;
  8. transform: translate(-50%, -50%);
  9. }

宽高不固定水平垂直居中JSbin演示

3.3 使用flex布局垂直水平居中

核心代码:

</>复制代码

  1. .parent {
  2. display: flex;
  3. justify-content: center;
  4. align-items: center;
  5. }

使用flex布局垂直水平居中JSbin演示

3.4 使用grid布局垂直水平居中

核心代码:

</>复制代码

  1. body, html {
  2. height: 100%;
  3. display: grid;
  4. }
  5. span { /* thing to center */
  6. margin: auto;
  7. }

使用flex布局垂直水平居中JSbin演示

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/116712.html

相关文章

  • CSS居中完全指南——构建CSS居中决策

    摘要:但是部分浏览器存在兼容性的问题。核心代码宽高不固定水平垂直居中演示使用布局垂直水平居中核心代码使用布局垂直水平居中演示使用布局垂直水平居中核心代码使用布局垂直水平居中演示 CSS居中完全指南——构建CSS居中决策树 showImg(https://segmentfault.com/img/bV8tDq); 本文总结CSS居中,包括水平居中和垂直居中.本文相当于CSS决策树,下次再遇到...

    cc17 评论0 收藏0
  • 朝花夕拾:CSS居中完全指南

    摘要:正文居中是常被开发者抱怨的问题之一。注意你不能将浮动元素居中。水平且垂直居中你可以将前面的方法任意组合起来,实现完美的居中效果。这样就可以使元素水平且垂直居中,并具有良好的浏览器兼容性。 参考 Centering in CSS: A Complete Guide BY CHRIS COYIER ON SEPTEMBER 2, 2014 附:文中涉及到了flex的一些用法,如果没有接...

    laznrbfe 评论0 收藏0
  • CSS居中完全指南

    摘要:原载于,本文着重提取文中的方法,不完全翻译。人们经常抱怨在中居中元素的问题,其实这个问题其实并不复杂,只是因为方法众多,需要根据情况从众多方法中选取一个出来。 原载于CSS-Trick,本文着重提取文中的方法,不完全翻译。如有需要,直接原文查看。 人们经常抱怨在CSS中居中元素的问题,其实这个问题其实并不复杂,只是因为方法众多,需要根据情况从众多方法中选取一个出来。接下来,我们做一个‘...

    qujian 评论0 收藏0
  • CSS 居中完全指南

    摘要:在文本前面插入一个高度为百分百的伪元素,让文本与其垂直对齐。块级元素或者使用垂直水平居中或者使用 翻译自 https://css-tricks.com/centering-css-complete-guide/ 预先给出这样的样式 .container { width: 100%; height: 200px; background-color: azur...

    hqman 评论0 收藏0
  • 居中css:完全指南(翻译)

    摘要:水平水平居中有行内元素和块元素,行内元素有文字图片链接等块元素主要是等元素。块元素对于一个块元素,可以设置其和自动,就像这样在线查看无论块元素的宽度是否已知,都可以实现水平居中。 这里主要参考的是CHRIS COYIER写的一篇的文章(点击查看),主要讲了关于css水平、垂直居中的一些方法,每个方法后面都有一个demo,可以在线查看效果。 1 水平 水平居中有行内元素和块元素,行内元素...

    Integ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<