在这里总结一下css布局时常见的浏览器兼容性问题
IE6的盒模型和W3C标准的盒模型不同
W3C中的盒模型所定义的宽度和高度为内容区域的宽度和高度 但是盒模型的总大小为margin+border+padding+width
IE的盒模型所定义的宽度和高度为盒模型的总宽度和总高度,width=margin+border+padding+content-width
css3中box-sizing定义了盒模型的类型,其有两个值:centent-box(W3C)和border-box(IE6)
另外,W3C盒模型中div的背景颜色充满了padding和border区域,border透明时,可发现背景颜色就是div的bgcolor(包括border的部分).(ie6不支持透明transparent)
IE盒模型中的div背景颜色包括padding和border区域
IE格式下的文本框
chrome格式下的文本框
我们可以发现IE格式下的文本框多了个叉叉,如果想删除该叉叉,可以使用input的伪元素
input::-ms-value {
padding: 4px;
}
input::-ms-clear{
display: none;
}
当input的类型为password时,ie和其他浏览器的显示方式不同,ie的表现形式如下
其他浏览器的表现形式如同文本框的正常行驶。我们可以发现ie浏览的密码文本框中出现了“眼睛”,如果想删除该眼睛,可以使用伪元素
input::-ms-reveal { display: none; }
当input中的type值为file时,各浏览器的表现形式不同
如果想使各浏览器下的表现形式相同,需要对该input元素隐藏,然后再改元素下方添加标签。其html写法如下
css布局如下
.input-file{
display: inline-block;
height:50px;
width: 120px;
/*background-color: #56F06F;*/
text-align: center;
cursor: pointer;
position:relative;
}
.file-button{
opacity: 0;
position: absolute;
left:0;
top:0;
width:120px;
height: 50px;
}
.file-button-img{
line-height: 50px;
text-align: center;
display: inline-block;
margin-top: 5px;
color:#fff;
font-size: 18px;
width:100%;
height:100%;
display: block;
cursor:pointer;
background-color: #3EF5B1;
}
现在我就简要说说我对CSS兼容问题的认识: 先说点Hack的知识
/* CSS属性级Hack */ color:red; /* 所有浏览器可识别*/ _color:red; /* 仅IE6 识别 */ *color:red; /* IE6、IE7 识别 */ +color:red; /* IE6、IE7 识别 */ *+color:red; /* IE6、IE7 识别 */ [color:red; /* IE6、IE7 识别 */ color:red\9; /* IE6、IE7、IE8、IE9 识别 */ color:red\0; /* IE8、IE9 识别*/ color:red\9\0; /* 仅IE9识别 */ color:red \0; /* 仅IE9识别 */ color:red!important; /* IE6 不识别!important 有危险*/ /* CSS选择符级Hack */ *html #demo { color:red;} /* 仅IE6 识别 */ *+html #demo { color:red;} /* 仅IE7 识别 */ body:nth-of-type(1) #demo { color:red;} /* IE9+、FF3.5+、Chrome、Safari、Opera 可以识别 */ head:first-child+body #demo { color:red; } /* IE7+、FF、Chrome、Safari、Opera 可以识别 */ :root #demo { color:red\9; } : /* 仅IE9识别 */ /* IE条件注释Hack */
接下来说说一些我知道的BUG:
IE 不认得min-这个定义,但实际上它把正常的width和height当作有min的情况来使。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。 比如要设置背景图片,这个宽度是比较重要的。要解决这个问题,可以这样:
#box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}
#box{min-height:200px; height:auto !important; height:200px; overflow:visible;}
问题:
隐藏浏览器的滚动条
解决:
1) 只有ie7支持
2) 除ie7不支持body{overflow:hidden}
3) 所有浏览器body{overflow:hidden}
问题:
不能在输入框中输入汉字
解决:
用ime-mode:disabled,只在ie系列和ff中有效,谷歌中,此属性的设置失效,只能通过js控制输入
问题:
不能将内容复制到输入框中
解决:
οnpaste="return false",浏览器通用
问题:
li中内容超过长度时,想以省略号显示,此方法适用于ie7、8、9、10,谷歌,ff浏览器
解决:
li{list-style-type:none;
width:200px;
white-space:nowrap;
text-overflow:ellipsis;
overflow: hidden;
}
参考文献:http://www.cnblogs.com/yexiaochai/archive/2013/04/21/3033725.html
http://blog.csdn.net/dandanzmc/article/details/17682145
删除html中的空白:不要让元素之间换行,这可能比较蛋疼,但也是一种方法,特别是你元素不多的时候。
使用负边距:你可以用负边距来补齐空白。但你需要调整font-size,因为空白的宽度与这个属性有关系。我认为是0.25em,但我不确定。如果有人知道可以留言告诉我。
给父元素设置font-size:0:不管空白多大,由于空白跟font-size的关系,设置这个属性即可把空白的宽度设置为0.在实际使用的时候,你还需要给子元素重新设置font-size。
设置小于12px的字体
span{
vertical-align: middle;
display: inline-block;
-webkit-transform: scale(0.8);
border:1px solid red;
}
div{width: 500px;
height:500px;
border: 1px solid black;
font-size: 10px}