当前位置: 代码迷 >> HTML/CSS >> 一些惯用的css注意事项
  详细解决方案

一些惯用的css注意事项

热度:556   发布时间:2012-10-30 16:13:36.0
一些常用的css注意事项

以下内容节选自W3school――CSS教程,主要总结了一些常用的css、规则、注意事项等

1、缩进文本
?????? 把 Web 页面上的段落的第一行缩进,这是一种最常用的文本格式化效果。CSS 提供了 text-indent 属性,该属性可以方便地实现文本缩进。通过使用 text-indent 属性,所有元素的第一行都可以缩进一个给定的长度,甚至该长度可以是负值,这会产生一种“悬挂缩进”的效果。
这个属性最常见的用途是将段落的首行缩进,下面的规则会使所有段落的首行缩进 5 em:

p {text-indent: 5em;}
?????? 注意:一般来说,可以为所有块级元素应用 text-indent,但无法将该属性应用于行内元素,图像之类的替换元素上也无法应用 text-indent 属性。不过,如果一个块级元素(比如段落)的首行中有一个图像,它会随该行的其余文本移动。

????? 提示:如果想把一个行内元素的第一行“缩进”,可以用左内边距或外边距创造这种效果。

?

text-indent值????? 描述
length????????????????? 定义固定的缩进。默认值:0。
%??????????????????????? ?定义基于父元素宽度的百分比的缩进。
inherit????????????????? 规定应该从父元素继承 text-indent 属性的值。(任何的版本的 Internet Explorer (包括 IE8)都不支持属性值 "inherit")

?

使用百分比值
text-indent 可以使用所有长度单位,包括百分比值。
百分数要相对于缩进元素父元素的宽度。换句话说,如果将缩进值设置为 20%,所影响元素的第一行会缩进其父元素宽度的 20%。
在下例中,缩进值是父元素的 20%,即 100 个像素:
div {width: 500px;}
p {text-indent: 20%;}

<div>
<p>this is a paragragh</p>
</div>

?

继承
text-indent 属性可以继承,请考虑如下标记:
div#outer {width: 500px;}
div#inner {text-indent: 10%;}
p {width: 200px;}

<div id="outer">
<div id="inner">some text. some text. some text.
<p>this is a paragragh.</p>
</div>
</div>
以上标记中的段落也会缩进 50 像素,这是因为这个段落继承了 id 为 inner 的 div 元素的缩进值。

?

2、字间隔
word-spacing 属性可以改变字(单词)之间的标准间隔。其默认值 normal 与设置值为 0 是一样的。

word-spacing 属性接受一个正长度值或负长度值。如果提供一个正长度值,那么字之间的间隔就会增加。为 word-spacing 设置一个负值,会把它拉近:

?

3、字母间隔
letter-spacing 属性与 word-spacing 的区别在于,字母间隔修改的是字符或字母之间的间隔。

?

4、字符转换
text-transform 属性处理文本的大小写。这个属性有 4 个值:
none
uppercase
lowercase
capitalize
默认值 none 对文本不做任何改动,将使用源文档中的原有大小写。顾名思义,uppercase 和 lowercase 将文本转换为全大写和全小写字符。最后,capitalize 只对每个单词的首字母大写。

?

5、文本装饰
接下来,我们讨论 text-decoration 属性,这是一个很有意思的属性,它提供了很多非常有趣的行为。
text-decoration 有 5 个值:
none
underline
overline
line-through
blink
不出所料,underline 会对元素加下划线,就像 HTML 中的 U 元素一样。overline 的作用恰好相反,会在文本的顶端画一个上划线。值 line-through 则在文本中间画一个贯穿线,等价于 HTML 中的 S 和 strike 元素。blink 会让文本闪烁,类似于 Netscape 支持的颇招非议的 blink 标记。

?还可以在一个规则中结合多种装饰。如果希望所有超链接既有下划线,又有上划线,则规则如下:
a:link a:visited {text-decoration: underline overline;}
?

