读书总结——CSS权威指南

  几个月前读了这本书——《CSS权威指南》,之前用css都是在w3school上看的,或者按F12看别人的代码,这是我完整的读的第一本关于css的书,感觉还是收获挺大的,最近要总结一下自己的知识,所以又重新看了一遍,又本着温故知新、边看边写的想法写了这篇文章,希望能对自己或别人有些帮助。

  第一章 HTML 标记与文档结构

  主要介绍了HTML及其标记

  1.标签分为闭合标签与自闭合标签

  闭合标签格式:<标签名>文本内容</标签名>  

  e.g. 

<h1>Words by Dogsworth</h1>

 

  自闭合标签格式:<标签名 属性_1="属性值" 属性_n="属性值" />

  e.g. 

<img src="images/cisco.jpg" alt="My dog Cisco">

  闭合标签与自闭合标签的区别在于,闭合标签包含的是会显示的实际内容,而自闭合标签只是给浏览器提供一个对要显示内容的引用。浏览器会在HTML 页面加载的时候,额外向服务器发送请求,以取得自闭合标签引用的内容。

  2.标题与段落

  一般来说,我们每个网页都会有标题(<title>),以及用上许多的段落标签(<h1>,<h2>...),特别是<title>,搜索引擎对它很敏感,要言简意赅,不要什么废话,其次是<h1>,搜索引擎也会将其视为仅次于<title>标签的另一个搜索关键词的来源。

  3.HTML模板

  按照HTML5语法编写的最简单的HTML页面的模板可以写成这样:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>An HTML Template</title>
</head>
<body>
<!-- 这里是网页内容 -->
</body>
</html>

  4.块级元素和行内元素 

  文档流:HTML元素会按照它们各自在标记中出现的先后顺序,依次从页面上方“流向”下方。

  块级元素会相互堆叠在一起沿页面向下排列,每个元素分别占一行。而行内元素则会相互并列,只有在空间不足以并列的情况下才会折到下一行显示。

  第二章 CSS工作原理

  1.css规则

  选择符 { 属性: 值; }

  e.g.

p { color: red; }

  添加css的三种方法:

  a.行内样式:写在HTML标签的style属性里

  e.g.

<p style="color:red;">
    By adding inline CSS styling to this paragraph, you override the default styles.
</p>

  b.嵌入样式:写在HTML文档的head元素中的的<style>标签里面

  e.g.

<head>
<!-- 其他head 元素(如meta、title)放在这里 -->
<style type="text/css">
h1 {
    font-size: 16px;
}
p {
    color: blue;
}
</style>
</head>

  c.链接样式:把样式集中写在一个单独的文件里

  这个文件就叫样式表。样式表其实就是一个扩展名为.css 的文本文件。可以在任意多个HTML 页面中链接同一个样式表文件,每个页面中只需加入类似下面的这一行代码即可

<link href="styles.css" rel="stylesheet" />

  2.关于选择符

  a.上下文选择符:标签1 标签2 { 声明 }

  e.g.

article p {
    font-weight: bold;
}

  上面的例子表示的是只有是article后代的p元素才会应用后面的样式。

  b.子选择符:标签1 > 标签2 { 声明 }

  e.g.

section > h2 {
    font-style: italic;
}

  上面的例子表示的是只有是section的子元素p(而非所有后代元素)才会应用后面的样式。

  c.紧邻同胞选择符:标签1 + 标签2 { 声明 }

  e.g.

h2 + p {
    font-variant: small-caps;
}

  上面的例子表示的是只有紧跟在h2元素后面的同胞元素p才会应用后面的样式。

  d.一般同胞选择符:标签1 ~ 标签2 { 声明 }

  e.g.

h2 ~ a {
    color: red;
}

  上面的例子表示的是在h2元素后面的同胞元素p才会应用后面的样式。

  e.通用选择符:[标签] * { 声明 }

  e.g.

p * {
    color:red;
}

  上面的例子表示的是元素p包含的所有元素都会应用后面的样式。

  3.ID和类选择符

  类选择符:.类名 { 声明 }  表示在html中class="类名"的元素会应用其中的声明。

  多类选择符:.类名1.类名2 { 声明 }  表示在html中class="类名1 类名2"的元素会应用其中的声明。

  比较:.类名1 .类名2 { 声明 }  和上面相比,类名1、类名2之间多了一个空格,此时意义就大不一样了,表示在html中class="类名1"的后代元素中class="类名2"的子元素会应用其中的声明。

  4.属性选择符

  标签名[属性名]

  e.g.

