css11----转载----元素垂直对齐

css-实现元素/元素内容,垂直居中对齐

一、单行内容的垂直居中(line-height:行高方法)

只考虑单行是最简单的,无论是否给容器固定高度,只要给容器设置 line-height 和 height,并使两值相等,就可以了。

缺点:1:这种方法局限性太大,只有单行文本的元素才适用,所以在多行元素中是不能使用这种方法的了。
         2 :IE中不支持<img>等的居中。

优点:适合在所有浏览器,没有足够空间时,内容不会被切掉,同时支持块级和内联元素

   但是这种方法对运用在小元素上是非常有用的,比如说让一个button、或者单行文本字段。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style>
.middle-demo-1{
    background-color:#f1f1f1;
    height: 30px;
    line-height: 30px;
}
</style>
</head>
<body>
    <div class="middle-demo-1">
         css实现元素
    </div>
</body>
</html>

二、多行内容垂直居中,且容器高度可变:(padding:内边距方法)

也很简单,给出一致的 padding-bottom 和 padding-top 就行
优点:
1. 同时支持块级和内联极元素
2. 支持非文本内容
3. 支持所有浏览器
缺点:容器不能固定高度

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style>
.middle-demo-1{
    padding-top: 24px;
    padding-bottom: 24px;
}
</style>
</head>
<body>
    <div class="middle-demo-2">
         css实现元素
    </div>
</body>
</html>

三、把容器当作表格单元

CSS 提供一系列diplay属性值,包括 display: table, display: table-row, display: table-cell 等,能把元素当作表格单元来显示。

这是再加上 vertical-align: middle, 就和表格中的 valign="center" 一样了。
缺点:IE低版本不支持这些属性。如果需要兼容ie6,7,需要使用Hack
要注意的是:和一个合法的<td>元素必须在<table>里一样,display: table-cell 元素必须作为 display: table 的元素的子孙出现。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style>
.middle-demo-3{
display: table-cell;
height: 100px;
vertical-align: middle;
background-color: #f1f1f1;
}
</style>
</head>
<body>
    <div class="middle-demo-3">
         css实现元素
    </div>
</body>
</html>

四、已知宽高块元素的水平垂直居中

绝对定位50%,margin负值

缺点:由于固定死元素的高度,致使没有足哆的空间,当内容超过容器的大小时,要么会消息,要么会出现滚动条(如果元素在body内,当用户缩小浏览器窗口时,body的滚动条将不会出现)。

注意:其一元素定位关系到一个相对定位参考,所以要保证元素是相对于哪个为参考坐标;

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style>
.middle-demo-4{
    background-color: red;
    width: 200px;/*元素的宽度*/
    height:200px;/*元素的高度*/
    position: absolute;
    left: 50%;/*配合margin-left的负值实现水平居中*/
    margin-left: -100px;/*值的大小等于元素宽度的一半*/
    top:50%;/*配合margin-top的负值实现垂直居中*/
    margin-top: -100px;/*值的大小等于元素高度的一半*/
}

</style>
</head>
<body>
    <div class="middle-demo-4">css元素本身水平垂直居中对齐,而不是其元素内容,主意区分</div>
</body>
</html>

五:全兼容的水平垂直居中实例(原文:http://demo.doyoe.com/css/alignment/),

 1:vertical-align只应用于inline level, inline-block level 及 table-cells 元素上;其次 vertical-align 的对齐就基于每个 line box(行框)的。

简单的说,inline level元素按照 Normal flow 水平排版出一行就会形成一个line box,其高度由内容形成,如果换行,则又是另一个line box,所有一段文本可能会分布在多个line box里,这些不重叠的line box被称作为a vertical stack of line boxes(一个垂直堆叠的线框集合)这些。

2: 换句话说,我们的垂直居中是要在每个line box中进行处理。
    而上例中我们想让一行文本在名叫demo的高100px的容器里垂直居中,这时有个问题就是demo容器并非 该行文本的line box,所以就算定    
    vertical-laign为middle也无法让该行文本在demo容器中垂直居中。

我们知道line box的高度是由内容形成的,这时我们可以额外创建一个与该行文本处于同一line box的元素,同时将新增元素的高度定义为与demo容器相同,此时line box的高度将与demo一致,文本将会在line box内垂直居中 即同样实现了在demo容器中垂直居中。本例我们使用伪对象::after来创建那个新增元素,可以设置新增元    素为不可见。

3:由于IE8以下浏览器不支持伪对象::after,于是我们通过IE条件注释为IE8以下浏览器新增一个额外元素span,其作用等同 inline-block #5 中的::after。本例支持所有主浏览器。

4:由于ie6,7下不支持display:inline-block,

  IE6 中 inline 元素只要触发了hasLayout 其表现就类似于 inline-block,这里设置 display:inline-block; 或者 zoom:1; 等其他属性值可以触发 hasLayout

表现出来是一样的。

5:display:inline-block 后的元素会产生水平空隙 font-size:0:解决间隙问题

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style>
#demo{
    height:100px;
    text-align:center;
    font-size:0;/*去除 inline-block 空隙*/
    background-color: red;
}
#demo:after,#demo span{
    display:inline-block;
    *display:inline;/*inline-block 兼容ie6,7*/
    *zoom:1;/*inline-block 兼容ie6,7*/
    width:0;
    height:100%;
    vertical-align:middle;
}
#demo:after{
    content:‘‘;
}
#demo p{
    display:inline-block;
    *display:inline;/*inline-block 兼容ie6,7*/
    *zoom:1;/*inline-block 兼容ie6,7*/
    vertical-align:middle;
    font-size:16px;
}

</style>
</head>
<body>
    <div id="demo">
    <p>这是一个终极实现的水平垂直居中实例</p>
    <!--[if lt IE 8]><span></span><![endif]-->
