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. dead relu and Tensorboard

    https://medium.com/analytics-vidhya/is-relu-dead-27943b50102 1.使用relu作为激活函数时,因其在输入小于0时,输出为0,所以可能会造成d ...

  2. cookie和session django中间件

    目录 一.cookie和session 1. 为什么要有cookie和session 二.cookie 1. 什么是cookie 2. django中关于cookie的使用 (1)后端设置cookie ...

  3. C++--- Lambda匿名函数表达式

    视频教程:https://www.bilibili.com/video/av66419552/ 格式: [capture](parameters)mutable->returm-type{};  ...

  4. Codeforces Round #608 (Div. 2) E. Common Number

    链接: https://codeforces.com/contest/1271/problem/E 题意: At first, let's define function f(x) as follow ...

  5. Redis——SpringBoot项目使用Lettuce和Jedis接入Redis集群

    Jedis连接Redis: 非线程安全 如果是多线程环境下共用一个Jedis连接池,会产生线程安全问题,可以通过创建多个Jedis实例来解决,但是创建许多socket会影响性能,因此好一点的方法是使用 ...

  6. git的安装教程

    团队开发的时候常要用到git来对代码进行管理,平时开发的时候也需要使用git来做一些事情,如给vue项目进行代码编译等等. 那下面我们开始 一.安装和配置环境 首先下载git安装包(去官网下载,htt ...

  7. THUSC2016 成绩单

    题目链接:Click here Solution: 我们设\(f[l][r][x][y]\)表示在原区间\(l\sim r\) 内还未被取走的值最大为\(x\)最小为\(y\)时的代价,这里我们只考虑 ...

  8. Qtcreator 之中文目录

    由于编码格式问题,  qtcreator 所有关于目录的引用和存放均不出现中文,否则编译可以通过,运行时 crashed !!!

  9. Win10升级后VMWare内的系统连不了网如何解决

    一些既想要体验新系统又不愿放弃旧系统的用户,一般都会在电脑中安装VMWare虚拟机.不过,他们偶尔也会遇到这样一个问题,当win10系统自动升级后,VMWare虚拟机内的系统就会出现无法连接网络的情况 ...

  10. python 手动拼接json数据

    第一步:分别拼接为字符串 第二步:将字符串转化为list 第三歩:将两个list合并为dict 第四步:将dict转换为接送数据 如:  import json keys = ['a', 'b', ' ...