?

6、处理空白符
white-space 属性会影响到用户代理对源文档中的空格、换行和 tab 字符的处理。
通过使用该属性,可以影响浏览器处理字之间和文本行之间的空白符的方式。从某种程度上讲,默认的 XHTML 处理已经完成了空白符处理:它会把所有空白符合并为一个空格。所以给定以下标记,它在 Web 浏览器中显示时,各个字之间只会显示一个空格,同时忽略元素中的换行:

该属性可能的值有:
值????????????????????描述
normal???????????默认。空白会被浏览器忽略。
pre?????????????????空白会被浏览器保留。其行为方式类似 HTML 中的 <pre> 标签。
(经测试,IE 7 以及更早版本的浏览器不支持该值,因此请使用非 IE 的浏览器来查看上面的实例。)

nowrap?????????文本不会换行,文本会在在同一行上继续,直到遇到 <br> 标签为止。
pre-wrap????? 保留空白符序列,但是正常地进行换行。
pre-line???????? 合并空白符序列,但是保留换行符。
inherit?????????? 规定应该从父元素继承 white-space 属性的值。

?

?7、文本方向
如果您阅读的是英文书籍,就会从左到右、从上到下地阅读,这就是英文的流方向。不过,并不是所有语言都如此。我们知道古汉语就是从右到左来阅读的,当然还包括希伯来语和阿拉伯语等等。CSS2 引入了一个属性来描述其方向性。
direction 属性影响块级元素中文本的书写方向、表中列布局的方向、内容水平填充其元素框的方向、以及两端对齐元素中最后一行的为止。
注释:对于行内元素,只有当 unicode-bidi 属性设置为 embed 或 bidi-override 时才会应用 direction 属性。
direction 属性有两个值:ltr 和 rtl。大多数情况下,默认值是 ltr,显示从左到右的文本。如果显示从右到左的文本,应使用值 rtl。

8、设置行高

line-height 属性设置行间的距离(行高)。
注释:不允许使用负值。
说明
该属性会影响行框的布局。在应用到一个块级元素时,它定义了该元素中基线之间的最小距离而不是最大距离。
line-height 与 font-size 的计算值之差(在 CSS 中成为“行间距”)分为两半,分别加到一个文本行内容的顶部和底部。可以包含这些内容的最小框就是行框。

该属性可能的值
值???????????????????????? 描述
normal??????????????? ?默认。设置合理的行间距。
number?????????????? 设置数字,此数字会与当前的字体尺寸相乘来设置行间距。
length???????????????? 设置固定的行间距。
%??????????????????????? 基于当前字体尺寸的百分比行间距。
inherit???????????????? 规定应该从父元素继承 line-height 属性的值。

?9、字体风格
font-style 属性最常用于规定斜体文本。
该属性有三个值:
normal - 文本正常显示
italic - 文本斜体显示
oblique - 文本倾斜显示
实例
p.normal {font-style:normal;}
p.italic {font-style:italic;}
p.oblique {font-style:oblique;}

10、字体变形
font-variant 属性可以设定小型大写字母。(只针对英文字符)
小型大写字母不是一般的大写字母,也不是小写字母,这种字母采用不同大小的大写字母。
实例
p {font-variant:small-caps;}

11、字体加粗
font-weight 属性设置文本的粗细。
使用 bold 关键字可以将文本设置为粗体。
关键字 100 ~ 900 为字体指定了 9 级加粗度。如果一个字体内置了这些加粗级别,那么这些数字就直接映射到预定义的级别,100 对应最细的字体变形,900 对应最粗的字体变形。数字 400 等价于 normal,而 700 等价于 bold。
如果将元素的加粗设置为 bolder,浏览器会设置比所继承值更粗的一个字体加粗。

