CSS的各种居中——如何书写高质量代码

CSS的居中有水平居中和垂直居中,这两种居中又分为行内元素居中和块级元素居中,不同的居中用不同方法。 水平居中 1、行内元素水平居中(文本,图片) 给父层设置 text-align:center; 可以实现行内元素水平居中。 [code] <!DOCTYPE HTML> <html lang=&qu

CSS的居中有水平居中和垂直居中,这两种居中又分为行内元素居中和块级元素居中,不同的居中用不同方法。 
水平居中 
1、行内元素水平居中(文本,图片) 
给父层设置 text-align:center; 可以实现行内元素水平居中。

复制代码

代码如下:

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title></title> 
<style type="text/css"> 
.center{text-align:center;} 
</style> 
</head> 
<body> 
<div class="center"> 
<a href="http://www.google.com.hk/">谷歌搜索</a><br/><br/> 
<img src="cat.jpg" width="248" height="162" /> 
</div> 
</body> 
</html>

2、确定宽度块级元素水平居中 
确定宽度的块级元素水平居中,常用的有 margin:0 auto; 相信很多开发人员都用的是这个,不过本人认为还有更好的写法:margin-left:auto;margin-right:auto; 因为 margin-top 和 margin-bottom 在重置 css 时就已经写了为 0 了。

复制代码

代码如下:

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title></title> 
<style type="text/css"> 
.center{width:100px;height:100px;margin-left:auto;margin-right:auto;background:green;} 
</style> 
</head> 
<body> 
<div class="center"></div> 
</body> 
</html>

3、不确定宽度的块级元素水平居中 
不确定宽度的块级元素有三种方法实现。 
方法一:

复制代码