img[title] {
    border: 2px solid blue;
}

  上面的例子表示的是带有title属性的img元素都会应用后面的样式。

  5.属性值选择符

  标签名[属性名="属性值"]

  e.g.

img[title="red flower"] {
    border: 4px solid green;
}

  上面的例子表示的是带有title属性值为red flower的img元素都会应用后面的样式。

  6.伪类

  伪类这个叫法源自它们与类相似,但实际上并没有类会附加到标记中的标签上。伪类分两种:

  UI(User Interface,用户界面)伪类:会在HTML 元素处于某个状态时(比如鼠标指针位于链接上),为该元素应用CSS 样式。  

  结构化伪类:会在标记中存在某种结构上的关系时(如某个元素是一组元素中的第一个或最后一个),为相应元素应用CSS 样式。

  a.UI伪类

  如链接伪类(:link, :visited, :hover, :active),:focus,:target

  b.结构化伪类

  如:first-child 和:last-child,:nth-child

  7.伪元素

  伪元素就是你的文档中若有实无的元素。

  如:first-letter,:first-line,:before 和:after

  8.样式的来源

  a.浏览器默认样式表

  b.用户样式表

  c.作者链接样式表(按照它们链接到页面的先后顺序)

  d.作者嵌入样式

  e.作者行内样式

  9.层叠规则

  a.找到应用给每个元素和属性的所有声明;

  b.按照顺序和权重排序

  c.按特指度排序

  特指度的计算:I(id) - C(class) - E(element)

  e.顺序决定权重

  如果两条规则都影响某元素的同一个属性,而且它们的特指度也相同,则位置最靠下(或后声明)的规则胜出

  第三章 定位元素

  1.盒模型

  所谓盒模型,就是浏览器为页面中的每个html元素生成的矩形盒子,而HTML页面实际上就是由一堆盒子组成的。

  盒子模型主要适用于块级元素,如图:

  对于一个盒子的宽度:

  a.没有显式地设置元素的width属性(也就是为auto)

  此时该元素应该会填充满父元素空间,此时父元素width为:(margin * 2) + (border * 2) + (padding * 2) + content

  b.显式地设置元素的width属性

  此时该元素content的宽度就是你设置的width,而元素占据的总宽度为:(margin * 2) + (border * 2) + (padding * 2) + width

  好了,其实我们上面说的是W3C标准的盒模型,但还有一种盒模型,称之为IE盒模型

  IE盒模型的不同之处:该元素(content + padding + border)的宽度才是设置的width,这样元素占据的总宽度变为:(margin * 2) + width

  如图:

  对于这两种不同的盒模型,W3C在CSS3中加入了一个属性来控制选择哪种模型

  box-sizing: content-box | border-box | inherit;

  content-box:默认属性,表示应用标准盒模型

  border-box:表示应用IE盒模型

  inherit:表示从父元素继承这个属性

  2.浮动与清除

  请参考我写的另一篇文章《清除浮动的简要介绍

  3.定位

  CSS布局的核心是position属性

  position: static | relative | absolute | fixed;

  static:默认属性,一般不设置,会按照正常的文档流进行布局

  relative:相对定位,相对的是它原来在文档流中的位置进行定位,可以使用top、right、bottom和left属性来改变它的位置

  absolute:绝对定位,更重要的是它已经脱离正常的文档流了,它会相对于它的定义上下文(如果它的祖先元素的position属性有为relative的,那这个祖先元素就是它的定位上下文,如果没有,那它的定位上下文就是body)进行定位,同样可以使用top、right、bottom和left 属性来改变它的位置

  fixed:固定定位,也已经脱离正常的文档流了,与绝对定位很像,但不同之处在于,固定定位元素的定位上下文是视口,使用top、right、bottom和left属性可以改变它的位置

  4.显示属性

  display: block | inline | inline-block | none | 等等;

  block:块级元素,在父元素中独自霸占一行,未设置width时与父元素同宽

  inline:行内元素,与其它行内元素挤在同一行里,只有显示不下时才会换行

  inline-block:行内块级元素,通俗说,在它周围的元素看来,它是一个行内元素,能和其它行内元素同处在一行里,但其自身却有着块级元素的特点,如它可以设定高度、宽度

  none:无,这个元素在html中不见了,在常规流当中也不会占据位置

  5.背景

  a.background-color

  背景颜色,通过它可以设定元素背景图层的颜色

  e.g.

