《CSS那些事儿》读书笔记

注:
  • 此书出版于2009年,因此有些知识...你懂得。
  • 有些我熟悉的知识点,就没有记录下来了,因此想了解更多的细节,仍是去看下此书吧。
  • 暗灰色标记部分,是我本身的理解,有不对或要补充的地方,还请你们多多指教。
  • 代码演示我统一放到了jsfiddle上,国内访问速度稍慢些,你们耐心点。或是你们知道国内有相似的在线调试网站,麻烦和我分享下,在此先谢了。
  • 该笔记中只给出了部分代码演示连接,若是想看该书的完整示例代码,可到百度云:http://pan.baidu.com/s/1o64sPR0 下载,我已经共享好了。
  • 该笔记较长,你们耐心点哦。

 

耐心地学习CSS,掌握好CSS的本质原理后,你将会发现原来CSS真的很好玩。

 

学习CSS最好的方法就是 不断地作,不断地想,不断地实践。

 

CSS特色:
  • 修饰页面文本、图片等页面元素,避免使用没必要要的HTML元素。
  • 更有效地控制页面结构、页面布局。
  • 提升开发和维护效率。

 

CSS的简写:
  • 颜色的缩写:#RRGGBB –– 缩写成 #RGB。
  • 单位值的省略:当数值为0时,可省略单位。
  • 内外边距的简写:根据上右下左的顺时针方向,有4种简写方式。
  • 边框的简写:border: -width || -style || -color。
  • 背景的简写:background: -color || -image || -repeat || -attachment || -position
  • 字体的简写:font: -style || -variant || -weight || -size || /line-height || -family
  • 列表的简写:list-style: -image || -position || -type

 

CSS选择符:
  • 标签选择符:E(html标签)
  • ID选择符:#className
  • 类选择符:.className
  • 通配符选择符:*
  • 包含选择符:又称派生或后代选择符,做用于元素的后代元素。
  • 子选择符:又称子对象选择符,做用于元素的子元素,用“>”链接选择符(IE7+)。
  • 相邻选择符:做用于元素的相邻的下一个元素(线性结构中的直接后驱),用”+“链接选择符(IE7+)。
  • 属性选择符:E[attr]、E[attr=“value”]、E[attr~=“value”]、E[attr|=“value”]、E[attr^=“value”]
  • 选择符的组合关系:针对性使用类选择符或ID选择符、选择符群组、选择符组合。

 

伪类:
用来指定一个或者多个与其相关的选择符的状态( IE6/7支持部分)。其形式为:选择符:伪类 {属性:属性值;}。
如:a:link{}、a:visited{}、a:hover{}、a:active{}。
伪类可以使页面增长更多交互效果,而没必要去使用过多的javascript来辅助实现。

 

伪对象:
指在html的文档指定的信息以外,建立文档的额外信息( IE6/7支持部分)。其形式:选择符:伪对象 {属性:属性值;}。
如:p:before {content: “4月1日”}。

 

CSS层叠样式表的特点在于“层叠”,所谓 层叠即表示CSS样式表会根据选择符的使用而将样式相互叠加或者覆盖。

 

网页定义的4种样式:
  • html:表示在html中是使用的样式。
  • 做者:表示CSS文件的编写者。
  • 用户:指浏览器网页的用户所设置的样式。
  • 浏览器:指浏览器默认样式。

 

CSS样式采用的优先顺序:
  • 标有!important关键字声明的属性。
  • html中的CSS样式属性。
  • 做者编辑的CSS文件样式属性。
  • 用户设置的样式。
  • 浏览器默认的样式。

 

选择符优先级积分:
  • 标签选择符、伪类及伪对象:优先级积分为1。
  • 类选择符、属性选择符:优先级积分为10。
  • ID选择符:优先级积分为100。
  • style属性:优先级积分为1000。
  • 其余选择符,如通配符选择符等:优先级积分为0。

 

对于 !important关键字的使用必定要谨慎,切勿随便使用,避免产生没必要要的问题。

 

内嵌样式表,通常应用在访问量比较大的页面 减小对服务器的http请求数而减小对服务器的负担。
缺点是若是须要修改,那就只能对页面进行修改, 且没法利用浏览器缓存特性

 

因为浏览器最后解析@import,这样很容易致使IE6的闪屏或者在打开页面的过程当中无样式,直到页面加载完毕后才会加载样式的现象出现,所以 不建议使用@import

 

<div id=“container”>
    <div class=“mainBox”>主要内容区域</div>
    <div class=“sideBox”>侧边栏</div>
