2.1 常用的选择器

1. 类型选择器  p { color: black; }

2. 后代选择器  blockquote p { padding-left: 2em; }

3. ID选择器  #intro { font-weight: bold; }

4. 类选择器  .date-posted { color: #cccccc; }

5. 伪类  a:link { color: blue; }

6. 通用选择器  * { padding: 0; }

7. 子选择器  #nav>li { padding-left: 20px; }

8. 紧邻同胞选择器   h1+p{ font-size: 1.4em; }

紧邻同胞选择器可用于定位同一个父元素下紧跟某个元素之后一个元素;

9. 一般同胞选择符~  h2~a { color: red; }

一般同胞选择符可用于定位同一个父元素下某个元素之后所有元素;

10. 属性选择器

可以根据某个属性是否存在寻找元素:  arconym[title] { border-bottom: 1px dotted #999; }

也可以根据属性的值来寻找元素:a[rel="nofollow"] { padding- right: 20px; }

如果有多个属性值,可以这样: a[rel~="co-worker"] { padding-left: 20px; }

2.3.3 层叠和特殊性

(1)层叠的重要度次序

  • 标有!important的用户样式。
  • 标有!important的作者样式。
  • 作者样式。
  • 用户样式。
  • 浏览器/用户代理应用的样式。

(2)规则的特殊性计算。

选择器的特殊性分成4个成分等级: a、b、c和d;

  • 如果样式是行内样式,那么a=1。
  • b等于ID选择器的总数。
  • c等于类、伪类和属性选择器的数量。
  • d等于类型选择器和伪元素选择器的数量。

如果两个规则的特殊性相同,那么后定义的规则优先。

2.3.4 继承

直接应用于元素的任何样式会覆盖继承而来的样式。这是因为继承而来的样式的特殊性为空。

Firebug是一个方便的Firefox附加组件,可以用它检查各个元素,查明他们的样式来源。

2.4.1 对代码应用样式

1. 设计代码的结构

  • 一般性样式(@group general styles)
  • 辅助样式(@group helper styles)
  • 页面结构(@group page structure)
  • 页面组件(@group page components)
  • 覆盖(@group overrides)

2. 自我提示

gotcha: 使用@todo来表示某些东西需要在以后进行修改、修复或复查。用@bugfix表示代码或特定浏览器遇到的问题。用@workaround来表示并不完善的权宜之计。

3.1 盒模型概述

1. 当一个元素包含在另一个元素中(假设没有内边距或边框将外边距隔开),他们的顶和/或底外边距也会发生叠加。

2. 假设有一个空元素,他有外边距,但是没有边框或内边距。在这种情况下,顶外边距和底外边距就碰到了一起,他们会发生叠加。

3. 外边距叠加的重要意义:以由几个段落组成的典型文本页面为例。第一个段落上面的空间等于段落的顶外边距。如果没有外边距叠加,段落之间的空间是页面顶部的两倍。如果发生外边距叠加,段落之间的顶外边距和底外边距就叠加在一起,这样各处的距离就一致了。

4. 只有普通文档流中块框垂直外边距才会发生外边距叠加。行内框、浮动框或绝对定位框之间的外边距不会叠加。

3.2 定位概述

可视化格式模型和定位模型,理解这两个模型的差异是非常重要的,因为他们一起控制着如何在页面上布置每个元素。

3.2.1 可视化格式模型

可以使用display属性改变生成的框的类型。

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

行内框在一行中水平排列。可以使用水平内边距、边框和外边距调整他们的水平间距。但是,垂直内边距、边框和外边距不影响行内框的高度。同样,在行内框上设置显式的高度或者宽度也没有影响。由一行形成的水平框称为行框,行框的高度总是足以容纳它包含的所有行内框。但是,设置行高可以增加这个框的高度。因此,修改行内框尺寸的唯一办法是修改行高或者水平边框、内边距或外边距。

对于上面那句话,我是这么理解的。行框容纳它所包含的所有行内框,这就意味着行框是一个整体,必须要有统一的高度,不然一行看起来就会高低不平。所以不能通过某个行内框来设置其高度,应该通过行高来设置整个行框的高度。

但是,元素的display属性允许设置为inline-block。这个声明让元素像行内元素一样水平地依次排列,但是,框的内容依然符合块级框的行为,例如能够显式地设置高度、宽度、垂直外边距和内边距。

将一些文本添加到一个块级元素(比如div)的开头时,即使没有把这些文本定义为块级元素,它也会被当成块级元素对待。<div>some text</div>。在这种情况下,这个框称为匿名框。

3.2.2 相对定位

相对定位被看做是普通流定位模型的一部分,因为元素的位置是相对于它在普通流中的位置的。使用相对定位时,无论是否移动,元素依然会占据原来的空间。因此,移动元素会导致他覆盖其它框。

3.2.3 绝对定位

绝对定位使元素的位置和文档流无关,因此不占据空间。绝对定位的元素的位置是相对于距离它最近的那个已定位的祖先元素确定的。(这里我进行了一点测试,position共有五个可取的属性值——relative, absolute, fixed, inherit 和 static;测试后我认为“已定位”的意思为祖先元素的position=relative/absolute/fixed. 如果是继承(inherit)的话也应该要继承前面的3个值。)如果元素没有已定位的祖先元素,那么他的位置是相对于初始包含块的。

固定定位(fixed)是绝对定位的一种,固定定位的元素总是出现在窗口中相同的位置。

3.2.4 浮动

如果浮动的元素后面有一个文档流的元素,那么这个元素的框会表现得像浮动元素根本不存在一样。但是,框的文本内容会受到浮动元素的影响,会移动以留出空间。用技术术语来说,浮动元素旁边的边框被缩短,从而给浮动元素留出空间,因此行框围绕浮动框。

要想阻止行框围绕在浮动框的外边,需要对包含这些行框的属性应用clear属性。

1. P49-P51例子的理解(感谢chrome的"审查元素")

P49 "在清理元素时,浏览器在元素顶上添加足够的外边距,使元素的顶边缘垂直下降到浮动框下面"。因此,在P51 添加了一个空元素<br class="clear" />时,<br>元素的外边距包含了<img>和<p>元素,当然,外边距是透明的,没有背景颜色。但是,要记住,<br>元素是切切实实包含在<div>元素中的,<br>的外边距也是<div>内容的一部分,因此,灰色的背景颜色来源于<div>元素。

2. 我们有理由坚信,浮动元素虽然脱离的正常的文档流,但是其实他们是都在另外一个维度的文档流中。

例如前面的3个<p>元素一起向左浮动,最后的效果是他们并排浮动,而不是覆盖浮动。

这里让父元素也向左浮动,等于让父元素也进入到了另一个维度的文档流,父子关系重新维系,<div>元素包含了<img>元素和<p>元素。

3. 添加一个点,因为它是个非常小的不引人注意的字符。以为不希望新内容占据垂直空间或者在页面上显示,所以需要将height设置为0,将visibility设置为hidden。因为被清理的元素在它们的顶外边距上添加了空间,所以生成的内容需要将它的display属性设置为block。这样设置之后,就可以对生成的内容进行清理:

.clear:after {
content: "."
height: 0;
visibility: hidden;
display: block;
clear: both;
}

精通CSS:高级Web标准解决方案(第二版) 初读笔记的更多相关文章

  1. web前端好书推荐 CSS权威指南《第3版,Bootstrap实战,精通CSS 高级Web标准解决方案 第2版 中文

    在我的新博客中==> http://www.suanliutudousi.com/2017/08/24/web%E5%89%8D%E7%AB%AF%E5%A5%BD%E4%B9%A6%E6%8E ...

  2. 精通css 高级web标准解决方案——可视化格式模型-盒模型

    1-盒模型的两种标准: IE :width 和 height属性 是包括padding和border在内的. w3c:width 和 height 属性,就是单纯的内容的宽高,padding 是内容之 ...

  3. 精通CSS高级Web标准解决方案(1-1选择器)

    设计代码的结构 使用有意义的标记 css可以控制页面的外观并将表现与内容分隔开. 在分配ID与类名时尽量保证有意义且与表现无关. div可以对块级元素进行分组,而span可以对行内元素进行分组或标识. ...

  4. 精通CSS高级Web标准解决方案(2-1 可视化格式模型之框模型)

    浮动.定位.框模型这些控制在页面上安排和显示元素的方式,形成CSS布局. 盒子模型 页面上的每个元素都被看成一个矩形框. 盒子模型有两种,分别是 IE 盒子模型和标准 W3C 盒子模型.他们对盒子模型 ...

  5. 精通CSS高级Web标准解决方案(1-3 规划、组织与维护样式表)

    对文档应用样式 对代码进行注释/*......*/ 结构性注释 自我提示 删除注释.优化样式表 样式指南:解释代码与站点的视觉设计是如何组织在一起的 站点结构.文件结构.命名规则 编码标准:(X)ht ...

  6. 精通css 高级web标准解决方案——可视化格式模型-定位模型

    CSS 中有三种定位机制:普通流.浮动.绝对定位.(默认为普通流) 改变文档流:display: inline-block; (支持到ie8及以上) 1-匿名块框: <div> 你好! & ...

  7. 精通CSS高级Web标准解决方案(4、对链接应用样式)

    4.1 简单的链接样式 锚可以作为内部引用,也可以作为外部链接,应该区分对待. 伪类选择器: :link 用来寻找没有访问过的链接 :visited 用来寻找已经访问过的链接 a:link{color ...

  8. 精通CSS高级Web标准解决方案(2-2 可视化格式模型之定位概述)

    视觉格式化模型 块级元素(块框).行内元素(行内框),可以使用display改变生成的框的类型,display:block让行内元素(比如<a>)表现的跟块级元素一样,display:no ...

  9. 精通CSS高级Web标准解决方案(1-2 层叠与特殊性)

     层叠与特殊性 选择器的特殊性分成四个等级,a.b.c . d 如果样式是行内样式,那么a=1 b=ID选择器的总数 c=类.伪类.属性选择器的总数 d=标签选择器与伪元素选择器数量 例如:style ...

  10. 精通CSS高级Web标准解决方案(7、布局)

    7.1 让设计居中 7.1.1 使用自动空白边让设计居中 <body> <div id="wrapper"> </div> </body& ...

随机推荐

  1. Flow-based model

    文章1:  NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION 文章2:Real-valued Non-Volume Preserving (Real ...

  2. 【每日一包0008】arr-diff

    [github地址:https://github.com/ABCDdouyae...] arr-diff 多个数组比较,过滤出第一个数组独有的内容 用法:arr-diff(arr1, arr2, ar ...

  3. hiho #1502:最大子矩阵(元素和不超过k)

    #1502 : 最大子矩阵 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxM的矩阵A和一个整数K,小Hi希望你能求出其中最大(元素数目最多)的子矩阵,并且该 ...

  4. Docker安装Mysql和Nginx

    1. 序言 将应用容器化更方便于管理,昨天辛辛苦苦安装在宿主机上的,今天狠心重置服务器,学下docker练练手. 2. Get start 2.1 安装Docker 公司的云用的是ubuntu,我自己 ...

  5. Nowcoder 挑战赛23 B 游戏 ( NIM博弈、SG函数打表 )

    题目链接 题意 : 中文题.点链接 分析 : 前置技能是 SG 函数.NIM博弈变形 每次可取石子是约数的情况下.那么就要打出 SG 函数 才可以去通过异或操作判断一个局面的胜负 打 SG 函数的时候 ...

  6. KMP模版 && KMP求子串在主串出现的次数模版

    求取出现的次数 :  #include<bits/stdc++.h> ; char mo[maxn], str[maxn];///mo为模式串.str为主串 int next[maxn]; ...

  7. HGOI 20190708 题解

    Problem A 拿出勇气吧 幸运数字每一位是$4$或者$7$,现在给出一个数字每位数位上数的和为n,求出最小的幸运数n 对于100%的数据,$n\leq 10^6$ Sol : 显然本题要求数的长 ...

  8. JavaWeb_(SSH论坛)_三、用户模块

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 User表 id ...

  9. Atcoder ARC101 E 树dp

    https://arc101.contest.atcoder.jp/tasks/arc101_c 题解是也是dp,好像是容斥做的,但是看不懂,而且也好像没讲怎么变n^2,看了写大佬的代码,自己理解了一 ...

  10. jquery 动态增加table行,动态删除table行

    在html中我们大量的用到了局部刷新,局部刷新就是使用js来动态的修改html局部的数据.下面来介绍下使用jquery来动态的增加table的行,当然这种方式可以适用到任何的html组件中去. < ...