div水平居中的N种方法

div水平居中的N种方法

一、单行垂直居中

如果一个容器中只有一行文字,对它实现居中相对比较简单,我们只需要设置它的实际高度height和所在行的高度line-height相等即可。

div{

height:25px;

line-height:25px;

overflow:hidden;

}

这段代码很简单,后面使用overflow:hidden的设置是为了防止内容超出容器或者产生自动换行,达不到垂直居中的效果。

单行文字实现垂直居中

body{font-size:12px;font-family:tahoma;}

div{

height:25px;

line-height:25px;

background-color:#FFCCFF;

}

现在我们要使这段文字垂直居中显示!

二、多行未知高度文字的垂直居中

如果一段内容,它的高度是可变的那么我们就可以使用上一节讲到的实现水平居中时使用到的最后一种方法,就是设定Padding,使上下的padding值相同即可。同样的,这也是一种“看起来”的垂直居中方式,它只不过是使文字把

完全填充的一种访求而已。可以使用类似下面的代码:

div{

padding:25px;

line-height:30px;

}

优点:它可以在任何浏览器上运行,并且代码很简单,只不过这种方法应用的前提就是容器的高度必须是可伸缩的。

三、多行文本固定高度的居中

CSS中的vertical-align属性只应用于inline level, inline-block level及table-cells元素上;其次vertical-align的对齐就基于每个line box(行框)的。但是在CSS中还有一个display属性能够模拟,所以我们可以使用这个属性来让

模拟
就可以使用vertical-align了。

注意:display:table和display:table-cell的使用方法,前者必须设置在父元素上,后者必须设置在子元素上,因此我们要为需要定位的文本再增加一个

元素:

#wrap {

display:table;

width:100%;

background-color:#FFCCFF;

}

#content {

display:table-cell;

vertical-align:middle;

height:500px;

}

来看例子:

多行文字实现垂直居中

#wrap {

display:table;

width:100%;

background-color:#FFCCFF;

}

#content {

display:table-cell;

vertical-align:middle;

text-align:center;

height:400px;

}

现在我们要使这段文字垂直居中显示!

content可以动态改变高度(不需在 CSS 中定义)。当wrap里没有足够空间时,content不会被截断 。

这个方法应该是很理想了,但是只能在IE8及以上浏览器以及非IE浏览器下才能看到效果

参考链接

五、多行文本垂直水平的居中(未知宽高)

#content{

position:absolute;

top:50%;

left:50%;

transform:translate(-50%,-50%);

}

利用了transform: translate(-50%, -50%);

示例如下:

多行文字实现垂直居中

#content {

position:absolute;

top:50%;

left:50%;

transform:translate(-50%,-50%);

height:400px;

width:400px;

background-color:#FFCCFF;

}

Content Here

六、多行文本固定宽高的居中

#content {

background:#ddd;

position:absolute;

top:50%;

left:50%;

width:200px;

height:100px;

margin-left:-100px;

margin-top:-50px;

/* negative half of the width */

/* negative half of the height */

}

示例如下:

多行文本固定高度的居中

#content {

background:#ddd;

position:absolute;

top:50%;

left:50%;

width:200px;

height:100px;

margin-left:-100px;

margin-top:-50px;

}

Content Here

优点:适用于所有浏览器、不需要嵌套标签

缺点:没有足够空间时,content会消失(类似div 在body内,当用户缩小浏览器窗口,滚动条不出现的情况)

七、多行文本固定宽高的居中

这个方法使用了一个position:absolute,有固定宽度和高度的div。这个div被设置为top:0;bottom:0;。但是因为它有固定高度,其实并不能和上下都间距为 0,因此margin:auto;会使它居中。使用margin:auto;使块级元素垂直居中是很简单的。

#content {

position:absolute;

top:0;

bottom:0;

left:0;

right:0;

margin:auto;

height:240px;

width:70%;

}

示例如下:

多行文本固定高度的居中

#content {

position:absolute;

top:0;

bottom:0;

left:0;

right:0;

margin:auto;

height:240px;

width:70%;

background:#ddd;

}

Content Here

优点:简单

缺点:IE(IE8 beta)中无效;无足够空间时,content 被截断,但是不会有滚动条出现

参考链接

八、居中一个浮动元素

奇怪怎么让一个浮动元素居中,不过还是奉上代码直接看效果吧

HTML:

居中居中居中居中居中居中
居中居中居中居中居中居中居中居中居
中居中居中居中居中居中居中居中居中居
中居中居中居中居中居中居中

CSS:

.wrap{

float:left;

width:100%;

height:400px;

background-color:#ccc;

}

.ele{

float:left;

position:relative;

left:50%;

top:50%;

}

.ele-inner{

position:relative;

left:-50%;

-webkit-transform:translate3d(0,-50%,0);

transform:translate3d(0,-50%,0);

background-color:#333;

color:#fff;

}

这种方法的原理,首先是利用float属性将需要居中的元素的父元素.ele的宽度收缩,然后left:50%将.ele的左边和水平中线对齐,这个时候还没居中,还需要将其往回拉自身宽度的50%,于是.ele-inner便是真正需要水平居中的元素,我给它一个position:relative,将其往回拉自身宽度50%就行了。对于垂直方向,依然是先将.ele top:50%到垂直方向中点,但是这时给.ele-inner top:50%是不起作用的,因为如果没给父元素明确高度的话,这个50%是计算不出来的,因此,就有了transform : translate3d(0, -50%, 0)。

这种方法的好处是元素可以不定宽,任何时候都可以做到居中。

缺点:当居中元素的父元素left:50%时,如果元素宽度足够大,会超出外面的容器,而如果外面的容器又正好是overflow:auto的话,那就会在外面产生滚动条。

九、inline-block实现 未知尺寸元素水平垂直居中

CSS探索之旅

inline-block的前世今生

十、text-align:center + absolute

text-aign:center本来是不能直接作用于absolute元素的,但是没有给其left等值的行级absolute元素是会受文本的影响的

HTML

center + absolute

CSS(less)

.wrap{

text-align:center;

width:100%;

height:400px;

background-color:#ccc;

font-size:0;

}

.ele{

position:absolute;

margin-left:-(100px/2);

margin-top:(400px-100px)/2;

width:100px;

height:100px;

display:inline-block;

background-color:#333;

color:#fff;

font-size:18px;

}

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

推荐阅读更多精彩内容

  • 各种纯css图标 CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出。直接用CSS3画出这些图形,要比...
    剑残阅读 9,355评论 0 8
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,705评论 1 92
  • 收听音频,戳链接,旧号itclan已暂停使用,欢迎关注微信itclanCoder公众号可收听更多音频 前言 关于网...
    itclanCoder阅读 8,143评论 3 30
  • 1、垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,...
    kiddings阅读 3,144评论 0 11
  • 最近网络上有句话十分流行:嫁给爱情。浪漫感人的影视画面配上一句“这大概就是嫁给爱情的样子”引得姑娘们纷纷留言立誓,...
    深海大渔阅读 389评论 2 7