CSS中怎么让DIV居中亲自实验得出的结论

html-css016

CSS中怎么让DIV居中亲自实验得出的结论,第1张

CSS

如何使DIV层水平居中

今天用CSS碰到个很棘手的问题,DIV本身没有定义自己居中的属性,

网上很多的方法都是介绍用上级的text-align:

center然后嵌套一层DIV来解决问题.

可是事实上这样的方法科学吗?

经过网络搜索和亲自实验得出以下结论:

正确的也是对页面构造没有影响的设置如下:

对需要水平居中的DIV层添加以下属性:

复制代码

代码如下:

margin-left:

auto

margin-right:

auto

经过这么一番设置问题似乎解决了,在FF中已经居中了,可是在IE中看竟然还是没有居中!

郁闷了一下午,就是找不出问题所在,还特地比较了网上的文章竟然一模一样.

问题到底出在哪里呢?

感谢网友乐天无用帮忙找出了这个邪门问题的原因.

原来是L-Blog默认没有在HTML前加上DTD,于是IE就以HTML而不是XHTML来解释文档.

问题并不在CSS而在XHTML网页本身.

需要加上这样的代码才能使得上述设置有效果:

<!DOCTYPE

html

PUBLIC

"-//W3C//DTD

XHTML

1.0

Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

如果您希望更为严格的XHTML

1.0

Strict或者XHTML

1.1请查阅相关文档.

以上测试均基于Windows

XP

SP2版IE6和FireFox

1.0最终版.

如何使DIV居中

主要的样式定义如下:

复制代码

代码如下:

body

{TEXT-ALIGN:

center}

#center

{

MARGIN-RIGHT:

auto

MARGIN-LEFT:

auto

}

说明:

先在父级元素定义TEXT-ALIGN:

center这个的意思就是在父级元素内的内容居中;对于IE这样设定就已经可以了。但在mozilla中不能居中。解决办法就是在子元素定义时候设定

时再加上“MARGIN-RIGHT:

autoMARGIN-LEFT:

auto

需要说明的是,如果你想用这个方法使整个页面要居中,建议不要套在一个DIV里,你可以依次拆出多个div,只

要在每个拆出的div里定义MARGIN-RIGHT:

autoMARGIN-LEFT:

auto

就可以了。

如何使图片在DIV

中垂直居中,用背景的方法。举例:

body{BACKGROUND:

url(http://www.w3cn.org/style/001/logo_w3cn_194x79.gif)

#FFF

no-repeat

center}

关键就是最后的center,这个参数定义图片的位置。还可以写成“top

left”(左上角)或者"bottom

right"等,也可以直接写数值"50

30"

如何使文本在DIV中垂直居中

如果是文字,便不能用背景方法,可以用增高行距的办法变通实现垂直居中,完整代码如下:

复制代码

代码如下:

<html>

<head>

<style>

body{TEXT-ALIGN:

center}

#center{

MARGIN-RIGHT:

auto

MARGIN-LEFT:

auto

height:200px

background:#F00

width:400px

vertical-align:middle

line-height:200px

}

</style>

</head>

<body

>

<div

id="center"><p>test

content</p></div>

</body>

</html>

说明:

vertical-align:middle表示行内垂直居中,我们将行距增加到和整个DIV一样高line-height:200px然后插入文字,就垂直居中了。

CSS+DIV控制页面中元素垂直居中代码

全局和区域垂直居中

复制代码

代码如下:

<style

type="text/css"

media=screen>

body

{

text-align:

center

}

#a

{

width:

200px

height:

400px

background:

#000

}

#b

{

margin-top:

expression((a.clientHeight-50)/2)

width:

50px

height:

50px

background:

#FFF

}

#c

{

position:

absolute

left:

expression((body.clientWidth-50)/2)

top:

expression((body.clientHeight-50)/2)

width:

50px

height:

50px

background:

#F00

}

</style>

<div

id="a">

<div

id="b"></div>

</div>

<div

id="c"></div>

另一方法:

复制代码

代码如下:

<div

style="background:blueposition:absoluteleft:expression((body.clientWidth-50)/2)top:expression((body.clientHeight-50)/2)width:50height:50"></div>

基本

常识与实践

链接方式

基本

最基本的方式就是直接在html文件中指定元素样式,这种方式不推荐,因为将表现层和结构层混起来了

"style="background-image:url({{user.avatar}})"

内部链接

要为html直接增加css样式,需要在元素中增加开始和结束style标记,css规则放在里面

<style>

p {

color: gray

}

</style>

css文件外置

另一种方式将css文件外置,如style.css,作为样式表(stylesheets),然后从html众创建一个到这个文件的外部链接,用元素,用外部样式表的好处是要修改整个网站的样式,只要进入这个样式表,对css进行几处修改即可。如:

<link type="text/css" rel="stylesheet" href="lounge.css" >

多样式表

使用多个样式表,顺序很重要,一个样式表会覆盖在它上面链接的样式表中的样式,有时会有一个样式表作为页面的基础样式,要修改样式,链接这个样式表,然后在下面提供自己的样式表,指定要修改的样式,如下所示:

