怪异模式和DTD
为了确保向后兼容,浏览器厂商发明了标准模式和怪异模式两种方法来解析网页
在怪异模式中,width 包含padding + border ,在标准模式中 盒子由width 、border、padding组成
块级元素居中的方法, width + margin-left:auto | margin-right:auto;
怪异模式与DTD有关。如果漏写dtd,在ie中就会触发怪异模式。
如何组织css
应用css的能力分成两部分,使用css的api,会组织css
组织方法有:按功能划分,布局layout.css,字体的font.css 按区块划分, header.css footer.css
主体放main.css
组织css的方法:
按功能划分 base common page 知道了组织css的方法
base.css
提供css reset 功能 和最小的原子类
它与具体的页面无关,所有风格的都可以引用它。力求精简和通用 。
下面的例子很好。 例如建房子,base.css打地基(css reset),并提供砖块(原子类),具有高度可移植性。内容很少。
common.css 提供组件级的css类。它是网站级别的,重复出现在的模块,要保持重用性和灵活性。
比喻为门窗。 UI组件。
page.css是页面级别的。 如果网站页面不多,可以放在一个page.css里,用注释标段落。需要有命名规则来避免冲突。
推荐的base.css
它具有无视美工设计,适用于任何网站的特点,关系到网站开发的效率和css文件的大小
得到了一个base.css文件
css reset 文字排版 定位 长度高度 边距
css reset 删除浏览器的默认样式。主要是有差异 ul的边距 firefox 是用padding ie 是用marging
*{ margin:0px;padding:0px} 不好就是在于性能,只需要将常用 的标签写出来。
有时还喜欢把font-size 和color写进去 div ...p . dl ... { margin:0,padding:0,font-size:12px;color:#000; }
不好的地方就是它会破坏css的继承性。
可借鉴一些框架。
.fl .fr display:inline 解决ie6的双外距问题(浮动的时候)
.bc 使块级元素居中。 要加上w100才能使用,体现了原子类,只设置一个css规则的概念
.clearfix 在父元素加clearfix类,解决。
.zoom zoom:1 ie专有属性,解决些问题
模块化css 在css中引入面向对象编程思想
如何划分模块--单一职责。 写样式前,先分模块
将面向对象的思想引入到css的模块化里。
从视觉上进行划分 ,样式和功能相对独立且稳定的一部分就可以视为模块。
模块与模块之间尽量不要包含相同的部分。如果有相同部分,应将它们提取出来。拆分成一个独立的模块。
模块应当在尽可能少的原则下,做到尽可能简单,以提高重用性。
css的命名 -- 命名空间的概念
有意义的英语,驼峰式或分隔线
不要滥用子选择符,因为会有冲突的危险
骆驼命名法用于区别不同单词,划线用于表明从属关系
.timeList-lastItem
在page层有不同工程师将代码写重复的可能,加前缀可以解决。
.ysw-timelineList-lastItem
可以带来好的可读性、避免多人合作的冲突。
多用组保,少用继续。
例子很好。在写的时候分多个类来写,单一职责
如何处理上下margin
如果不确定模块的上下margin,那么可以用组合的方式来写,并且同时不要使用margin-top 和margin-bottom ,会产生合并的风险。
css选择器的权重
标签 1 类名10 id 100
相同权重时最后定义的优先。
子选择器定义样式会造成权重过高,不好覆盖样式,难维护。多使用些类名就能解决。
Css sprite
为了减少http请求,要不要使用这种技术看网站流量。它的负作用是维护性。
模向的放一起,纵向的放一起。
图片翻转时,将背景图作在一张图上。 background-position
css编码风格
一行式编码风格 减少文件体积
尽量使用css,少用id
Css hack 有三种方法
条件注释法
<!--[if IE 6]> if gt IE 6
<![endif]-->
选择符前缀法, 样式前缀法 _ie6 * ie6,7
链接点击后 hover样式不出现问题是因为a事件顺序放置, love-hate link visited hover active
hasLayout ie的css解析引擎有时会出问题,要手动触发一个hasLayout zoom:1 height:1% position:relative;
块级元素可以设置width,height 行内元素不能设置
块级元素margin padding 行内元素 左右的设置没事,,,上下不起作用,只会增加面积