css 的规律摸索之路(二)css之居中问题(垂直居中与水平居中)

通过上篇css 的规律摸索之路(一)css之三角形的规律及变化,我们已经知道css三角形是怎么回事,现在我们来看看另外一个,常见的应用:css之居中问题(垂直居中与水平居中)

垂直居中

单行文本垂直居中

首先,说说最简单的常见居中方式-单行文本垂直居中:

<div class="single_line_text_box">
    <div class="single_line_text">单行文本垂直居中</div>
    <!-- <img src="" alt="" class="single_line_text"> -->
</div>
<style>
    .single_line_text_box {
        height: 100px; width: 100%; background: #333; line-height: 100px; text-align: center;
    }
    .single_line_text {
        vertical-align: middle; position: relative;
    }
</style>

这方式很简单,我们常用来做单行文本的垂直居中,它的用处也只限与垂直居中包含文本的容器和图片,并且宽高不能设定不然无法居中。

说明:通过父容器设定line-height,以及子元素设定vertical-align: middle;来实现,其中子元素垂直居中不能设定宽度和高度,子元素的内容必须为文本或图片,且文字尽量不能换行不然会溢出

display:table的方式

下来就是display:table的方式,这是一种借助表格样式的居中方式:

<div class="table_parent">
        <div class="table_child">说明:通过父容器设定display: table;,以及子元素设定display: table-cell; vertical-align: middle;来实现,其中子元素设定的高度宽度无效,子元素的内容任意,内容为文字时自动换行照样居中</div>
</div><br>
<div class="table_parent">
       <div class="table_child"><div class="table_child_content">display:table的方式</div></div>
 </div>
 <style>
        .table_parent {
            display: table; height: 100px; width: 100%; background: #eee; text-align: center;
        }
        .table_child {
            display: table-cell; vertical-align: middle;
        }
        .table_child_content {
            height: 20px; width: 500px; background: #aaa; display: inline-block;
        }
 </style>

这种方式的垂直居中效果如图:

说明:这种方式通过父容器设定display: table;,以及子元素设定display: table-cell; vertical-align: middle;来实现,其中子元素设定的高度宽度无效,子元素的内容任意,内容为文字时自动换行照样居中

绝对定位居中

绝对定位居中的方式,这是一种借助绝对定位和外边距的居中方式:

<div class="absolute_locating_parent">
        <div class="absolute_locating_child">绝对定位居中</div>
    </div>
    <style>
        .absolute_locating_parent {
            height: 100px; width: 100%; position: relative; background: #eee;
        }
        .absolute_locating_child {
            margin: auto; position: absolute; width: 100px; height: 50px; background: #aaa;
            top: 0; left: 0; bottom: 0; right: 0;
        }
    </style>

这种方式的垂直居中效果如图:

说明:通过父容器设定position: relative;,子元素设定margin: auto; position: absolute;top: 0; left: 0; bottom: 0; right: 0;来实现,其中子元素必须固定宽高,子元素的内容任意。其中绝对定位居中支持跨浏览器,包括IE8-IE10,不论是否设置padding都可居中(在不使用box-sizing属性的前提下),完美支持图片居中。但是.必须声明高度以及设置overflow:auto来防止内容越界溢出,在Windows Phone设备上不起作用。

弹性盒居中对齐

通过弹性盒来实现居中对齐,本人推荐的居中方式,但是注意兼容性。

<div class="elastic_box_centering">
        <div class="iconloader">
            <!-- <div class="iconloader_child"></div> -->
            Loader...
        </div>
    </div>
    <style>
        .elastic_box_centering {
            display: flex;
            align-items: center; /*定义元素垂直居中*/
            justify-content: center; /*定义容器里的元素水平居中*/
            width: 100%; height: 300px;
            background: #eee;
        }
        .iconloader {
            background: #aaa;
        }
        /*.iconloader_child {
            width: 50px; height: 50px;
        }*/
    </style>

这种方式的垂直居中效果如图:

说明:通过弹性魔盒来实现居中,这种方式特别优雅只需要给父元素添加就可以,不论你子元素是什么样子都居中

绝对定位和负margin

通过padding等份自填充来实现居中对齐的假象,除非特殊环境不然尽量不要使用这种居中方式。

div class="absolute_locating_margin">
    <div class="absolute_locating_margin_child">绝对定位和负margin</div>
</div>
<style>
    .absolute_locating_margin {
        height: 100px; width: 100%; background: #eee; position: relative;
    }
    .absolute_locating_margin_child {
        position: absolute; top: 50%; left: 50%;
        height: 50px; width: 180px; margin: -25px 0 0 -90px;
        background: #999;
    }
</style>

这种方式的垂直居中效果如图:

说明:这种方式是通过定位然后利用margin弥补定位来实现的居中,其子元素的宽度和高度必须固定

padding居中假象

通过padding等份自填充来实现居中对齐的假象,除非特殊环境不然尽量不要使用这种居中方式。

<div class="padding_center">
    <div class="padding_center_child">padding居中</div>
</div>
<style>
    .padding_center {
        padding: 5% 0; width: 100%; background: #eee;
    }
    .padding_center_child {
        text-align: center; background: #999; color: #fff; padding: 10% 0;
    }
</style>

这种方式的垂直居中效果如图:

说明:这种方式是通过padding填充来实现的假象,其父元素和子元素的高度是未知,由浏览器自由定义

到此垂直居中基本赘述完毕,其实还有几种但是个人觉得有些无脑加胡闹

水平居中

text-align内容居中

我们常用这种方式来进行居中,对于需要居中的都得是行内元素或内联块元素。

<div class="center">
    <div class="center_child">内容居中</div>
</div>
<style>
    .center {
        height: 500px; width: 100%; background: #eee;  text-align: center;
    }
    .center_child {
       display: inline-block; width: 70px; height: 70px; background: #999; 
    }
</style>

margin: 0 auto;

对于这个大家一定很熟悉,很常用。

<div class="margin_center">
    <div class="margin_center_child">内容居中</div>
</div>
<style>
    .margin_center {
        height: 500px; width: 100%; background: #eee;
    }
    .margin_center_child {
       width: 70px; height: 70px; background: #999; margin: 0 auto;
    }
</style>

说明:margin: 0 auto;这种居中方式特别适合宽和高固定的,但是不知道宽的他就解决不了了,于是下面的孕育而生

table+margin

对于这个大家就不一定很熟悉,其实很简单,给子元素加上display: table;这句话就可以了

<div class="table_margin_center">
    <div class="table_margin_center_child">table_margin_center居中</div>
</div>
<style>
    .table_margin_center {
        height: 500px; width: 100%; background: #eee;
    }
    .table_margin_center_child {
        background: #999; display: table; margin: 0 auto;
    }
</style>

小结

到此常见的居中方式就完毕了,我们可以对与两个进行配合应用。

提示:后面还有精彩敬请期待,请大家关注我的CSDN博文:侬姝沁儿,或者我的简书专题:web前端。如有意见可以进行评论,每一条评论我都会认真对待。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容