CSS高效开发实战
@(StuRep)
通过条件注释加载不同的CSS
<!--[if !IE]><!-->除IE外都可识别<!--<![endif]-->
<!--[if IE]>所有的IE可识别<![endif]-->
<!--[if IE 6]>仅IE6可识别<![endif]-->
<!--[if lt IE 6]>IE6及以下版本可识别<![endif]!-->
<!--[if gte IE 6]>IE6以及IE6以上版本可识别<![endif]-->
_
条件注释的控制符
项目 | 范例 | 说明 |
---|---|---|
! | [if !IE] | “非”运算符 |
lt | [if lt IE 5.5] | 小于运算符 |
lte | [if lte IE 6] | 小于等于运算符 |
gt | [if gt IE 6] | 大于运算符 |
gte | [if gte IE 6] | 大于等于运算符 |
() | [if (lte IE 6)] | 用于子表达式,以配合布尔运算符 |
& | [if (lte IE 9)&(gt IE 6)] | AND运算符 |
\ | [if (gt IE 6)](!IE) | OR运算符 |
_
常用的属性前缀
- -webkit:webkit核心浏览器,包括Chrome、Safari等。
- -moz:火狐(FIrefox)浏览器
- -ms:IE浏览器
- -o:Opera浏览器
在实际的开发过程中,对于大多数css3效果来说,考虑到兼容性,往往需要把所有的前缀属性都写上去,譬如这样:
.transform {
-webkit-transform:rotate(-3deg);
-moz-transform:rotate(-3deg);
-ms-transform:rotate(-3deg);
-o-transform:rotate(-3deg);
transform:rotate(-3deg);//把标准属性放在最后写
}
_
float
- 对于块级元素来说,在不设置宽度的情况下,默认的宽度是100%,一旦设置了浮动,它的宽度就会根据内容进行自动调整。
- 设置了浮动的元素会脱离正常的文档流,我们可以这样理解:设置浮动后,元素不仅在y轴上浮了起来,在z轴上,也浮了起来。譬如:在默认情况下,父元素的高度会根据子元素的内容进行调整,而如果我们将子元素设置为浮动,父元素的高度就会变为0。
- 虽然浮动的元素脱离了文档流,但是里面的内容仍然占据空间,会根据相对位置进行布局。
_
清除浮动
清除浮动主要应用的是css中的clear属性,clear属性定义了元素的哪一侧不允许出现浮动元素。可选项有left、right、both。
_
CSS定位技术
CSS使用position选项来定义元素的定位属性,该选项有5个可选值:static、relative、absolute、fixed、inherit,默认值为static。
- static:如果使用默认值,在CSS中为元素定义top、left、right、bottom、z-index都不会生效。
- relative:relative的表现和static一样,只不过可以通过设置偏移量和z-index来控制相对于其正常位置进行的偏移。
- absolute:absolute是相对上一个不为static的父元素进行绝对定位。换句话说,如果不指定父元素的position,absolute将相对于整个html文档进行绝对定位。只有指定了container的position(非static),子元素才能相对于父元素进行绝对定位。
- fixed:生成绝对定位的元素,相对于浏览器窗口进行定位。也就是说,不论网页如何滚动,该元素始终停留在屏幕的某个位置上。
绝对定位元素有以下几个特点:
- 块级元素的宽度在未定义时不再为100%,而是根据其内容自动调整。
- 在不定义z-index的情况下,absolute元素会覆盖在其他元素之上。
- 它会脱离正常的文档流,不再占据空间,类似于浮动后的效果。
absolute和fixed都属于绝对定位的范畴。
__
CSS选择器
- 子元素选择器:">"符号,">"左边是父元素,右边是子元素。如果两个元素不是严格的“父子关系”,则使用子元素选择器的定义不会生效。例如:
<li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >test</a></li><!--变为蓝色-->
<li><div><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >test</a></div></li><!--不变蓝色-->
//css
li>a{
color:blue;
}
- 后代元素选择器:一个空格。后代包括子辈、孙子辈等,不同于子代选择器。例如:
<li><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >test</a></li><!--变为蓝色-->
<li><div><a href="#" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >test</a></div></li><!--变为蓝色-->
//css
li a{
color:blue;
}
- 相邻元素选择器:“+”,用于选取和某个元素相邻的同级元素。相邻元素选择器的使用有两个条件:
- 二者必须拥有同一个父元素
- 二者相邻
- 属性选择器:属性选择器的语法是用一对中括号“[]”,例如
[title]、a[href][title]
- 组选择器:如果要对多个元素定义同样的样式,则可以用组选择器来缩减重复代码。组选择器的语法关键字是一个“,”
- :nth-child(n):选择器中的n表示一个简单的表达式,它可以是大于等于0的整数,比如在基础样例中应用:
li:nth-child(2){
background-color:#333;
color:white;
}
//n取2,就是取某个父元素内第二个li元素,即需要同时满足两个条件:1.是不是第2个
//2.是不是li元素
- :nth-last-child(n):和nth-child(n)相反
- :nth-of-type(n):这个选择器和:nth-child(n)类似,区别在于,如果使用p:nth-child(3)这样的条件时,一旦第3个元素不为
元素,这个选择器就不起作用,而p:nth-of-type(3)则查询的是第3个<p>
元素。<p>
- :nth-last-of-type:和上一个相反
- :last-child:选择的是元素的最后一个子元素
- :first-of-type和:last-of-type::first-of-type相当于:nth-of-type(1),:last-of-type相当于:nth-last-of-type(1)
- :only-child:如果一个父元素只有一个子元素,那么选取这个子元素。如果加了限定条件,例如
则取交集,即如果一个父元素只有一个子元素,且这个子元素为p:only-child
,这个选择器才会生效。<p>
- :only-of-type:基本同:only-child,区别在于如果不指定type而直接使用:only-of-type的话会造成body被选中,而:only-child不会出现这种情况。
_
媒介查询
Media Type的类型汇总
设备 | 指代 |
---|---|
all | 匹配所有设备 |
braille | 匹配触觉反馈设备 |
embossed | 凸点字符印刷设备 |
handheld | 手持设备 |
打印机设备 | |
projection | 投影仪设备 |
screen | 彩色计算机显示器设备 |
speech | 语音合成器设备 |
tty | 栅格设备 |
tv | 电视设备 |
_
认识响应式网页设计
响应式网页设计就是一个网站能够兼容多个终端——而不是为每个终端做一个特定版本。
_
媒介查询的基本语法
可以将Media Query看成是添加了CSS属性判断的Media Type,其基本语法如下:
@media screen and(max-width:600px){
.class{
background:#ccc;
}
}