1、怪异模式和DTD

标准模式:浏览器根据规范表现页面

怪异模式:模拟老浏览器行为防止老站点无法工作(为了兼容老式浏览器的代码),如果漏写DTD(Document Type Definition文档定义类型)声明,firefox会按照标准模式来解析网页,但在IE中就会触发怪异模式。

两种模式的差异比较大,比较典型的是IE对盒模型的解析;在标准模式中,网页元素的宽度是由padding、border、width三者的宽度相加决定的,而在怪异模式中,width本身就包括了padding和border的宽度

2、如何组织CSS?

按功能划分:font.css color.css layout.css 等

按区块划分:head.css foot.css sidebar.css main.css等

作者建议:base.css + common.css +page.css

base层提供CSS reset功能(覆盖浏览器默认样式)和通用原子类(文字、定位、长宽、边距),具有高度可移植性

common层是网站级的,不同的网站有不同的common层,同一个网站只有一个common层;网站中高度重要的模块,称之为组件

page层位于最高层,提供页面级的样式

3、模块化CSS

拆分模块的技巧:

①模块与模块之间尽量不要包含相同的部分,如果有相同部分,应将他们提取出来,拆分成一个独立的模块

②模块应该在保证数量尽可能少的原则下,做到尽可能简单,以提高重用性

CSS命名规则

①推荐使用英语

②驼峰命名法 用于区别不同的单词,划线用于表明从属关系

③如何避免多人合作时命名冲突?可以使用姓名首字母缩写做为标识符,比如zzl-timeList-lastItem

多用组合,少用继承

如何处理上下margin?

margin是个有点特殊的样式,相邻的margin-left和margin-right是不会重合的,但相邻的margin-top和margin-booton会产生重合;

所以最好统一使用margin-top或者margin-bottom,不要混合使用

总结:如果不确定模块的上下margin特别稳定,最好不要讲它写到模块的类里,而是使用类的组合,单独为上下margin挂用于边距的原子类(例如:mt10、mb20),

模块最好不要混动margin-top或者margin-booton,统一使用margin-top或margin-bootom

4、低权重原则--避免滥用子选择器

CSS的选择符是有权重的,当不同选择符的样式设置有冲突时,会采用权重高的选择符设置的样式。权重规则:HTML标签权重是1,class权重是10,id的权重是100,

例如:p的权重是1,『div em』的权重是1+1=2,『strong.demo』的权重是1+10=11,『#test.red』的权重是100+10=110

如果CSS权重符相同,那么样式会遵循就近原则(选择符定义的先后顺序,而不是class名的先后顺序,<span class="test test2">和<span class="test2 test">是一样的),哪个选择符最后定义,就采用哪个选择符的样式

使用子选择器,会增加CSS选择符的权重,CSS选择符的权重越高,样式越不容易被覆盖,越容易对其他选择符产生影响。

为了保证样式容易被覆盖,提高可维护性,CSS选择符需要保证权重尽可能低

5、CSS sprite

最大好处是减轻服务器的压力,对于流量不大的网站来说,CSS sprite带来的好处并不明显;所以是否使用CSS sprite主要取决于网站流量

将网站的背景图 合到一张大图片上。对于流量大的网站来说,改技术很有价值

①能合并的只能是用于背景的图片,对于<img src=""/>设置的图片,是不能合并到CSS sprite大图中的,会影响页面可读性

②对于横向和纵向都平铺的图片,也不能使用CSS sprite;如果是横向平铺的,只能讲所有横向平铺的图片合并成一张大图,只能竖直排列

6、CSS的常见问题

6.1 编码风格

多行式

.test{

width:100px;

height:50px;

color:#ccc;

}

一行式