该属性可能的值
值???????????????? 描述
normal??????? 默认值。定义标准的字符。
bold???????????? 定义粗体字符。
bolder???????? 定义更粗的字符。
lighter???????? 定义更细的字符。
100
200
300
400
500
600
700
800
900
?????????????????? 定义由粗到细的字符。400 等同于 normal,而 700 等同于 bold。
inherit??????? 规定应该从父元素继承字体的粗细。

12、字体大小
font-size 属性设置文本的大小。
有能力管理文本的大小在 web 设计领域很重要。但是,您不应当通过调整文本大小使段落看上去像标题,或者使段落看上去像标题。
请始终使用正确的 HTML 标题,比如使用 <h1> - <h6> 来标记标题,使用 <p> 来标记段落。
font-size 值可以是绝对或相对值。
绝对值:
将文本设置为指定的大小
不允许用户在所有浏览器中改变文本大小(不利于可用性)
绝对大小在确定了输出的物理尺寸时很有用
相对大小:
相对于周围的元素来设置大小
允许用户在浏览器改变文本大小
注意:如果您没有规定字体大小,普通文本(比如段落)的默认大小是 16 像素 (16px=1em)。
使用像素来设置字体大小
通过像素设置文本大小,可以对文本大小进行完全控制:
实例
h1 {font-size:60px;}
h2 {font-size:40px;}
p {font-size:14px;}
亲自试一试
在 Firefox, Chrome, and Safari 中,可以重新调整以上例子的文本大小,但是在 Internet Explorer 中不行。
虽然可以通过浏览器的缩放工具调整文本大小,但是这实际上是对整个页面的调整,而不仅限于文本。
使用 em 来设置字体大小
如果要避免在 Internet Explorer 中无法调整文本的问题,许多开发者使用 em 单位代替 pixels。
W3C 推荐使用 em 尺寸单位。
1em 等于当前的字体尺寸。如果一个元素的 font-size 为 16 像素,那么对于该元素,1em 就等于 16 像素。在设置字体大小时,em 的值会相对于父元素的字体大小改变。
浏览器中默认的文本大小是 16 像素。因此 1em 的默认尺寸是 16 像素。
可以使用下面这个公式将像素转换为 em:pixels/16=em
(注:16 等于父元素的默认字体大小,假设父元素的 font-size 为 20px,那么公式需改为:pixels/20=em)
实例
h1 {font-size:3.75em;} /* 60px/16=3.75em */
h2 {font-size:2.5em;}? /* 40px/16=2.5em */
p {font-size:0.875em;} /* 14px/16=0.875em */
亲自试一试
在上面的例子中,以 em 为单位的文本大小与前一个例子中以像素计的文本。不过,如果使用 em 单位,则可以在所有浏览器中调整文本大小。
不幸的是,在 IE 中仍存在问题。在重设文本大小时,会比正常的尺寸更大或更小。
结合使用百分百和 EM
在所有浏览器中均有效的方案是为 body 元素(父元素)以百分比设置默认的 font-size 值:
实例
body {font-size:100%;}
h1 {font-size:3.75em;}
h2 {font-size:2.5em;}
p {font-size:0.875em;}

13、CSS Table 属性
属性???????????????????????? 描述
border-collapse??? 设置是否把表格边框合并为单一的边框。
border-spacing???? 设置分隔单元格边框的距离。
caption-side?????????? 设置表格标题的位置。
empty-cells??????????? 设置是否显示表格中的空单元格。
table-layout?????????? 设置显示单元、行和列的算法。

