CSS初学感觉很简单,但随着学习的深入才感觉CSS的水由多深,平常总会遇到各种坑,先总结一些经常遇到的坑
虽然我们平时在写CSS的时候都是用小写,但其实CSS并不是大小写敏感的
.test{    background-COLOR:#a00;    width:100px;    height: 100px;}
虽然把background-color写为了background-COLOR,但仍然会生效,之所以写成小写是因为xhtml标准的关系,但是即使不是xhtml还是写成小写比较好,美观、易读而且可以应对可能的转换需求
当两个规则都作用到了同一个html元素上时,如果定义的属性有冲突,那么应该用谁的值的,CSS有一套优先级的定义。
不同级别
同一级别
同一级别中后写的会覆盖先写的样式
上面的级别还是很容易看懂的,但是有时候有些规则是多个级别的组合,像这样
<!doctype html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title>    <style type="text/css">        div.test{            background-COLOR:#a00;            width:100px;            height: 100px;        }        .test.test2{            background-COLOR:#0e0;            width:100px;            height: 100px;        }    </style></head><body>    <div class="test test2"></div></body></html>到底div是应用那条规则呢,有个简单的计算方法(经园友提示,权值实际并不是按十进制,用数字表示只是说明思想,一万个class也不如一个id权值高)
我们可以把选择器中规则对应做加法,比较权值,如果权值相同那就后面的覆盖前面的了,div.class的权值是1+10=11,而.test1 .test2的权值是10+10=20,所以div会应用.test1 .test2变成绿色

并不是所有的属性对行内元素都能够生效
<div style="background-color: #a44;"> <span style="padding:4px; margin:8px; height: 500px; width:1000px; background-color:#0e0;">123456789123456789</span> </div> <div style="background-color: #a44;"> <span style="padding:4px; margin:8px; height: 500px; width:1000px; background-color:#0a0;">123456789</span> </div>

通过例子可以看出,我们对span设置的width和height属性并没有生效,margin-top和margin-bottom无效,padding-top和padding-bottom会改变元素范围(背景区域变大了),但并没有影响下面元素位置
我们在写字体的尺寸的时候常用的单位有
这些字体分别有什么含义?
我们知道:checked会选择被选中的checkbox和radio,看个例子
<!doctype html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title>    <style type="text/css">        :checked{            margin: 10px;        }    </style></head><body>    <input id="t1" type="checkbox" checked/>    <input id="t3" type="radio" checked/>    <select>        <option id="t2">test</option>        <option id="t4">test2</option>    </select></body></html>
对于前两个margin变成10px我们不奇怪,但是当我们看select的option的时候会发现被选中的option的margin业变成了10px,没有被选中的option则没有变化!

是的:checked也会选择被选中的option
我们知道写在页面上的img标签,无论显示与否,图片都会被加载(所以试图通过对图片display:none来达到节省网络流量的做法就省省吧。。。),我们也经常使用backgroung-image等css属性为页面添加图片,这些图片是不是一定会被加载呢,看个例子
<!doctype html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title>    <style type="text/css">        .useless{            background-image: url(images/0.jpg);        }        .hidden{            background-image: url(images/1.jpg);        }        .none{            background-image: url(images/2.jpg);        }        .parentHidden{            background-image: url(images/3.jpg);        }        .parentNone{            background-image: url(images/4.jpg);        }    </style></head><body>    <div class="hidden"></div>    <div class="none"></div>    <div style="visibility:hidden;">        <div class="parentHidden"></div>    </div>    <div style="display:none;">        <div class="parentNone"></div>    </div>        <div style="display:none">        <img src="images/5.jpg"></div></body></html>看一下网络监视情况(怎么柳岩的照片变小后感觉怪怪的。。。)

我们可以发现图片0和4没有被下载,0是没有用到的CSS,4是父容器的display被设为none的情况,这两种情况下的CSS引用的图片是不会被加载的,而父容器设置visibility属性为hidden仍然会加载图片,不要搞混了
新闻热点
疑难解答