</div
</body>
</html>

为了更加理解实现原理,这里贴出参照文和相关知识原理
原文参照:http://demo.doyoe.com/css/alignment/

inline-block的前世今生:http://www.iyunlu.com/view/css-xhtml/64.html

未知高度多行文本垂直居中:http://iyunlu.com/view/css-xhtml/77.html

结语:我觉得以上5种方法在日常的工作中足够用了,而且实现原理简单,易于理解,如果不满足于以上的方法,可以看看以下链接的文章,不保证正确性,因为我觉得有部分小小的问题,大家看的时候好好斟酌啦,欢迎互相交流:

http://www.w3cplus.com/css/vertically-center-content-with-css

时间: 2024-08-26 16:39:06

css11----转载----元素垂直对齐的相关文章

文字和表单(checkbox/radio)元素垂直对齐方法,兼容Firefox和IE。

这几天在做表单时总会碰到复选框(checkbox)和单选框(radio)与文字不对齐的问题,要不是checkbox上浮了,要不是文字上浮.在前端开发过程中,单(复)选框和它们后面的提示文字在不进行任何设置的情况下,是无法对齐的,而且在Firefox和IE中相差甚大.即使设置了vertical-align:middle,也依然不能完美对齐. 解决办法: 1.文字大小必须是偶数,比如12PX. 2.将文字加上label标签并且也添加vertical-align:middle样式. 3.然后去除表单元

vertical-align垂直对齐用法

一.垂直对齐方式{vertical-align:middle/top/bottom:} <img>垂直对齐方式:1)给自身加vertical-align:再设置line-height即可: 注意:img会受文字影响自带行高需加font-size:0:去除影响: 2)给img标签设置参照物,也就是在同级内添加一个空标签,将其空标签高度设置为父元素高度(height:100%:),再给自身加vertical-align: 3)将img的父元素转换成table-cell(display:table-

box-align,box-pack实现元素垂直底部对齐

自己写了一个图表样式,利用box-align,box-pack属性end实现了其内部元素垂直底部对齐,在利用该属性前,设置其display属性为box即可. css代码: .tubiao-content{width: 90%;margin: auto;} .tubiao{border-bottom: solid 1px #d0cece; padding-top: 2.4rem;} .time01 { position: relative; float: left; margin-left:12%

vertical-align 属性设置元素的垂直对齐方式。

 值 描述 baseline 默认.元素放置在父元素的基线上. sub 垂直对齐文本的下标. super 垂直对齐文本的上标 top 把元素的顶端与行中最高元素的顶端对齐 text-top 把元素的顶端与父元素字体的顶端对齐 middle 把此元素放置在父元素的中部. bottom 把元素的顶端与行中最低的元素的顶端对齐. text-bottom 把元素的底端与父元素字体的底端对齐. length   % 使用 "line-height" 属性的百分比值来排列此元素.允许使用负值. i

css属性设置元素的垂直对齐方式

vertical-align 属性设置元素的垂直对齐方式. 可能的值 值 描述 baseline 默认.元素放置在父元素的基线上. sub 垂直对齐文本的下标. super 垂直对齐文本的上标 top 把元素的顶端与行中最高元素的顶端对齐 text-top 把元素的顶端与父元素字体的顶端对齐 middle 把此元素放置在父元素的中部. bottom 把元素的顶端与行中最低的元素的顶端对齐. text-bottom 把元素的底端与父元素字体的底端对齐. length   % 使用 "line-he

使用vertical-align实现垂直对齐

关于垂直对齐,之前研究过好几次了,但感觉每次都没研究透彻,做了几个效果,就觉得自己掌握了,实在是自欺欺人.真乃搞技术的大忌. 这两天又下定决心重新开始研究vertical-allign这个高深莫测的属性了,决定一举攻破城池.但由于这个属性牵扯到的东西实在太多,line-height.盒模型等,都是css中的难点.所以要彻底掌握要花好些时间了. 使用table-cell实现垂直对齐: <!DOCTYPE html> <html lang="en"> <hea

将图片在div中进行水平和垂直对齐

将图片在div中进行水平和垂直对齐 要进行水平对齐,只需在父级元素的样式中指定: text-align: center; 注意,是在父级元素的样式中指定,而不是在img本身的样式中指定. 要进行垂直对齐,相对来说则麻烦得多.期待简单的在img元素的父级元素的样式中指定vertical-align: middle是行不通的,在img元素本身的样式中指定也同样行不通(你在网上查到的方法都是这样).真正有效的方法如下: 首先,由于vertical-align: middle这个样式是只有在displa

css-实现元素垂直居中对齐

原文:css-实现元素垂直居中对齐 css-实现元素/元素内容,垂直居中对齐 一.单行内容的垂直居中(line-height:行高方法) 只考虑单行是最简单的,无论是否给容器固定高度,只要给容器设置 line-height 和 height,并使两值相等,就可以了. 缺点:1:这种方法局限性太大,只有单行文本的元素才适用,所以在多行元素中是不能使用这种方法的了.         2 :IE中不支持<img>等的居中. 优点:适合在所有浏览器,没有足够空间时,内容不会被切掉,同时支持块级和内联元

CSS实现垂直对齐的4种思路

× 目录 [1]line-height [2]vertical-align [3]absolute [4]flex 前面的话 相对于水平居中,人们对于垂直居中略显为难,大部分原因是vertical-align不能正确使用.实际上,实现垂直居中也是围绕几个思路展开的.本文将介绍关于垂直居中的4种思路 思路一: 行高line-height实现单行文本垂直居中 行内流传着一种说法,单行文本垂直居中要将高度和行高设置成相同的值,但高度其实没必要设置.实际上,文本本身就在一行中居中显示.在不设置高度的情况