<link rel="stylesheet" href="corperate.css">//总公司样式

<link rel="stylesheet" href="beverage-division.css">//部门对总公司的样式做了一些补充,甚至可以覆盖公司的样式

<link rel="stylesheet" href="lounge-seattle.css">//西雅图休闲室对样式表做了自己的调整

简写

css属性太多,能不能不费吹灰之力就指定这些属性呢?可以把同一属性的值结合起来写成一句,即简写。

简写格式

padding

padding: 0px 40px 30px 20px,顺序是上右下左,顺时针有木有,如果都相同可以用padding: 20px

padding-top: 0px

padding-right: 40px

padding-bottom:30px

padding-left: 20px

margin

上面的padding格式同样对margin也适用,还有另一种方法,如果上下一样,左右一致,可以这样写:margin: 0px 20px,前面指定上下,后面指定左右。

border

边框属性简写 border: thin solid #007e73,可以用你喜欢的任何顺序。

background

背景简写 background: white url(images/cocktail.gif) repeat-x,同样顺序随便

字体

字体简写的格式稍微复杂一些:

font : font-style font-variant font-weight font-size/line-height font-family

选择

子孙选择器

父元素和子孙元素名之间有一个空格,子孙选择器会选择所有子孙,包括这个元素中嵌套的所有,不管嵌套多深,例如

color: black

}

直接孩子

如果要选择直接的孩子,用>

color: black

}

复杂选择

更复杂的选择,方法还是一样

color: blue

}

规则添加

当我们用选择器选择元素使用一个规则时,会对所有该元素应用这个样式,所以如何单独地选择这些元素呢?这里就需要类class,class可以定义一类元素,对属于该类的所有元素应用样式.要将一个元素加入一个类,只需要增加属性”class”,并提供类名,如”greentea”:

<p class="greentea">

...

</p>

类元素选择器

先选择这个类中的元素,再用”.”指定一个类,最后是类名,如:

p.greentea {

color: green

}

添加类元素

如果想对所有<blockquote>也做同样的处理,可以:

blockquote.greentea,p.greentea {

color: green

}

<blockquote class = "greentea">

类选择器

如果想把<h1>,<h2>,<h3>,<p>和<blockquote>都增加到greentea呢?要对类中的所有元素都用同一样式可以用:

.greentea{

color: green

}

/ 省略所有元素名,只有一个点,则会应用到所有成员 /

多类元素

元素可以有多个类,例如:

<p class="greentea raspberry blueberry"

特定元素选择器

如果多个选择器都选择了一个元素呢?例如上面的3个类都与p元素匹配,并且都定义了color属性,那么那个会胜出?

id

id的作用

id属性用来唯一地命名元素,通常你想对多个元素重用某些样式,才能真正发挥类的作用。但是如果只有一个元素需要样式,或者页面上只有一个元素,那就应该使用id,每个元素只能有一个id,页面中只能有一个元素拥有特定id,一个元素有一个id,同时可以属于一个或多个类,id中不允许出现空格或其他特殊字符,如

<p id="footer">...</p>

选择元素

用id选择一个元素,需要在id前面使用一个#字符(类是[.]),id选择器只与页面中的一个元素匹配

color: red

}//选择id为footer的任意元素

p#footer{

color: red

}//选择id为footer的<p>元素

实践建议

继承

样式继承

层叠

媒体查询

link媒体查询

你可能想针对将要显示页面的设备调整页面的样式,可以用media属性,在link元素中增加这个属性.如

<link rel="stylesheet" href="lounge-mobile.css" mdeia="screen and (max-device-width: 480px)">

<link rel="stylesheet" href="lounge-print.css" media="print">

css媒体查询

可以直接在css中增加媒体查询,使用@media规则,把对所有媒体类型都通用的规则放在@media规则下面,例如

@media screen and (min-device-width: 481px){//当设备屏幕宽度大于480px时使用

margin-right: 250px

}

}

@media screen and (max-device-width: 480px){//当设备屏幕小于等于480px时使用

margin-right: 30px

}

}

@media print { // 如果要打印页面,使用该规则

body {

font-family: Times, "Times New Roman", serif

}

}

实践建议

属性

盒模型

盒模型是css看待元素的一种方式,css将每个元素看作由一个盒子表示,每个盒子由一个内容区以及可选的内边距,边框和外边距组成。由内而外分别是:

border 边框

color 颜色

文本元素的字体颜色

body{

background-color: rgb(80%, 40% , 0%)//橙色

}

还可以指定0-255之间的一个数值,例如:

body{

background-color: rgb(204, 102, 0)//和上面颜色一致,255*80% = 204...

}

font-family 字体

大多数计算机上通常只安装了部分字体,所以选择字体时要当心,通常指定的font-family包含一个候选字体列表,他们都来自同一个字体系列,候选字体用逗号分隔,大小写字母必须一致,最后总是放一个通用的字体系列名,如果一个字体名中包含多个单词,比如Courier New,如何指定?用引号,”Courier New”,如:

body{

font-family: Verdana, Geneva, Arial, sans-serif<一一首选字体呈降序

}

