最近参加了百度的前端技术学院,任务4是要求一个元素在父元素中水平和垂直居中,提供的一篇文章对各种情况都进行了分析,很不错,英文也不是那么难懂,毕竟代码还是主体,翻译过来分享出来,翻译内容带有自己的理解  有不对的地方 欢迎拍砖和交流

译文  centering in css :a complete guide   地址 https://css-tricks.com/centering-css-complete-guide/

正文

文章大体分为三部分    水平居中  垂直居中   水平和垂直居中    下面就按照这个思路进行翻译

1)水平居中 

1.1 inline 或者 inline-* 级别的元素如何水平居中

在inline或者 inline-* 需要居中的元素的父元素中应用 text-align:center

text-align 属性规定元素中的文本的水平对齐方式 主要使用的属性值 left right center

        div {
width:100px;
background:red;
text-align: center;
}     <div>sssss</div>

效果

1.2 块级元素的居中

当你有一个一定宽度的块级元素的时候,可以设置它的margin-left margin-right 为auto来实现居中(如果没有宽度的话 它会长铺满父元素的宽度 )

        div {
width:100px;
background:red;
margin:0 auto;
text-align: center;
} <div>sss</div>

效果

这种方式无论你想要居中的元素的宽度是多少都会有效(注意你不能通过float使一个元素居中)

1.3 如何使好几个block元素居中

如果你有两个或者更多的块级元素需要在一行内居中,你就需要修改它们的display属性了 有两种方案  display :inline-block  或者flexbox布局

1.3.1 display:inline-block (关于inline-block的间隙问题 请看大漠写的这篇文章  http://www.jb51.net/css/76707.html )

        #container div {
width:100px;
height:100px;
background: red;
display:inline-block;
margin-right: 10px; }
#container {
text-align: center;
} <div id="container">
  <div></div><div></div><div></div>
  </div>

效果

1.3.2 display:flexbox      使用CSS3的弹性盒子 来进行布局来实现居中

        #container div {
width:100px;
height:100px;
background: red;
display:inline-block;
margin-right: 10px; }
#container {
display:flex;
display:-moz-flex;
display:-webkit-flex;
flex-direction:row; //主轴的方向 默认是水平 row
justify-content:center;//定义了项目在主轴上的对齐方式 flex-start flex-end center space-between space-around (看完这篇文章你会喜欢上flexbox的) } <div id="container">
<div></div><div></div><div></div>
</div>

效果

当然如果你想要多行的块级元素(也就是一个块级元素排布在另一个上面的时候  margin:0 auto 仍然是可行的   )

2)垂直居中

在css中垂直居中是比水平居中更复杂的

2.1 inline或者inline-*级别的元素垂直居中

  2.1.1 单行   有的时候单行的行内元素垂直居中只是因为有一个相等的padding-top 和padding-down (例子大家自己试一下  我认为这种方式不是特别可行  只有当我们对父元素的高度 子元素的高度很清楚的时候 可以使用这种方案 修改起来也存在一定问题)   还好文中给出了下面的方案 也就是提供相等的padding-top 和padding-down不是我们选择的方案的时候 我们可以使一个不换行文本居中通过下面的设置  通过设置父元素的文本的line-height=父元素的高度

        #container {
width:100px;
height:100px;
background: red;
line-height: 100px;
       white-space:nowrap; //文本不换行
} <div id="container">
center
</div>

  2.1.2 多行   多行文本的垂直居中通过设置相同的padding-top padding-down 也是可行的  当这种方式不可行的时候,我们可以将多行文本放置到td 或者有有td表现的元素中(table cell)通过设置vertical-align:middle 来达到目的  例子  table-cell

        #container {
width:100px;
height:100px;
background: red;
display:table;
} #container p {
display: table-cell;
vertical-align: middle;
} <div id="container">
<p>center</p>
</div>

效果