14、CSS 轮廓
outline (轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。
注释:轮廓线不会占据空间,也不一定是矩形。
outline 简写属性在一个声明中设置所有的轮廓属性。
可以按顺序设置如下属性:
outline-color
outline-style
outline-width
如果不设置其中的某个值,也不会出问题,比如 outline:solid #ff0000; 也是允许的。


outline-style可能的值有:
值?描述
none?默认。定义无轮廓。
dotted?定义点状的轮廓。
dashed?定义虚线轮廓。
solid?定义实线轮廓。
double?定义双线轮廓。双线的宽度等同于 outline-width 的值。
groove?定义 3D 凹槽轮廓。此效果取决于 outline-color 值。
ridge?定义 3D 凸槽轮廓。此效果取决于 outline-color 值。
inset?定义 3D 凹边轮廓。此效果取决于 outline-color 值。
outset?定义 3D 凸边轮廓。此效果取决于 outline-color 值。
inherit?规定应该从父元素继承轮廓样式的设置。

15、CSS 框模型 (Box Model)
提示:背景应用于由内容和内边距组成的区域。
提示:内边距、边框和外边距可以应用于一个元素的所有边,也可以应用于单独的边。
提示:外边距可以是负值,而且在很多情况下都要使用负值的外边距。

padding 属性接受长度值或百分比值,但不允许使用负值。

?

内边距的百分比数值

前面提到过,可以为元素的内边距设置百分数值。百分数值是相对于其父元素的 width 计算的,这一点与外边距一样。所以,如果父元素的 width 改变,它们也会改变。

浏览器兼容性
一旦为页面设置了恰当的 DTD,大多数浏览器都会按照上面的图示来呈现内容。然而 IE 5 和 6 的呈现却是不正确的。根据 W3C 的规范,元素内容占据的空间是由 width 属性设置的,而内容周围的 padding 和 border 值是另外计算的。不幸的是,IE5.X 和 6 在怪异模式中使用自己的非标准模型。这些浏览器的 width 属性不是内容的宽度,而是内容、内边距和边框的宽度的总和。
虽然有方法解决这个问题。但是目前最好的解决方案是回避这个问题。也就是,不要给元素添加具有指定宽度的内边距,而是尝试将内边距或外边距添加到元素的父元素和子元素。

?

16、?透明边框

我们刚才讲过,如果边框没有样式,就没有宽度。不过有些情况下您可能希望创建一个不可见的边框。

CSS2 引入了边框颜色值 transparent。这个值用于创建有宽度的不可见边框。请看下面的例子:

<a href="#">AAA</a>

<a href="#">BBB</a>

<a href="#">CCC</a>

我们为上面的链接定义了如下样式:

a:link, a:visited {

? border-style: solid;

? border-width: 5px;

? border-color: transparent;

? }

a:hover {border-color: gray;}

?

17、CSS 外边距合并

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。

合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并。

当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。

假设有一个空元素,它有外边距,但是没有边框或填充。在这种情况下,上外边距与下外边距就碰到了一起,它们会发生合并

注释:只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。

CSS 定位机制

CSS 有三种基本的定位机制:普通流、浮动和绝对定位。

除非专门指定,否则所有框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。

块级框从上到下一个接一个地排列,框之间的垂直距离是由框的垂直外边距计算出来。

行内框在一行中水平布置。可以使用水平内边距、边框和外边距调整它们的间距。但是,垂直内边距、边框和外边距不影响行内框的高度。由一行形成的水平框称为行框(Line Box),行框的高度总是足以容纳它包含的所有行内框。不过,设置行高可以增加这个框的高度。

在下面的章节,我们会为您详细讲解相对定位、绝对定位和浮动。

?

一切皆为框

div、h1 或 p 元素常常被称为块级元素。这意味着这些元素显示为一块内容,即“块框”。与之相反,span 和 strong 等元素称为“行内元素”,这是因为它们的内容显示在行中,即“行内框”。

您可以使用 display 属性改变生成的框的类型。这意味着,通过将 display 属性设置为 block,可以让行内元素(比如 <a> 元素)表现得像块级元素一样。还可以通过把 display 设置为 none,让生成的元素根本没有框。这样的话,该框及其所有内容就不再显示,不占用文档中的空间。

但是在一种情况下,即使没有进行显式定义,也会创建块级元素。这种情况发生在把一些文本添加到一个块级元素(比如 div)的开头。即使没有把这些文本定义为段落,它也会被当作段落对待:

<div>

some text

<p>Some more text.</p>

</div>

在这种情况下,这个框称为无名块框,因为它不与专门定义的元素相关联。

块级元素的文本行也会发生类似的情况。假设有一个包含三行文本的段落。每行文本形成一个无名框。无法直接对无名块或行框应用样式,因为没有可以应用样式的地方(注意,行框和行内框是两个概念)。但是,这有助于理解在屏幕上看到的所有东西都形成某种框。

?

18、CSS position 属性

通过使用 position 属性,我们可以选择 4 种不同类型的定位,这会影响元素框生成的方式。

position 属性值的含义:

static

元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。

relative

元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。

absolute

元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。

fixed

元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。

提示:相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。

?

19、vertical-align 属性

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

该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。允许指定负长度值和百分比值。这会使元素降低而不是升高。在表单元格中,这个属性会设置单元格框中的单元格内容的对齐方式。

该属性可能的值:

描述

baseline 默认。元素放置在父元素的基线上。

sub 垂直对齐文本的下标。

super 垂直对齐文本的上标

top 把元素的顶端与行中最高元素的顶端对齐

text-top 把元素的顶端与父元素字体的顶端对齐

middle 把此元素放置在父元素的中部。

bottom 把元素的顶端与行中最低的元素的顶端对齐。

text-bottom 把元素的底端与父元素字体的底端对齐。

length ?

% 使用 "line-height" 属性的百分比值来排列此元素。允许使用负值。

inherit 规定应该从父元素继承 vertical-align 属性的值。

?

20、CSS clip 属性

clip 属性剪裁绝对定位元素。?

这个属性用于定义一个剪裁矩形。对于一个绝对定义元素,在这个矩形内的内容才可见。出了这个剪裁区域的内容会根据 overflow 的值来处理。剪裁区域可能比元素的内容区大,也可能比内容区小。

可能的值

描述

shape 设置元素的形状。唯一合法的形状值是:rect (top, right, bottom, left)

auto 默认值。不应用任何剪裁。

inherit 规定应该从父元素继承 clip 属性的值。

?

注意:只有设置position为absolute或fixed时,该属性才有效

?

21、CSS 伪类 (Pseudo-classes)

锚伪类
在支持 CSS 的浏览器中,链接的不同状态都可以不同的方式显示,这些状态包括:活动状态,已被访问状态,未被访问状态,和鼠标悬停状态。
a:link {color: #FF0000}??/* 未访问的链接 */
a:visited {color: #00FF00}?/* 已访问的链接 */
a:hover {color: #FF00FF}?/* 鼠标移动到链接上 */
a:active {color: #0000FF}?/* 选定的链接 */

提示:在 CSS 定义中,a:hover 必须被置于 a:link 和 a:visited 之后,才是有效的。
提示:在 CSS 定义中,a:active 必须被置于 a:hover 之后,才是有效的。
提示:伪类名称对大小写不敏感。

CSS2 - :first-child 伪类
您可以使用 :first-child 伪类来选择元素的第一个子元素。如:
p:first-child {font-weight: bold;}
li:first-child {text-transform:uppercase;}

上面第一个规则将作为某元素第一个子元素的所有 p 元素设置为粗体。第二个规则将作为某个元素(在 HTML 中,这肯定是 ol 或 ul 元素)第一个子元素的所有 li 元素变成大写

:focus 伪类在元素获得焦点时向元素添加特殊的样式。
注释:IE7之前版本(包括) 浏览器不支持此属性。

:lang?向带有指定 lang 属性的元素添加样式。(语言伪类)

22、CSS 伪元素 (Pseudo-elements)
:first-line 伪元素用于向文本的首行设置特殊样式。
在下面的例子中,浏览器会根据 "first-line" 伪元素中的样式对 p 元素的第一行文本进行格式化:
p:first-line
? {
? color:#ff0000;
? font-variant:small-caps;
? }

注释:"first-line" 伪元素只能用于块级元素。
注释:下面的属性可应用于 "first-line" 伪元素:
font
color
background
word-spacing
letter-spacing
text-decoration
vertical-align
text-transform
line-height
clear

:first-letter 伪元素用于向文本的首字母(或字,即汉字也支持)设置特殊样式:
p:first-letter
? {
? color:#ff0000;
? font-size:xx-large;
? }
注释:"first-letter" 伪元素只能用于块级元素。
注释:下面的属性可应用于 "first-letter" 伪元素:
font
color
background
margin
padding
border
text-decoration
vertical-align (仅当 float 为 none 时)
text-transform
line-height
float
clear

CSS2 - :before 伪元素可以在元素的内容前面插入新内容。
下面的例子在每个 <h1> 元素前面插入一幅图片:
h1:before
? {
? content:url(logo.gif);
? }

CSS2 - :after 伪元素可以在元素的内容之后插入新内容。
下面的例子在每个 <h1> 元素后面插入一幅图片:
h1:after
? {
? content:url(logo.gif);
? }

23、CSS 分类 (Classification)

如何把元素显示为内联元素 p {display: inline}
如何把元素显示为块级元素 span {display: block}
改变光标
<html>

<body>
<p>请把鼠标移动到单词上,可以看到鼠标指针发生变化:</p>
<span style="cursor:auto">
Auto</span><br />
<span style="cursor:crosshair">
Crosshair</span><br />
<span style="cursor:default">
Default</span><br />
<span style="cursor:pointer">
Pointer</span><br />
<span style="cursor:move">
Move</span><br />
<span style="cursor:e-resize">
e-resize</span><br />
<span style="cursor:ne-resize">
ne-resize</span><br />
<span style="cursor:nw-resize">
nw-resize</span><br />
<span style="cursor:n-resize">
n-resize</span><br />
<span style="cursor:se-resize">
se-resize</span><br />
<span style="cursor:sw-resize">
sw-resize</span><br />
<span style="cursor:s-resize">
s-resize</span><br />
<span style="cursor:w-resize">
w-resize</span><br />
<span style="cursor:text">
text</span><br />
<span style="cursor:wait">
wait</span><br />
<span style="cursor:help">
help</span>
</body>

</html>

24、内容生成(Generated Content)

content?与 :before 以及 :after 伪元素配合使用,来插入生成内容。
counter-increment?递增或递减一个或多个计数器。
counter-reset?创建或重置一个或多个计数器。
quotes?设置嵌套引用的引号类型。

以下是content的例子,其他的也好用,需要的时候可以参考w3school
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<style type="text/css">
a:after
{content: " (" attr(href) ")"
}
</style>
</head>

<body>
<p><a href="
http://www.w3school.com.cn">W3School</a> contains free tutorials and references.</p>
<p><b>注释:</b>如果已规定 !DOCTYPE,那么 Internet Explorer 8 (以及更高版本)支持 content 属性。</p>
</body>
</html>

25、CSS 单位

尺寸
单位?描述
%?百分比
in?英寸
cm?厘米
mm?毫米
em?1em? 等于当前的字体尺寸。
?2em 等于当前字体尺寸的两倍。
?例如,如果某元素以 12pt 显示,那么 2em 是24pt。
?在 CSS 中,em 是非常有用的单位,因为它可以自动适应用户所使用的字体。
ex?一个 ex 是一个字体的 x-height。 (x-height 通常是字体尺寸的一半。)
pt?磅 (1 pt 等于 1/72 英寸)
pc?12 点活字 (1 pc 等于 12 点)
px?像素 (计算机屏幕上的一个点)
颜色
单位?描述
(颜色名)?颜色名称 (比如 red)
rgb(x,x,x)?RGB 值 (比如 rgb(255,0,0))
rgb(x%, x%, x%)?RGB 百分比值 (比如 rgb(100%,0%,0%))
#rrggbb?十六进制数 (比如 #ff0000)

  相关解决方案