字体系列

每个font-family包含一组有共同特征的字体。共有5个字体系列:

body { font-size : small}

h1 { font-size : 150%}

h2 { font-size : 120%}

注意老版IE不支持用像素指定的文本缩放

浏览器默认字体大小

其他属性

left 指定一个元素的左边所在位置

top 控制一个元素顶部的位置

background-image 在元素后面放置一个图像,如

background-image: url(images/background.gif)

//用url括起来,注意没有引号

background-repeat 背景图像是否重复

line-height: 1//代表elixirs中的所有元素的行间距为其自己字体大小的1倍

}

width: 200px

float: right

}

background-color: #675c47

color:#efe5d0

text-align: center

padding: 15px

margin: 10px

font-size:90%

clear:right

}

width: 800px

padding-top: 5px

padding-bottom: 5px

background-color: #675c47

}

那么页面的宽度将被限制为800px,无论浏览器宽度如何变化都不会移动,但这会导致浏览器很宽时,右边有很多空白空间

凝胶布局 Jello

width: 800px

padding-top: 5px

padding-bottom: 5px

background-color: #675c47

margin-left: auto

margin-right: auto

}

绝对定位

position: absolute

top: 100px

right: 200px

width: 280px

}

display: table

border-spacing: 10px//于是不再需要div中的外边距

}

display: table-row

}

display: table-cell

background: #efe5d0 url(images/background.gif) top left

font-size:105%

padding: 15px

/ margin: 0px 10px 10px 10px/

vertical-align: top//确保表格两个单元格中的所有内容相对于单元格上边对齐,默认为中间对齐,可以设置为top,middle,bottom

}

display: table-cell

background: #efe5d0 url(images/background.gif) bottom right

font-size:105%

padding: 15px

/ margin: 0px 10px 10px 10px/

vertical-align: top

}

DIV+CSS是网站标准(或称“WEB标准”)中常用术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用DIV+CSS的方式实现各种定位。SEO是指搜索引擎优化,主要就是通过对网站的结构、标签、排版,关键字等各方面的优化,使搜索引擎更容易抓取网站的内容,并且让网站的各个网页在等搜索引擎中获得较高的评分,从而获得较好的排名。DIV+CSS网页布局对SEO有很重要的影响。具体来看到底有什么好处呢?

DIV+CSS的网页布局对SEO的好处一、不存在表格的嵌套问题

很多“网站如何推广”的文章中称,搜索引擎一般不抓取三层以上的表格嵌套,这一点一直没有得到搜索引擎相关的官方证实。我的几项实验结果没有完全出来,但根据目前掌握的情况来看,Spider爬行Table布局的页面,遇到多层表格嵌套时,会跳过嵌套的内容或直接放弃整个页面。

使用Table布局,为了达到一定的视觉效果,不得不套用多个表格。如果嵌套的表格中是核心内容,蜘蛛(Spider)爬行时跳过了这一段没有抓取到页面的核心,这个页面就成了相似页面。网站中过多的相似页面会影响排名及域名信任度。

DIV+CSS的网页布局对SEO的好处二、精简的代码

使用DIVCSS布局,页面代码精简,这一点相信对XHTML有所了解的都知道。观看更多的HTML教程内容。

代码精简所带来的直接好处有两点:一是提高蜘蛛(Spider)爬行效率,能在最短的时间内爬完整个页面,这样对收录质量有一定好处二是由于能高效的爬行,就会受到蜘蛛(Spider)欢迎,这样对收录数量有很大好处。

而DIV+CSS布局基本上不会存在这样的问题,从技术角度来说,XHTML在控制样式时也不需要过多的嵌套。

这虽然没有得到确认,但还是建议使用Table布局的朋友们,在设计时尽可能的不要使用多层表格嵌套,SEOer(seo工作者们)们在文章中说明了这一点,相信他们也不是没有依据。

DIV+CSS的网页布局对SEO的好处三、对搜索引擎的排名

基于XTHML标准的DIV+CSS布局,一般在设计完成后会尽可能的完善到能通过W3C验证。截止目前没有搜索引擎表示排名规则会倾向于符合W3C标准的网站或页面,但事实证明使用XTHML架构的网站排名状况一般都不错。

DIV+CSS的网页布局对SEO的好处四、提高网页的访问速度

DIV+CSS布局较Table布局减少了页面代码,加载速度得到很大的提高,这在蜘蛛(Spider)爬行时是非常有利的。过多的页面代码可能造成爬行超时,蜘蛛(Spider)就会认为这个页面无法访问,影响收录及权重。

真正的SEOer(seo工作者们)不只是为了追求收录、排名,快速的响应速度是提高用户体验度的基础,这对整个搜索引擎优化及营销都是非常有利的。

换一个角度抛开DIV+CSS对SEO的有利影响.单独来讲这种div+css布局也是很有益的,可以说是实下是最流行的网页布局方式.可是加快我们网站的速度,便于管理与修改.当然div+css布局也有不完善的方面,比如说,他的css样式表与各种浏览器之间的不兼容问题.当然如果你是div+css高手的话相信这个不难吧!