代码如下:

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title></title> 
<style type="text/css"> 
*{margin:0;padding:0;} 
ul{list-style:none;} 
table{margin-left:auto;margin-right:auto;} 
.demo li{float:left;display:inline;margin-right:5px;} 
.demo a{float:left;width:20px;height:20px;text-align:center;line-height:20px;background:#316ac5;color:white;border:1px solid #316ac5;text-decoration:none;} 
.demo a:hover{background:white;color:#316ac5;} 
</style> 
</head> 
<body> 
<table> 
<tbody> 
<tr> 
<td> 
<ul class="demo"> 
<li><a href="#">1</a></li> 
</ul> 
</td> 
</tr> 
</tbody> 
</table> 
<table> 
<tbody> 
<tr> 
<td> 
<ul class="demo"> 
<li><a href="#">1</a></li> 
<li><a href="#">2</a></li> 
<li><a href="#">3</a></li> 
</ul> 
</td> 
</tr> 
</tbody> 
</table> 
<table> 
<tbody> 
<tr> 
<td> 
<ul class="demo"> 
<li><a href="#">1</a></li> 
<li><a href="#">2</a></li> 
<li><a href="#">3</a></li> 
<li><a href="#">4</a></li> 
<li><a href="#">5</a></li> 
</ul> 
</td> 
</tr> 
</tbody> 
</table> 
</body> 
</html>

这里用到了 table 标签来实现不确定宽度的块级元素水平居中。table 本身不是块级元素,如果不给它设定宽度的话,会由内部元素的宽度“撑开”,但即使不设定它的宽度,仅设置 margin-left:auto 和 margin-right:auto 就可以实现水平居中。 
这种方法很巧妙,但是增加了无语义标签,加深了标签的嵌套层数。 
方法二

复制代码

代码如下:

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title></title> 
<style type="text/css"> 
*{margin:0;padding:0;} 
ul{list-style:none;} 
.wrapper{width:500px;height:100px;background:black;} 
.demo{text-align:center;padding:5px;} 
.demo li{display:inline;} 
.demo a{padding:2px 6px;background:#316ac5;color:white;border:1px solid #316ac5;text-decoration:none;} 
.demo a:hover{background:white;color:#316ac5;} 
</style> 
</head> 
<body> 
<div class="wrapper"> 
<ul class="demo"> 
<li><a href="#">1</a></li> 
</ul> 
<ul class="demo"> 
<li><a href="#">1</a></li> 
<li><a href="#">2</a></li> 
<li><a href="#">3</a></li> 
</ul> 
<ul class="demo"> 
<li><a href="#">1</a></li> 
<li><a href="#">2</a></li> 
<li><a href="#">3</a></li> 
<li><a href="#">4</a></li> 
<li><a href="#">5</a></li> 
</ul> 
</div> 
</body> 
</html>

方法二是改变元素的 display 值,使块级元素变成行内元素,然后使用 text-align:center 使其居中。相对于方法一,它不用增加无语义标签,简化了标签的嵌套深度,但它也存在一定的问题:它将块级元素变成了行内元素,这样就失去了一些块级元素的功能,比如设置宽度,高度。 
方法三

复制代码

代码如下:

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title></title> 
<style type="text/css"> 
*{margin:0;padding:0;} 
ul{list-style:none;} 
.wrapper{width:500px;height:100px;background:black;} 
.demo{clear:both;padding-top:5px;float:left;position:relative;left:50%;} 
.demo li{display:inline;float:left;margin-right:5px;position:relative;left:-50%;} 
.demo a{float:left;width:20px;height:20px;text-align:center;line-height:20px;background:#316ac5;color:white;border:1px solid #316ac5;text-decoration:none;} 
.demo a:hover{background:white;color:#316ac5;} 
</style> 
</head> 
<body> 
<div class="wrapper"> 
<ul class="demo"> 
<li><a href="#">1</a></li> 
</ul> 
<ul class="demo"> 
<li><a href="#">1</a></li> 
<li><a href="#">2</a></li> 
<li><a href="#">3</a></li> 
</ul> 
<ul class="demo"> 
<li><a href="#">1</a></li> 
<li><a href="#">2</a></li> 
<li><a href="#">3</a></li> 
<li><a href="#">4</a></li> 
<li><a href="#">5</a></li> 
</ul> 
</div> 
</body> 
</html>

方法三通过给父层设置浮动和相对定位以及 left:50%,子元素设置相对定位和 left:-50% 来实现水平居中。它可以保留块级元素的功能,而且不会添加无语义标签,不增加嵌套深度,但是设置了相对定位,会带来一定的副作用。 
这三种方法各有优缺点,具体使用哪种方法可以视具体情况而定。 
垂直居中 
1、父层高度不确定的垂直居中 
通过给父层设置相同的上下内边距实现。

复制代码

代码如下:

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title></title> 
<style type="text/css"> 
*{margin:0;padding:0;} 
.demo{width:500px;color:white;margin-bottom:10px;padding-top:20px;padding-bottom:20px;background:black;} 
.content{width:200px;height:50px;background:red;} 
</style> 
</head> 
<body> 
<div class="demo">hello world</div> 
<div class="demo"><img src="cat.jpg" width="248" height="162" /></div> 
<div class="demo"><div class="content"></div></div> 
</body> 
</html>

2、父层高度确定的单行文本垂直居中 
通过给父层设置行高来实现,行高和父层高度相同。

复制代码

代码如下:

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title></title> 
<style type="text/css"> 
*{margin:0;padding:0;} 
.demo{width:500px;color:white;background:black;height:100px;line-height:100px;} 
</style> 
</head> 
<body> 
<div class="demo">hello world</div> 
</body> 
</html>

3、父层高度确定的多行文本、图片、块级元素垂直居中 
方法一: 
说到垂直居中,css 中有个用于垂直居中的属性 vertical-align,但只有在父层为 td 或者 th 时,这个属性才会生效,对于其他块级元素,例如 div、p 等,默认情况是不支持的。在 firefox 和 ie8 下,可以设置块级元素的 display 值为 table-cell,来激活 vertical-align 属性,但 ie6,7 并不支持,所以这种方法没有办法跨浏览器兼容。但是我们可以使用 table。

复制代码

代码如下:

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title></title> 
<style type="text/css"> 
*{margin:0;padding:0;} 
.wrapper{background:black;width:500px;color:white;height:100px;} 
.demo{width:200px;background:red;height:50px;} 
</style> 
</head> 
<body> 
<table> 
<tr> 
<td class="wrapper"> 
hellow world<br/> 
hellow world<br/> 
hellow world<br/> 
</td> 
</tr> 
</table> 
<table> 
<tr> 
<td class="wrapper"> 
<img src="cat.jpg" /> 
</td> 
</tr> 
</table> 
<table> 
<tr> 
<td class="wrapper"> 
<div class="demo"></div> 
</td> 
</tr> 
</table> 
</body> 
</html>

table 可以很好的实现垂直居中效果,但是它添加了无语义标签,增加了嵌套深度。 
方法二: 
对支持 display:table-cell 的 ie8 和 firefox 用 display:table-cell 和 vertical-align:middle 来实现居中,对不支持 display:table-cell 的 ie6 和 ie7 使用 hack 写法。

复制代码

代码如下:

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title></title> 
<style type="text/css"> 
*{margin:0;padding:0;} 
.mb{margin-bottom:10px;} 
.wrapper{background:black;width:500px;color:white;height:100px;margin-bottom:10px;display:table-cell;vertical-align:middle;*position:relative;} 
.demo{width:200px;background:red;height:50px;} 
.vam{*position:absolute;*top:50%;} 
.va{*position:relative;*top:-50%;} 
</style> 
</head> 
<body> 
<div class="mb10"> 
<div class="wrapper"> 
<div class="vam"> 
<div class="va"> 
hellow world<br/> 
hellow world<br/> 
hellow world 
</div> 
</div> 
</div> 
</div> 
<div class="mb10"> 
<div class="wrapper"> 
<div class="vam"> 
<img src="cat.jpg" /> 
</div> 
</div> 
</div> 
<div class="mb10"> 
<div class="wrapper"> 
<div class="vam"> 
<div class="va demo"></div> 
</div> 
</div> 
</div> 
</body> 
</html>

利用 hack 技术区别对待 firefox、ie8 和 ie6、ie7,在不支持 display:table-cell 的 ie6 和 ie7 下,通过给父子两层元素分别设置 top:50% 和 top:-50% 来实现居中。这种方法的好处是没有增加额外的标签,但缺点也很明显,一方面它使用了 hack,不利于维护,另一方面,它设置了 position:relative 和 position:absolute,带来了副作用。

时间: 2025-01-13 23:15:21

CSS的各种居中——如何书写高质量代码的相关文章

iOS书写高质量代码之耦合的处理 干货!

iOS书写高质量代码之耦合的处理 耦合是每个程序员都必须面对的话题,也是容易被忽视的存在,怎么处理耦合关系到我们最后的代码质量.今天Peak君和大家聊聊耦合这个基本功话题,一起捋一捋iOS代码中处理耦合的种种方式及差异. 简化场景 耦合的话题可大可小,但原理都是相通的.为了方便讨论,我们先将场景进行抽象和简化,只讨论两个类之间的耦合. 假设我们有个类Person,需要喝水,根据职责划分,我们需要另一个类Cup来完成喝水的动作,代码如下: 1 2 3 4 5 6 7 8 9 //Person.h

iOS书写高质量代码之耦合的处理

原创 2016-12-26 MrPeak MrPeak杂货铺 耦合是每个程序员都必须面对的话题,也是容易被忽视的存在,怎么处理耦合关系到我们最后的代码质量.今天Peak君和大家聊聊耦合这个基本功话题,一起捋一捋iOS代码中处理耦合的种种方式及差异. 简化场景 耦合的话题可大可小,但原理都是相通的.为了方便讨论,我们先将场景进行抽象和简化,只讨论两个类之间的耦合. 假设我们有个类Person,需要喝水,根据职责划分,我们需要另一个类Cup来完成喝水的动作,代码如下: //Person.h @int

如何书写高质量的jQuery代码(转)

想必大家对于jQuery这个最流行的javascript类库都不陌 生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,参考了一些资料及实际使用效率,将介绍一些书写高质量jQuery代码的 原则,不单单会告诉你如何去书写,也会告诉你为什么这样书写,希望大家会觉得有所帮助. 注意定义jQuery变量的时候添加var关键字 这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: $loading = $('#loading'); //

如何书写高质量的jQuery代码

想必大家对于jQuery这个最流行的javascript类库都不陌生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,我们将介绍一些书写高质量jQuery代码的原则,我们不单单会告诉你如何去书写,也会告诉你为什么这样书写,希望大家会觉得有所帮助. 注意定义jQuery变量的时候添加var关键字 这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: 1 $loading = $('#loading'); //这个是全局定义,不知道

编写高质量代码——html、css

[编写高质量代码]1.注释的必要性:增加代码的可读性.2.web标准:由一系列的标准组合而成,其核心理念是将网页的结构.样式.行为分离,所以他可分为:结构标准.样式标准和行为标准.3.一个符合标准的网页,标签中的标签名应该全部都是小写,属性要加上括号,样式和行为不要夹杂在标签中,而应该分别单独存放在样式文件和脚本文件中.理想状态下,网页源代码有三部分组成:.html文件..css文件..js文件.4.所谓高质量的代码,在web标准的指导下,在实现结构.样式和行为分离的基础上,还要做到三点:精简.

高质量代码之HTML、CSS篇

HTML篇 使用语义化标签<strong><fieldset><legend><ul>等等,少用<div><span> 判断网页标签语义化是否良好的方法:去掉样式,看看网页结构是否依然有序. 当页面内标签无法满足设计时,才会适当添加div和span 少用纯样式标签b font u等,改用strong em等 即可以用div又可以用p时,尽量使用p CSS篇 CSS结构 一般分为base common page三个层次. base层:提

如何书写高质量jQuery代码(使用jquery性能问题)

1.正确引用jQuery 1.尽量在body结束前才引入jQuery,而不是在head中.2.借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件.(对于已经使用了cdn的网站可以忽略,现在用户带宽都升级了,这个可以忽略了,放别人机器不一定稳定)3.如果在</body>前引入script文件的话,就不用写document.ready了,因为这时执行js代码时DOM已经加载完毕了. ? 1 2 3 4 <body>  <s

《编写高质量代码--Web前端开发修炼之道》读书笔记

前言 这两周参加公司的新项目,采用封闭式开发(项目成员在会议室里开发),晚上加班到很晚,所以没时间和精力写原创博客了,今天就分享下这篇<编写高质量代码--Web前端开发修炼之道>读书笔记吧. 正文 欲精一行,必先通十行. 在前端开发这个领域,一专多能更是非常必要的. table布局缺点: 代码量大,结构混乱: 标签语义不明确,对搜索引擎不友好. css布局:div+css,或者(x)html+css. 代码量少.结构精简.语义清新. 代码量少,浏览器端下载时间就会更短: 语义清晰就会对搜索引擎

编写高质量代码:Web前端开发修炼之道(一)

最近老大给我们买来一些技术方面的书籍,其实很少搬着一本书好好的完整的看完过,每每看电子档的,也是打游击式的看看这章,瞅瞅那章,在那5本书中挑了一本比较单薄的<编写高质量代码web前端开发修炼之道>,看完觉得不错,它从一个整体架构上来说明如何编写高质量代码,而细处也着重说明一些比较重要的技术点,给人一种从高处俯瞰web开发.很完整的感觉,在这感谢老大,谢谢他让我们不停的进步着.下面是我看书过程中的笔记. 第一章:从网站重构说起 没什么好说的,从一个糟糕的老网页实例说明需要将web的结构,样式和行