.test{width:100px;height:50px;color:#ccc}

随着前端调试工具的日益强大,一行式编码风格成为了主流。

6.2 id和class

①同一个网页,相同的id只能出现一次,不可重复;class可以出现多次

②id的CSS选择符权重为100,而class的选择符权重为10

③原生JS 提供getElementById()方法,支持通过id对应到相关的HTMLElement,但原生JS不支持通过class得到HTMLElement

所以一般情况下,建议尽量使用class,少用id

6.3 CSS hack

①IE条件注释法

  1. 针对不同IE版本分别导入样式
  2.  
  3. <!--[ if IE 6]>
  4. <link type="text/CSS" href="ie6.css" rel="stylesheet">
  5. <![endif]-->
  6.  
  7. <!--[ if IE 7]>
  8. <link type="text/CSS" href="ie7.css" rel="stylesheet">
  9. <![endif]-->
  10.  
  11. <!--[ if IE 8]>
  12. <link type="text/CSS" href="ie8.css" rel="stylesheet">
  13. <![endif]-->

虽然向后兼容性是最好的,缺点也很明显:将同一CSS选择符样式 分散到了三个文件中去控制,增加了开发和维护成本

②选择符前缀法

原理是在CSS选择符前加一些只有特定浏览器才能识别的前缀,从而让某些样式只能在特定浏览器生效。例如 "*html"前缀只对IE6生效,『*+html』前缀只对IE7生效

  1. 选择前缀法不能用于内联样式表;在向后兼容性存在一点风险
  2.  
  3. <style type="text/CSS">
  4. .test{width:80px;}
  5. *html .test{width:60px}
  6. *+html .test{width:70px}
  7. </style>

③样式属性前缀法

在样式的属性名前加前缀,只在特定浏览器下生效。例如『_』只在IE6下生效,『*』在IE 6和IE 7下生效

  1. 相比选择符前缀法聚合程度更高,代码更精简,可维护性很强,但在向后兼容上存在风险;
  2. 可以用在内联样式上
  3.  
  4. <style type="text/CSS">
  5. .test{width:80px;*width:70px;_width:60px}
  6. </style>

6.4解决超链接访问后hover样式不出现的问题

关于a标签的四种状态排序问题,有个love hate原则,即l(link)ov(visited)e h(hover)a(activate)te

6.5 hasLayout

hasLayout是IE浏览器专有的一个属性,用于CSS的解析引擎。有些时候IE下一些复杂的CSS设置解析起来会出现bug,原因可能与hasLayout没有被自动触发有关,我们可以手动触发来解决bug

zoom是最常用、最安全、成本最小的触发hasLayout的方式;在『zoom:1』无效的情况下,可以通过设置『position:relative』来触发hasLayout

6.6块级元素 和 行内元素的区别

常见的块级元素有div、p、form、ul、ol、li等,块级元素会独占一行,默认情况下,其宽度自动填满其父元素宽度;块级元素可以设置width、height属性;块级元素可以设置margin、padding属性

常见的行内元素有span、strong、em等;行内元素不会独占一行,相邻的行内元素会排列在同一行里,知道一行排不下,才会换行;行内元素设置width、height属性无效;行内元素设置有问题,具体是:水平方向的padding-left/right,marigin-left/right都会产生边距效果,但竖直方向的padding-top/bottom,margin-top/bottom却不会产生边距效果

块级元素和行内元素的CSS相关属性是display,其中块级元素对应于display:bolck;行内元素对应于display:inline

6.7 display:inline-block和hasLayout

6.8 relative、absolute、float

6.9 居中

6.9.1、水平居中

①文本、图片等行内元素的水平居中

text-align:center

②确定宽度的块级元素的水平居中

通过设置margin-left:auto和margin-right:auto来实现

③不确定宽度的块级元素的水平居中

方法1:table标签结合margin-left:auto和margin-right:auto来实现

方法2:改变块级元素的display为inline类型,然后使用text-align:center来实现

方法3:给父元素设置float,然后父元素设置postion:relative和left:50%;子元素设置postion:relative和left:-50%来实现水平居中

6.9.2、垂直居中

①父元素高度不确定的文本、图片、块级元素的竖直居中

给父容器设置相同的上下边距来实现

②父元素高度确定的单行文本的竖直居中

通过给父元素设置line-height和height的属性为同一个值来实现

③父元素高度确定的多行文本、图片、块级元素的竖直居中

方法1:table(td的vertical-align默认是middle)

方法2:对支持display:table-cell的IE8 和 FireFox用display:table-cell和vertical-align:middle来实现居中;对不支持display:table-cell的IE6和IE7,设置positon来实现

6.9.10 网格布局

『编写高质量代码Web前端开发修炼手册』读书笔记--高质量的CSS的更多相关文章

  1. 读《编写高质量代码-Web前端开发修炼之道》笔记

    第一章 1.Web标准由一系列标准组合而成,核心理念是将网页的结构,样式和行为分离,所以分为三大部分:结构标准,样式标准和行为标准.结构标准包括XML标准,XHTML标准,HTML标准:样式标准指CS ...

  2. 编写高质量代码:Web前端开发修炼之道(一)

    最近老大给我们买来一些技术方面的书籍,其实很少搬着一本书好好的完整的看完过,每每看电子档的,也是打游击式的看看这章,瞅瞅那章,在那5本书中挑了一本比较单薄的<编写高质量代码web前端开发修炼之道 ...

  3. 《编写高质量代码-Web前端开发修改之道》笔记--第二章 团队合作

    本章内容: 揭秘前端开发工程师 欲精一行,必先通十行 增加代码的可读性--注释 提高重用性--公共组件和私有组件的维护 冗余和精简的矛盾--选择集中还是选择分散 磨刀不误砍柴工--前期的构思很重要 制 ...

  4. 《编写高质量代码-Web前端开发修改之道》笔记--第一章 从网站重构说起

    本章内容: 糟糕的页面实现,头疼的维护工作 Web标准--结构.样式和行为的分离 前端的现状 打造高品质的前端代码,提高代码的可维护性--精简.重用.有序 糟糕的页面实现,头疼的维护工作 工作中最大的 ...

  5. 《编写高质量代码——Web前端开发修炼之道》读后随笔

    结构样式行为的分离 结构标准包括XML标准.XHTML标准.HTML标准:样式标准有CSS标准:行为标准主要包括DOM标准和ECMAScript标准. 通常的项目会按照如上的方式进行分离,但自己曾今做 ...

  6. 编写高质量代码:Web前端开发修炼之道(四)

    这一节是继上一节高质量的Javascript 7)编程实用技巧 1:弹性 从 一个标签区和内容区的实例(就是点击不同的标签菜单显示不同的内容块)来说明不需要每个tabmenu都设置onclick事件, ...

  7. 编写高质量代码:Web前端开发修炼之道(三)

    第五章:高质量的Javascript 这章的内容我看的最久,这是跟我js基础没打好有着莫大的关系,但是还是耐着性子看完了, 不懂的东西都是百度上搜索,理解后再继续.下面是记录下来的笔记. 1)如何避免 ...

  8. 编写高质量代码:Web前端开发修炼之道(二)

    第四章:高质量的css 1)怪异模式和标准模式 在标准模式中,浏览器根据规范表现页面:而怪异模式通常模拟老式浏览器的行为以防止老站点无法工作. 他们两者之间的差异比较典型的表现在IE对盒模型的解析:在 ...

  9. 【读书笔记】读《编写高质量代码—Web前端开发修炼之道》 - JavaScript原型继承与面向对象

    JavaScript是基于原型的语言,通过new实例化出来的对象,其属性和行为来自于两部分,一部分来自于构造函数,另一部分是来自于原型.构造函数中定义的属性和行为的优先级比原型中定义的属性和优先级高, ...

