淡风wisdon大大 2019-06-28
在父元素上设置 text-align: center 使文字/图片水平居中。
.container { text-align: center; }
.container { width: 200px; margin: 0 auto; }
原理:设置块级元素上下padding相等
前提:没有设置高度,高度由内容撑开。块级元素如果设置了高度,就不知道如何设置padding的数值
demo
<style> .ct{ padding: 40px 0; text-align: center; background: #eee; } </style> <div class="ct"> <p>好好学习</p> <p>天天向上</p> </div>
执行结果
(1)demo,
使用前提是块级元素的宽高固定
<div class="dialog"> <div class="header">我是标题</div> <div class="content">我是内容</div> </div> <style> html,body { height: 100%; } .dialog { position: absolute; left: 50%; //使用绝对定位,让dialog起点偏移到页面的中央 top: 50%; margin-left: -200px;//通过负margin,偏移dialog宽高的一半,让dialog处于正中 margin-top: -150px; width: 400px; height: 300px; box-shadow: 0px 0px 3px #000; } .dialog .header{ padding: 10px; background: #000; color: #fff; } .dialog .content{ padding: 10px; } </style>
(2)解析:
使用绝对定位 position: absolute,让dialog起点偏移到页面的中央
通过负margin,偏移dialog宽高的一半,让dialog处于正中。不用relative的原因是已经用了绝对定位了,所以只好用负margin。结果如图
(3)块级元素的宽高不固定,就不能用负margin了(margin使用百分比是相对于父元素的宽度)。我们可以用css3的一个transform的属性,transform是相对自身的宽高来做偏移的。
原理:
使用环境:块级元素中设置行内元素水平垂直居中
代码:demo
结果:
遇坑:1、当然使用绝对定位也可以实现这个效果
2、伪元素设置display:block是有问题,需要设置为inline-block
3、使用伪元素是为了减少标签
原理:把box设置为表格元素(display: table-cell),通过vertical-align: middle对里面的元素做垂直居中
缺点:把box设置为display: table-cell,box不再是块级元素,如果不设置宽度就会收缩。
代码:demo
结果:
代码:demo
<div class="space"> <div class="earth"></div> </div> .space { width: 100vw; height: 100vh; /* 设置宽高以显示居中效果 */ display: flex; /* 弹性布局 */ align-items: center; /* 垂直居中 */ justify-content: center; /* 水平居中 */ } body { margin: 0; background: rgba(0, 0, 0, .95); } .earth::after { content: '
/*垂直居中,div上边界距离窗口上边的距离为窗口高度的50%,并针对不同浏览器进行兼容。-- 在外层添加一个div,把行内容居中,添加.row .justify-content-center -->
CSS中居中的几种方式1.水平居中margin:0 auto;块级元素在块级元素中居中设置在子元素上,前提是不受float影响。给它的父元素设置text-aglin:center不会使它在父元素中居中