以下是自己平时学习累计的,比较杂,欢迎大家指正和补充
一、css重置(css reset)
这是我简单整理的,并不全,大家可以根据自己需要继续补充:
body,p,h1,h2,h3,h4,h5,h6,dl,dd{margin:0;font-size:12px;}
ol,ul{margin:0;padding:0;list-style:none;}
a{text-decoration:none;}
img{border:none;}
不用*{margin:0;padding:0;}是因为:div没有内外边距,p只有外边距问题没有内边距问题等等,性能问题也不好,大家可以自己写标签通过比如火狐的F12来看到元素的内外边距情况。
二、全屏遮罩
页面文档结构是:body<html<文档,body和html是没有高度的,如果需要情况下:设置为height:100%,这样body里面有内容高度为100%才能和文档高度一样,才能实现全屏遮罩
三、内嵌和块元素
内嵌元素:内容撑开宽度,不支持宽高,不支持margin和padding的上下边距,左右支持,代码换行被解析为空格(即并没有紧挨着在一排显示,而是每行显示一个那种情况)这种是被解析为一个空格的大小的间隙,是页面中文字大小的一半,比如body中设置为font-size为12px,则间隙为6像素
块属性标签:没有宽度时,默认撑满一排,支持宽高,支持所有css命令
img既不是内联也不是块,而是inline-block内联块元素
inline-block特性有:没有宽度的时候内容撑开宽度
ie6、ie7不支持块属性标签的inline-block(解决方案:用浮动)
块元素不设置宽,默认跟着父级的宽度走,如果父元素不设置高度而子元素设置高度,则子元素会撑开父元素高度
四:cursor属性
cursor:url(xxx.cur),pointer;意思是:可以jpg、gif、png等,但可能有兼容性问题,最好用.cur格式,pointer意思是如果前面图片出问题出不来了,则使用pointer,相当于是个备用
五、浮动
1、不设置宽度情况下还是由内容撑开宽度
2、设置为浮动后则脱离了文档流,同时对设置了浮动的元素设置vertical-align是没效果的,因为浮动元素默认就是顶部对齐并且是不可更改的,想要解决这种默认则通过设置上下边距
3、在IE6/7下,元素浮动要并在同一行的元素都要加浮动,不然元素会换行
4、IE6下的横向margin的双边距bug(横向margin:0 20px;),(ie6下,块属性标签,浮动,并且有横向margin,则横向margin加倍),解决方案:display:inline
六、定位
定位:
1、绝对定位和浮动一样,使元素脱离了文档流,如果没设置宽度,则使块属性标签内容撑开宽度;
2、绝对定位使得内嵌元素支持宽高;
3、定位元素默认后者比前者的层级高(堆叠层次,但始终不到1),如需改变则使用z-index
4、fixed定位不设置宽度的话,可以让块元素内容撑开宽度,与绝对定位基本一致,的差别是始终相对整个文档进行定位,IE6不支持固定定位,可以通过js一起解决
5、在IE6下,父级的overflow:hidden是包不住设置为position:relative的子级的(这是当子元素高度高于父元素情况下,在一般情况下,设置为relative是对元素本身没影响的),那么要解决这个问题就是给父级加定位属性(相对或绝对定位都行)
6、在IE6下,如果定位元素的父级的宽高是奇数的话,那么该定位元素的right和bottom都有1像素的偏差,未找到较好的解决方案,则避免父元素宽高为奇数
七、清除浮动
1、给父级也加浮动,但父级还要父级怎么办?一层层加?扩展性不好,会导致:页面中所有元素都加浮动,margin左右自动失效(floats bad !),结论:不适用,放弃!!
2、给浮动元素的父级加display:inline-block,结论:不好,margin:0 auto失效!
3、给浮动元素后面加个空div,height:0px,但是在IE6下有个最小高度19px,但并不是所有元素都有最小元素,为了解决此问题,加个font-size:0;,但是也不能解决IE6下还剩最小高度2px的问题,(样式为:加个空div,class为clear,样式为:clear:both;font-size:0;height:0;)解决方案请听下回分解
4、给浮动元素后面加<br clear="all"/>,这个属性还有left、right等值,br是没有高度的,在br里的clear属性跟用clear:both作用是一样的,在ie6/7下都起作用了也省事,是可以用方案,但是,但是,不符合w3c标准:结构、样式、行为分离(写了个br标签,改结构了)
5、after伪类并不会改变文档结构,content:"内容内容"是不会改变结构的(通过F12可以看到,文档结构里的“内容内容”这几个字并不存在,但却可以在页面上显示出来,能看见),比如样式:p:after{content:"内容",background:red;width:10px;height:10px;}那么背景色变为红色的地方只会是“内容”,即这个content里的东西,p里面的文字背景色不会变化,并且宽和高也是对content里的东西起作用,不会影响p元素,但是在IE6/7下只支持a标签的那个4个伪类,不支持after伪类,但是没关系,因为在IE6/7下浮动元素的父级有宽度就不用清浮动,那不支持after伪类也没关系,为啥父级有宽度就不用清浮动了呢?这是因为在ie中有个haslayout的东西(不知道就百度百科)默认为false,有了width就能触发为true(哪些能触发去百度),haslayout会根据元素内容的大小或者父级的大小来重新计算元素高度,那么如果父级不给width怎么办呢?这时候就用zoom:1(百度百科里提到zoom除了normal外的值能激发haslayout为true),zoom有放大、缩小效果,所以一般这样用:给浮动元素的父级.clear{zoom:1};.clear:after{conetent:"";display:block;clear:both;}(前者解决ie6/7下的清浮动,后者解决其他浏览器下的清浮动),现在都是推崇这种清浮动方法,推荐、推荐!!
6、overflow可以包含着浮动元素,所以overflow可以制造清浮动假象,是加给浮动元素的父级的,此方法也可用,但是在IE6下有问题:因为overflow没有把元素提升层级的功能,那么配合zoom:1使用,可以激发haslayout,此方法还是少用,可能会隐藏本来应该显示出来的内容,推荐用第5种方法。
注意:clear这个属性只能加给块元素,对于内嵌是不起作用的!!
八、vertical-align
默认图片下面会有几个像素的空隙,1、可通过display:block解决,但是如果想排在一行则就有局限性问题;2、使用vertical-align:top(其他值也行),此方法推荐!!!!
上面说到IE6下最小高度问题通过加font-size为0来解决,但是还是会剩最小高度2px问题,那么解决方案是加overflow:hidden解决
总结:
元素的宽度由内容撑开:
display:inline 这块是内嵌元素,但是内嵌没法支持宽高,就不说了
display:inline-block 能撑开没错,但是在IE6/7下不支持块标签
float
position:absolute 能撑开没问题,但是要给设置坐标,比较麻烦
position:fixed 不兼容,暂时不说了
css精灵优点:减少网页请求次数,提供页面性能,也是其最大的优点,其次是减小了图片大小,缺点:降低开发效率(因为需要去拼图),其次维护难度加大