</div>
由于浏览器在解析html代码时是由上而下的方式逐句分析的,所以 将mainBox放在sideBox以前的主要做用是将内容区域提早展示在浏览器中。

 

在使用CSS样式布局页面结构时,不使用浮动那么就只能采用定位的方式进行页面布局。

 

两列页面布局:
  • 两列定宽结构:
    要点:float、width指定、 :after清除浮动。
    效果:http://jsfiddle.net/XianfaLang/tWvph/
    前提:两列的盒模型宽度相加不能大于父元素的宽度,不然会出现错位现象。
  • 两列自适应结构:
    要点:float、width百分比、 :after清除浮动。
    效果:http://jsfiddle.net/XianfaLang/MyfXs/
  • 单列定宽-单列自适应结构:
    要点:相对定位、负边距效果:http://jsfiddle.net/XianfaLang/U3J3X/
    问题:当sideBox的内容不少时,使用绝对定位致使没法撑开父元素的高度,并且会覆盖其余元素的内容。解决方案是使用javascript从新判断父元素的高度来解决,我的以为应该有CSS方案来解决这个问题,而不是用javascript来解决。这不,第5章就给出了一种解决方案:http://jsfiddle.net/XianfaLang/5w8MD/
  • 两列等高:
    4.1. 背景模拟:利用背景图片的平铺,在视觉效果上产生等高的感受。
    4.2. 负边距实现(推荐):   
         原理:利用左右两个方向的外边距弥补在页面中布局出现错位的现象。    
         要点:两容器设置margin-bottom:-9999px; padding-bottom:9999px,父元素设置overflow:hidden;   
         效果:http://jsfiddle.net/XianfaLang/Q5nph/    
         问题:若是页面使用<a>作页面跳转,将会隐藏部分文字信息。若是将背景图片放到mainBox或者sideBox底部,将看不到背景图片。
    4.3. 边框模拟:    
        要点:border-right:280px solid #AAAAAA; 绝对定位    
        效果:http://jsfiddle.net/XianfaLang/tLmTc/
    4.4. JS方式:    
        要点:使用javascript设置两列高度相同。
        效果:http://jsfiddle.net/XianfaLang/C9XcZ/

 

三列或多列布局:
文本相关
  • text-indent属性可将文字往旁边“推”,如:p { text-indent: 2em; } /* 设置段落缩进2em */ 联想到负边距“吸”功效。
  • 隐藏文字方法:
    a. 使用text-indent/line-height 将文字“推”到容器以外。
    b. visibility: hidden; 设置元素不可见,但占空间位置。
    c. display: none; 设置元素不可见,不占空间位置。

 

图片相关
PNG优势:
  • 是目前保证最不失真的格式,它汲取了GIF和JPG两者的优势,存储形式丰富。
  • 即能把图像文件压缩到极限以利于网络传输,又能保留全部与图像品质有关的信息。
  • 显示速度快。
  • 支持透明图像的制做。
PNG缺点:不支持动画效果。

 

PNG-8比GIF要小一点,GIF可制做动画而PNG-8没法实现动画效果。
PNG-24是色彩最丰富的图片,且支持alpha通道的透明,不像PNG-8和GIF只能支持全透明的图片。
支持alpha通道的透明,可让图片产生半透明的效果,使页面更漂亮。

 

采用哪一种格式的图片做为背景图的参考点:
  • 图片是否严重失真。
  • 哪一种格式的图片是最小的。
  • 图片是否有透明效果,若是有,那是否有alpha透明效果。

 

background-position注意点:
  • 任何背景图片都是设置水平方向的定位,设置垂直方向的定位。
  • 只有一个数值时,该数值将做用于水平方向的定位,而垂直方向的定位将以默认的50%为基准。
  • 属性值为百分比时,将以图片的中心点为基准计算其相对位置,而使用px像素值时将以图片的左上角为基准。
  • 可使用负值。

 

CSS Sprite经常使用来合并频繁使用的图形元素。
CSS Sprite注意点:
  • 固定容器的宽度和高度。
  • 超出容器的宽度和高度部分的背景图片须要隐藏。
  • 背景图片在合并时,须要考虑每张图片的用途。

 

图文混排:给<img>设置float: left;

 

三种列表:
  • 无序列表:<ul><li>...</li></ul>
  • 有序列表:<ol><li>...</li><ol>
  • 自定义列表:<dl> <dt>标题</dt> <dd>内容</dd> </dl>

 