p {
    background-color: #caebff;
}

  b.background-image

  背景图片,可以通过url的形式设定元素背景图片

  e.g.

p {
    background-image: url(images/blue_circle.png);
}

  c.background-repeat

  背景重复,控制背景的重复方式

  background-repeat: repeat | repeat-x | repeat-y | no-repeat

  d.background-position

  背景位置,用于控制背景的位置,设定背景位置时可以使用三种值:关键字(如top,left,center等)、百分比(如30%,50%等)、绝对或相对单位的数值(如px等,可以为负值),可以使用两个值分别设定水平和垂直位置(如果只有一个值,就代表水平和垂直的位置都是一样的)

  e.g.

p {
    background-position: center);
    background-position: left bottom);
    background-position: 50% 50%);
    background-position: 30px 20px);            
}

  e.background-size

  背景尺寸,控制背景图片的缩放,也可以使用三种值:关键字(如cover,contain)、百分比(如30%,50%等)、绝对或相对单位的数值(如px等,设定两个值,分别代表宽度和高度),关键字中,cover:拉大图片,使其完全填满背景区;保持宽高比;contain:缩放图片,使其恰好适合背景区;保持宽高比

  f.background-attachment

  背景粘附,控制滚动元素内的背景图片是否随元素滚动而移动,默认值是scroll,即背景图片随元素移动。如果把它的值改为fixed,那么背景图片不会随元素滚动而移动

  g.简写背景属性

  e.g.

body {
    background: url(images/watermark.png) center #fff no-repeat contain fixed;
}

  h.多背景图片

  可以给元素背景添加多个背景图片

  e.g.

p {
    background: 
    url(images/turq_spiral.png) 30px -10px no-repeat,
    url(images/pink_spiral.png) 145px 0px no-repeat,
    url(images/gray_spiral.png) 140px -30px no-repeat, #ffbd75;
}

  每张图片的声明都单独放在了一行里,以逗号分隔,以便看清它们的位置、重复的设定值。为了防止图片加载失败时元素背景处于默认的透明状态,这里也在最后一条声明中加上了背景颜色(加粗的值)。要注意的是,代码中先列出的图片显示在上方,或者说,更接近前景

  第四章、字体和文本

  1.字体

  来源:用户机器中安装的字体;保存在第三方网站上的字体;保存在你的Web 服务器上的字体

  font-family,用于设定元素中的文本使用什么字体。

  一般来说,应该给整个页面设定一种主字体,然后只对那些需要使用不同字体的元素再应用font-family,而且既然字体要么来自用户机器,要么来自网上,那么就可能存在某种字体不能在某个网页中使用的可能,因此为防止第一种字体无效,就需要多列出几种后备字体,这个字体的列表也叫字体栈

  一般,有几种通用字体类,如以下5种:

  a.serif,也就是衬线字体,在每个字符笔画的末端会有一些装饰线

  b.sans-serif,也就是无衬线字体,字符笔画的末端没有装饰线

  c.monospace,也就是等宽字体,顾名思义,就是每个字符的宽度相等(也称代码体)

  d.cursive,也就是草书体或手写体

  e.fantasy,不能归入其他类别的字体(一般都是奇形怪状的字体)  

  使用这些通用字体类的目的,就是确保在最坏的情况下,文档起码可以通过正确的字形来显示

  font-size,字体大小,是可以继承的,设定字体大小有两种方法:

  a.绝对字体大小,如像素(px),设定多大就多大,与祖先元素的字体大小无关

  b.相对字体大小,如百分比、em或rem,如果你给某个元素设定了相对字体大小,则该元素的字体大小要相对于最近的“被设定过字体大小的”祖先元素来确定

  font-style: italic | oblique | normal

  font-style: bold | normal

  2.文本属性

  text-indent,文本缩进,值为长度值(正、负均可)

  letter-spacing,字符间距,值为长度值(正、负均可)

  word-spacing,单词间距,值为长度值(正、负均可),css把任何两边有空白的字符和字符串都视作“单词”,但对中文基本没用

  text-decoration: underline | overline | line-through | blink | none

  text-align: left | right | center | justify

  line-height,行高,任何数字值(不用指定单位)

  vertical-align,垂直对齐,任意长度值以及sub、super、top、middle、bottom 等,以基线为参照上下移动文本,但这个属性只影响行内元素

posted @ 2014-07-08 16:13  卡尔士大夫  阅读(203)  评论(0编辑  收藏  举报