随机推荐

  1. Java笔记--动态代理

    Java动态代理 1.概念 代理: 有时我们并不想直接访问对象A,或者不能直接访问对象A.而是通过访问一个中间对象B,让中间对象B去访问A.这种方式就称为代理. 这里的对象A所属的类就为委托类,或者被 ...

  2. Metasploitable渗透测试实战——Windows漏洞 MS08-067复现

    Ms08-067 攻防环境: 攻击机:kali     ip:198.168.12.212 靶机:Window XP 未打过ms08-067补丁  ip:198.168.12.209

  3. linux 命令——24 Linux文件类型与扩展名

    Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文 ...

  4. 如何用WebIDE打开并运行CRM Fiori应用

    访问Web IDE url 在Web IDE里进行项目clone操作: https://:8080/#/admin/projects/fnf/customer/cus.crm.opportunity ...

  5. Codeforces Round #327 (Div. 2) B Rebranding(映射)

    O(1)变换映射,最后一次性替换. #include<bits/stdc++.h> using namespace std; typedef long long ll; ; char s[ ...

  6. ELF文件的格式和加载过程

    http://blog.csdn.net/lingfong_cool/article/details/7832896 (一) ELF 文件的格式       ELF 文件类型 (1) 可重定位文件(  ...

  7. C#关系运算符

    一.C#关系运算符 C#语言的关系运算符是对操作数的比较运算. 二.示例 using System;using System.Collections.Generic;using System.Linq ...

  8. detection in video and image

    video中的detection,背景更加复杂,目标更加不聚焦,同时由于图片分辨率低于图像,因此更加难做. image中的Detection,背景相对简单些,目标更加聚焦,同时图片分辨率高,因此更加容 ...

  9. vue列表过渡效果

    <transition-group></transition-group> ① 列表 <transition-group> </transition-grou ...

  10. strong和weak

    ios中使用ARC后,内存管理使用了新的关键字:strong(强引用) 和 weak(弱引用),默认是strong引用 strong: 使用strong类型指针指向的对象,会一直保持指向,直到所有st ...