如果使用table-cell你觉得不好 那你仍然可以使用flexbox   这个例子同文中之前的flexbox水平居中  只是垂直居中需要使用属性/*justify-content* 写错了/2016.3.18  align-items 规定元素在交叉轴的排列方向

在上面的方案中 只有父元素有高度(px %等等)的时候,垂直居中才会生效

当以上的方案都不可行的时候,你可以在父容器中插入一个带有100%height的元素 然后让需要垂直居中的元素跟这个元素去对齐(感觉这个有点黑科技 )

        #container {
width:240px;
height:100px;
background: red;
position: relative; }
#container::before {
content: " ";
display: inline-block;
height: 100%;
width: 1%;
vertical-align: middle;
}
#container p {
display: inline-block;
vertical-align: middle;
width:190px; //在它的例子中子元素设置了宽度 如果没有宽度的限制 子元素超出父元素的宽度 就会被挤下来
} <div id="container">
<p>centersadsd asdasda sasdas sadasdasd</p>
</div>

效果如下

2.2 块级元素垂直居中

  2.2.1 知道块级元素的高度  很多情况下我们是无法预知元素的高度的  比如宽度的变化的时候,随着文本的重新排布,高度会发生变化 关于文本的一些设置也会影响到元素的高度等等原因,但是当你的确了解一个元素的高度的时候,可以使用下面的方式去垂直居中

        #container {
width:300px;
height:100px;
background: red;
position: relative;
}
#container p {
position: absolute;
top:50%;
height:40px;
margin-top:-20px;
background: green;
} <div id="container">
<p>centersadsd asdasda sasdas sadasdasd</p>
</div>

这种方案的实现思路是通过子元素的绝对定位到父元素高度50%的位置 在通过margin-top 为-50%自己本身的告诉 来达到处置居中的方式

效果

  2.2.2 不知道元素的高度  通过transform 移动在Y轴的距离为本身的50% 原理上跟知道高度的类似

        #container {
width:300px;
height:100px;
background: red;
position: relative;
}
#container p {
position: absolute;
top:50%;
transform:translateY(-50%);
-webkit-transform:translateY(-50%);
background: green;
} <div id="container">
<p>centersadsd asdasda sasdas sadasdasd</p>
</div>

效果

  2.2.3  你仍然可以使用flexbox来实现上面的垂直居中

3)水平和垂直居中

简单的说你可以组合上面的水平和垂直的居中方案来实现你想要的居中 但是可以分为如下的3中类型

  3.1.1 有固定的高度和宽度的元素水平和垂直居中   同上面的固定高度的垂直居中  水平可以定位到50%父元素宽度 margin-left 50%自己的宽度来水平居中

  3.1.2 没有固定高度和宽度的元素的水平居中    同上面的没有高度的垂直居中 水平定位到50%父元素的宽度  transform:translateX(-50%) 来达到水平居中

  3.1.3 别忘了 你还有flexbox

4)结论

你使用CSS是可以达到居中的

感想:关于居中这个问题,自己一直没有好好的考虑过或者说深入的研究过,只是碰 比如在之前的项目中将vertical-align属性使用在块级元素上等  这次算是小小的学习一下 flexbox提供了功能强大的居中方案  可以尝试

css居中完全指南(翻译)的更多相关文章

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

    CSS居中完全指南--构建CSS居中决策树 本文总结CSS居中,包括水平居中和垂直居中.本文相当于CSS决策树,下次再遇到CSS居中问题时有章可循. 参考Centering in CSS: A Com ...

  2. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

  3. CSS居中demo

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  4. css居中那点事儿

    css居中那点事儿 在css中对元素进行水平居中是非常简单的,然而使元素垂直居中就不是一件简单的事情了,多年以来,垂直居中已经成为了CSS领域的圣杯,因为它是极其常见的需求,但是在实践中却不是一件简单 ...

  5. css居中学习笔记

    css居中学习笔记 一.水平居中 以下面的代码为例: <body> <div class="parent"> <div class="chi ...

  6. CSS居中完全解决方案

    上次面试面试官问到了,问了个定宽局中和不定宽局中,下来我把所有有关CSS居中都总结了一下 原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 水平居中 行内元素 把行内元素 ...

  7. 理解CSS居中

    我想很多在前端学习或者开发过程中,肯定会遇到如何让你的元素居中的问题,网上google肯定会有很多的解决方法.今天我就个人的项目与学习经验谈谈个人理解css如何让元素居中. 要理解css的居中,首先必 ...

  8. CSS 居中大全【转】

    我看最近微博流行 CSS 居中技术,老外码农争相写相关的文章,一篇赛一篇的长啊,我把几篇归纳总结了一下,算是笔记. 孔乙己曾说:“茴香豆的回字有四种写法”,万一哪天有个面试官问你:“居中一共有几种写法 ...

  9. CSS居中的实现用法实例

    转载的一篇文章,讲解css内容居中的. 网上有关css 居中的文章不胜枚举,不过大多没有做系统的总结.这里分享的这篇有关css居中的文章,个人感觉不错,值得收藏. 一.水平居中1,将元素水平居中(us ...

随机推荐

  1. Tools - Git与GitHub

    Git Wiki - Git 开源的分布式版本控制系统,用于敏捷高效地管理项目版本. Git - HomePage Git - CHEAT SHEET git_cheat_sheet.pdf GitH ...

  2. 探秘Tomcat(一)——Myeclipse中导入Tomcat源码

    前言:有的时候自己不知道自己是井底之蛙,这并没有什么可怕的,因为你只要蜷缩在方寸之间的井里,无数次的生活轨迹无非最终归结还是一个圆形:但是可怕的是有一天你不得不从井里跳出来生活,需要重新审视井以外的生 ...

  3. 精致3D图片切换效果,最适合企业产品展示

    这是一个精致的立体图片切换效果,特别适合企业产品展示,可立即用于实际项目中.支持导航和自动播放功能, 基于 CSS3 实现,推荐使用最新的 Chrome,Firefox 和 Safari 浏览器浏览效 ...

  4. WOW.js – 在页面滚动时展现动感的元素动画效果

    在一些网页上,当你滚动页面的时候会看到各式各样的元素动画效果,非常动感.WOW.js 就是一款帮助你实现这种 CSS 动画效果的插件,很容易定制,你可以改变动画设置喜欢的风格.延迟.长度.偏移和迭代等 ...

  5. 推荐10个 CSS3 制作的创意下拉菜单效果

    下拉菜单是一个很常见的效果,在网站设计中被广泛使用.通过使用下拉菜单,设计者不仅可以在网站设计中营造出色的视觉吸引力,但也可以为网站提供了一个有效的导航方案.使用 HTML5 和 CSS3 可以更容易 ...

  6. inuit.css – 基于 Sass 的强大,可扩展的 CSS 框架

    inuit.css 是一个强大的,可扩展的 CSS 框架,另外还是基于 Sass,面向对象的框架.inuit.css 是建立在 BEM 风格的命名约定,非常适合于想要专注于创意而不是代码的设计师以及喜 ...

  7. 每日学习总结<二> 2015-9-1

    Android:      知识点: 子线程中无法更新UI,因为UI是线程不安全的. Android的UI单线程模式: 不能阻塞UI线程: 不能从UI线程的外部访问Android UI toolkit ...

  8. CSS侧边栏宽度不动(更改页面宽度时),内容区宽度自适应

    一个页面,左栏是内容栏content,右栏是侧边栏sidebar.如何使侧边栏宽度不动(更改页面宽度时),内容区宽度自适应呢?为了保证内容区宽度自适应,先不设定其宽度,使其填充整个DIV区域,设定足够 ...

  9. 15 Best Responsive HTML5 Frameworks 2014

    Best HTML5 frameworks are most popular because with the use of these frameworks you can create websi ...

  10. 一个java页游服务器框架

    一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简 ...