行内元素不具有宽高属性,只有将其转化为块级元素后才具有宽高属性。
CSS样式中能将块元素以横向排列方式排列的只有定位( position)和浮动( float)两种方式。

 

CSS实现表现效果,javascript实现行为效果。

 

CSS样式须要你们 不断去摸索,不断尝试新的内容才会使每一个人自身对CSS样式的理解及处理问题的能力获得提高。

 

列表示例:

 

理解、分析、总结是必需要进行的几个步骤:
  • 理解每一个例子中所讲解的步骤及实现的方法。
  • 分析每一个方法的可用性及是否有其余更好的实现方法。
  • 总结在每次实践中所获得的经验。

 

在IE浏览器中,按钮与文字之间的垂直对齐关系 如同 复选框与文字之间的对齐关系,须要利用 vertical-align对其进行调整。

 

表格相关
border-collapse:检索或设置表格的行和单元格的边是否合并到一块儿。默认值:separate。合并:collapse。
可以使用相邻选择符实现隔行换色。我的以为此知识点,主要是了解相邻选择符的应用,实际应用性不大。

 

将table标签用于显示数据结构,而不是用于页面布局。

 

float是将页面中的元素在水平方向上 并排显示的,而 position倒是将页面的元素以 叠加的方式显示的。

 

使用CSS滤镜以前,须要思考的几个问题:
  • 页面中使用CSS滤镜的次数会不会过多。
  • 使用CSS滤镜是否是会占用较多的CPU。
  • 可否使用图片直接代替由CSS滤镜产生的效果。
  • 使用CSS滤镜后,会不会影响到页面中的内容操做。

 

使用iframe实现的“选项卡”逐渐演变为将页面内容集于一体,经过JS切换显示内容。
实现tab选项卡要把握html结构与css样式之间的微妙关系。

 

负边距与层叠效果的应用:怪异的导航菜单。

 

IE浏览器会在每一个列表li之间产生几个像素的空间,可用float:left;使多余的几个像素“消失”。

 

分析实例最好的方法就是 将其简单化,从根本上去了解问题、分析问题。

 

清除浮动做用:
  • 解决页面错位现象。
  • 解决子元素浮动致使父元素没法自适应子元素高度的问题。

 

清除浮动的经常使用方法:
    1. clear属性--经常使用clear: both;
    2. 添加额外标签: <div style="clear:both;"></div>
    3. 使用 br标签和其自身的 html属性: <br clear="all">
    4. 父元素设置: overflow: hidden; *zoom:1; (在IE6中还须要触发 hasLayout ,例如 zoom:1)
    5. 父元素设置: display: table;
    6. 父元素设置  :after 伪类 (推荐)
.clearFix:after {
    clear: both; /* 清除伪类层以上的浮动 */
    display: block;   /* 使生成的元素以块级元素显示,占满剩余空间; */
    visibility: hidden; /* 设置伪类层内容为块级元素且不可见 */   
    height: 0;
    line-height: 0; /* 设置伪类层中的高度和行高为0 */
    content: " "; /* 将伪类层中的内容清空 */
}
.clearFix {
    zoom: 1; /* 针对IE浏览器产生hasLayout效果清除浮动 */
}

/* 更简洁的写法 */
.clearFix:before,
.clearFix:after {
    content: "";
    display: table;
}

.clearFix:after {
    clear: both;
}
.clearFix{
    zoom:1;
}

 

 
结构分析是页面制做的第一步。

 

用户习惯于滚动条上下移动,而不是左右移动。

 

若是图片很大,可将其切成两张图片。

 

使用语义的XHTML标签优势:
  • 当样式没法正常加载时,依然会显示条理清晰的文档结构。
  • 增长SEO(搜索引擎优化)性能。
  • 增强与程序开发之间的配合。
  • 提升页面后期维护的工做效率。

 

分享本身的做品,对批评你做品的人表示感谢,由于他在告诉你如何才能作的更好。

 

怎么提升自身编写代码的能力:
    • 多看CSS手册。
    • XHTML代码中每一个标签的含义。
    • 善于分析CSS布局网站的处理方式。
    • 多作CSS布局网站的练写。
    • 学会使用网络搜索引擎。
    • 善于利用辅助工具解决布局问题(Firebug, Chrome devtool)。
    • 善于总结经验、整理笔记(这里推荐你们使用有道云笔记,PC/Mobile/Web都有,并且在微信中复制连接可直接同步云笔记,这样便于你们利用碎片时间阅读笔记)。
    • 收藏和使用代码片断。
相关文章
相关标签/搜索