垂直居中重要方法理解---重点是方法三

方法一

这个方法把一些 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)中无效,许多嵌套标签(其实没那么糟糕,另一个专题)

方法二:

这个方法使用绝对定位的 div,把它的 top 设置为 50%,top margin 设置为负的 content 高度。这意味着对象必须在 CSS 中指定固定的高度。

因为有固定高度,或许你想给 content 指定 overflow:auto,这样如果 content 太多的话,就会出现滚动条,以免content 溢出。

<div class="content">
	Content goes here</div>
#content {
	position:absolute;
	top:50%;
	height:240px;
	margin-top:-120px; /* negative half of the height */
}

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

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

方法三

这种方法,在 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 不会被截断,滚动条出现

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

例如:

上边的元素正好在50%–0.5*下边元素的位置 :这里为了便于说明,我给#floater添加了背景和内容;

如何不给#floater添加内容,看到是这样的:

为了便于看清楚:

我改变父级元素为box,如下:

四、单行内容的居中
只考虑单行是最简单的,无论是否给容器固定高度,只要给容器设置 line-height 和 height,并使两值相等,再加上 over-flow: hidden 就可以了

.middle {
height: 4em;
line-height: 4em;
overflow: hidden;
}

优点:
1. 同时支持块级和内联极元素
2. 支持所有浏览器
缺点:
1. 只能显示一行
2. IE中不支持<img>等的居中
要注意的是:
1. 使用相对高度定义你的 height 和 line-height
2. 不想毁了你的布局的话,overflow: hidden 一定要

五、多行内容居中,且容器高度可变
也很简单,给出一致的 padding-bottom 和 padding-top 就行

.middle {
padding-top: 24px;
padding-bottom: 24px;
}

优点:
1. 同时支持块级和内联极元素
2. 支持非文本内容
3. 支持所有浏览器
缺点:
容器不能固定高度

时间: 2024-11-03 22:06:27

垂直居中重要方法理解---重点是方法三的相关文章

java重写equals方法(重点讲解)

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求: 1.自反性:对于任何非空引用x,x.equals(x)应该返回tru

C#Lambda表达式的理解:谓词方法 匿名方法 使用Lambda

Lambda表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量.它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式.所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to".Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块. 下面三个方法会帮你会容易理解到Lambda表达式的好处,

TableViewCell reuse 重用 我认为的正确理解与使用方法

其实有点失望,因为用google搜索“uitableviewcell dequeueReusableCellWithIdentifier”出来一堆堆资深博主的文章.看了看,大部分都是在解决一个问题:使用重用时cell显示混乱的问题.该问题本身并不让我失望,失望的是博主们的解释. 首先,回顾一下UITableViewCell的重用,其基本逻辑就是tableView一开始会创建一屏幕的cell(如果有那么多)并把他们标记(Identifier),之后用户上下滑动tableView时,使用Identi

计划:怎样理解水平集方法 ITK Level set V4 框架介绍

简易解释:在曲面中插入一个平面所形成的轮廓,即是该轮廓的水平集表示,可见,该轮廓的水平集表示有多个.对于图像分割,在图像力的驱动下曲面进行更新. 轮廓的数学表达有隐式和显式两种表达.用曲面演化代替Front (C)演进. C(t) = {(x, y)|φ(x, y, t) = 0} ?φ/ ?t + F|?φ| =0 (1) φ(x, y, 0) = φ0(x, y) 方程的本质是什么? 几何解释是什么 edge-based level set ?φ /?t = g(?I)|?φ| (div (

SWF在线绘本批量制作高质量PDF的新方法(重点在批量制作)

SWF在线绘本批量制作高质量PDF的新方法(重点在批量制作) 2012-12-21  未来决定... http://www.ebama.net/thread-107643-1-1.html 含笑 发表于 2012-12-10 13:51 请教楼主,如何进行压制?是用什么软件吗? 虚拟装载DVD后DVDdcrypter分割提取VOBdgindex制作工程文件和分轨Megui+avs压制mmg封包 具体的教程和软件,TLF小组出过一个打包文件,全在里面了 字幕的话各种情况提取办法不同,图片字幕用su

Android中Matrix的pre post set方法理解(转载来源:Linux社区 作者:zjmdp)

虽说以前学习过线性代数和图形学原理,但是在实际中碰到matrix还是疑惑了好一阵子,今天通过向同事请教终于找到一点门路,特总结如下: Matrix主要用于对平面进行缩放,平移,旋转以及倾斜操作,为简化矩阵变换,Android封装了一系列方法来进行矩阵变换,其中包括pre系列方法:preScale,preTranslate,preRotate,preSkew,set系列方法:setScale,setTranslate,setRotate,setSkew,post系列方法:postScale,pos

理解 ES6 Generator-next()方法

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>generator-next</title> 6 </head> 7 <body> 8 9 <h3>理解 ES6 Generator-next() 方法</h3> 10 11 <scr

【JVM虚拟机】(8)--深入理解Class中--方法、属性表集合

#[JVM虚拟机](8)--深入理解Class中--方法.属性表集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机](6)---深入理解Class中访问标志.类索引.父类索引.接口索引 3.[JVM虚拟机](7)---深入理解Class中-属性集合 那么这篇博客主要讲有关 方法表集合 相关的理解和代码示例. 方法表集合: 告知该方法是什么修饰符修饰?是否有方法值?返回类型是什么?方法名称,方法参数,还有就是方法内

java-第十三章-类的无参方法(一)-根据三角形的三条边长,判断是直角,锐角还是钝角三角形

package 本章总结; public class A03class { public boolean showA(int a ,int b ,int c){ boolean con=false; if((a+b)>c&&(a+c)>b&&(c+b)>a){ con=true; } return con; } public String Shape(int a,int b,int c){ String shape=""; if((a=