关于垂直居中

做项目每次垂直居中的时候都折腾半天,在这边稍微整理一下垂直居中我所理解的一点知识吧。

1,行内元素

行内元素,比如,img,span等直接用vertical-align:middle,就可以搞定了。

2,块元素

垂直居中,最简单的方式是height:20px;line-height:20px;让他们相等,块元素就可以达到居中效果并且不破坏周围的布局。

还可以用绝对定位来布局,height:100px;position:absolute;top:50%;margin-top:-50px;也可以达到居中效果,但是必须是高度确定的情形下才可以用。

同理,也可以用同样的办法实现水平居中。

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

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

3,一个<div>里包了一个img,一个span的话怎么居中

今天看博客偶然看到的法子,较深的讲解了vertica-align 属性

  http://www.html-js.com/article/Some-understanding-of-the-CSS-study-on-the-vertical-alignment-for-verticalalign

  所有的行内元素都是基线对齐的么,照道理来说不管是普通的行内元素还是替换元素都是对齐父元素的基线baseline,但是他们自身的行高和高都影响他们的布局。对于格式化的内联元素使用了 display:inline-bolck 使得一个内联元素表现得像一个块级元素的属性且又有行内元素的属性(不换行,标签末尾不带br强行换行符),因此行内块级元素的的文字依然是跟我们常见的div标签的文字都是从左上角往右下角依次书写,对于其增加的高度也是从上往下顶:

  所以假如给一个元素增加高度是其实单从我们所直观看见的是内容区的外边界开始往下递增。所以也不会奇怪,当在一个元素内插入一张图像,改变行内元素变成行内块级元素,并赋予它与父框等同高度时,它会变得不对齐。其实他们是正确的显示效果,并不是因为display而改变垂直对齐基线。而我们可以通过利用 vertical-algin 改变他们两个相对父框垂直位置。

  

.content span{ display:inline-block; height:80px;line-height:80px;vertical-align:top; background:#78c0fa; color:#fff;}通过在span 设置成diplay:inline-block;设置line-height:80px;会在他的baseline显示的位置以80px;高度往下显示撑起整个div。通过设置vertical:align就达到垂直居中的效果啦~~~4.这个方法把一些 div 的显示方式设置为表格,因此我们可以使用表格的 vertical-align property 属性。


<div id="wrapper">
<div id="cell">
<div class="content">
		Content goes here</div>
</div>
</div>


#wrapper {display:table;}
#cell {display:table-cell; vertical-align:middle;}

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

  缺点
             Internet Explorer(甚至 IE8 beta)中无效,许多嵌套标签(其实没那么糟糕,另一个专题)

      5, 这种方法,在 content 元素外插入一个 div。设置此 div height:50%; margin-bottom:-contentheight;。

content 清除浮动,并显示在中间。

<div id="floater"></div>
<div id="content">
	Content here
</div>
#floater	{float:left; height:50%; margin-bottom:-120px;}
#content	{clear:both; height:240px; position:relative;}

              优点:
            适用于所有浏览器
            没有足够空间时(例如:窗口缩小) content 不会被截断,滚动条出现

             缺点
              唯一我能想到的就是需要额外的空元素了(也没那么糟,又是另外一个话题)

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

<div id="content">
	Content here</div>
#content {
	position:absolute;
	top:0;
	bottom:0;
	left:0;
	right:0;
	margin:auto;
	height:240px;
	width:70%;
}

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

引自:http://www.qianduan.net/css-to-achieve-the-vertical-center-of-the-five-kinds-of-methods.html

时间: 2024-08-08 13:47:07

关于垂直居中的相关文章

css,css3盒子水平垂直居中

垂直居中在面试中经常见到的题目.总结几种,希望大家多多指教. ....<sytle> .box{ width:100px; height:100px; border;1px solid red; position:relative;   //父集相对定位 } .box1{ width:50px; height:50px; border:1px solid #000; } </style><body> <div class="box"> &

垂直居中css

.flex {    display: -webkit-box;    display: -webkit-flex;    display: -moz-box;    display: -moz-flex;    display: -ms-flexbox;    display: flex;    /* 水平居中*/    -webkit-box-align: center;    -moz-box-align: center;    -ms-flex-pack: center;    /* I

DIV内容垂直居中

css垂直居中属性设置vertical-align: middle对div不起作用,例如: 1 <!DOCTYPE html> 2 <html lang="zh-CN"> 3 <head> 4 <meta charset="utf-8"> 5 <meta http-equiv="X-UA-Commpatible" content="IE=edge"> 6 <ti

关于未知大小的图片的垂直居中问题

<div class="main"> <img src="3.jpg" /> </div> <style> .main { width:500px; height:600px; border:1px solid black; display:table-cell; vertical-align:middle; text-align:center; } </style> 搞定! 2:背景法: <styl

as3.0 TextField中单行文字内容垂直居中

在开头,先首说一下TextField中单行文字空间是怎样的.图如下 从图中可以看到,当为文字设定像素大小时,我们都可以从TextField中的文字空间信息取得两个信息Ascent与Descent,文字空间与边距的2px一般是固定的.所以如果我们想在TextField中单行文字垂直居中的话,可以这样设定TextField的高度为Ascent+Descent+4px.具体在as3.0中的个人实现代码实例如下: package { import fl.controls.Label; import fl

前端技术之CSS实现图片垂直居中

前端技术之CSS实现图片垂直居中技术 maybe yes 发表于2015-03-14 18:52 原文链接 : http://blog.lmlphp.com/archives/86/The_front-end_technology_pure_CSS_to_achieve_image_vertically  来自 : LMLPHP后院 让 图片实现水平居中比较简单,只需要在父级容器中添加属性 text-align 为 center 即可.使用纯 CSS 实现图片的垂直居中,可以将图片包裹容器的 d

垂直居中小记 line-height table vertical-align:middle

垂直居中分两种情况:1.父元素高度确定的单行文本        2.以及父元素高度确定的多行文本. 1.垂直居中-父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的 height 和 line-height高度一致来实现的,即此时单行文本的行高line-height=height(父元素块高度).(height: 该元素的高度,line-height: 顾名思义,行高(行间距),指在文本中,行与行之间的 基线间的距离 ). line-height 与 font-size 的计算值之差,在

CSS 垂直居中

1.单行文本 行高和父元素的高相等即可实现垂直居中 2.多行文本 方式1: 设置父元素display:table: 设置里边的元素display:table-cell:vertical-align:middle:即可使得元素竖直居中,但是此种方式兼容性不是很好低版本的浏览器都不兼容. 方式2: 设置父元素position:relative绝对定位,并设置其子元素position:absolute相对对位,设置top:50%:left:50%:将元素的左上角定位到其父元素的中间,然后设置元素宽度以

未知宽高的元素水平垂直居中方法总结

1.父元素设置display:table;子元素设置display:table-cell; 缺点:IE7不支持,而且子元素会填满父元素,不建议使用 2.使用css3 transform:translate(-50%; -50%) 缺点:兼容性不好,IE9+ 3.使用flex布局 缺点:兼容性不好,IE9+ 4.利用伪类元素 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U

一行或者多行垂直居中问题

在实际开发中,我们会遇到很多需要多行垂直居中的问题,今天空闲做个总结. 1.首先一行问题我就不用说了,给一个line-height一般都能够解决垂直居中的问题. 但是如果是下面这中格式那该如何处理呢? <div> <p>多行多行多行多行</p> <p>多行多行多行多行</p> </div>方法一:也是最重要的.虽然这个方法不兼容ie6 ie7 给div一个父盒子 将父盒子的css设置为display:table. 子盒子display