zoukankan      html  css  js  c++  java
  • CSS学习笔记---兼容性CSS hack

    CSS hack由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS的解析认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。 这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。
    简单的说,CSS hack的目的就是使你的CSS代码兼容不同的浏览器。当然,我们也可以反过来利用CSS hack为不同版本的浏览器定制编写不同的CSS效果。
    由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。
    CSS Hack大致有3种表现形式,CSS类内部Hack、选择器Hack以及HTML头部引用(if IE)Hack,CSS Hack主要针对类内部Hack:比如 IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",但不能识别下划线"_",而firefox两个都不能认识。等等
    选择器Hack:比如 IE6能识别*html .class{},IE7能识别*+html .class{}或者*:first-child+html .class{}。等等
    HTML[1] 头部引用(if IE)Hack:针对所有IE:<!--[if IE]><!--您的代码--><![endif]-->,针对IE6及以下版本:<!--[if lt IE 7]><!--您的代码--><![endif]-->,这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
    常用的CSS hack方式

    (1)方式一 条件注释法
    只在IE下生效
    <!--[if IE]>
    这段文字只在IE浏览器显示
    <![endif]-->
    只在IE6下生效
    <!--[if IE 6]>
    这段文字只在IE6浏览器显示
    <![endif]-->
    只在IE6以上版本生效
    <!--[if gte IE 6]>
    这段文字只在IE6以上(包括)版本IE浏览器显示
    <![endif]-->
    只在IE8上不生效
    <!--[if ! IE 8]>
    这段文字在非IE8浏览器显示
    <![endif]-->
    非IE浏览器生效
    <!--[if !IE]>
    这段文字只在非IE浏览器显示
    <![endif]-->
    (2)方式二 类内属性前缀法
    属性前缀法是在CSS样式属性名前加上一些只有特定浏览器才能识别的hack前缀,以达到预期的页面展现效果。
    说明:在标准模式中
    “-″减号是IE6专有的hack
    “9″ IE6/IE7/IE8/IE9/IE10都生效
    “″ IE8/IE9/IE10都生效,是IE8/9/10的hack
    “9″ 只对IE9/IE10生效,是IE9/10的hack
    (3)CSS hack方式三:选择器前缀法
    选择器前缀法是针对一些页面表现不一致或者需要特殊对待的浏览器,在CSS选择器前加上一些只有某些特定浏览器才能识别的前缀进行hack。
    目前最常见的是
    *html *前缀只对IE6生效*+html *+前缀只对IE7生效@media screen9{...}只对IE6/7生效@media screen {body { background: red; }}只对IE8有效@media screen\,screen9{body { background: blue; }}只对IE6/7/8有效@media screen {body { background: green; }} 只对IE8/9/10有效@media screen and (min-0) {body { background: gray; }} 只对IE9/10有效@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只对IE10有效等等
    比如要分辨IE6和firefox两种浏览器,可以这样写:
    div{
    background:green;/*forfirefox*/
    *background:red;/*forIE6*/(bothIE6&&IE7)
    }
    我在IE6中看到是红色的,在firefox中看到是绿色的。
    解释一下:
    上面的css在firefox中,它是认识不了后面的那个带星号的东西是什么的,于是将它过滤掉,不予理睬,解析得到的结果是:div{background:green},于是理所当然这个div的背景是绿色的。
    在IE6中呢,它两个background都能识别出来,它解析得到的结果是:div{background:green;*background:red;},于是根据优先级别,处在后面的red的优先级高,于是当然这个div的背景颜色就是红色的了。
    CSS hack:区分IE6,IE7,firefox
    区别不同浏览器,CSS hack写法:
    区别IE6与FF:
    background:orange;*background:blue;
    区别IE6与IE7:
    background:green!important;background:blue;
    区别IE7与FF:
    background:orange;*background:green;
    区别FF,IE7,IE6:
    background:orange;*background:green;_background:blue;
    background:orange;*background:green!important;*background:blue;

  • 相关阅读:
    Anaconda的安装和更新
    Python数据分析学习目录
    国标28181sip开源库介绍(陆续补充完备)
    开源sip server & sip client 和开发库 一览
    几种开源SIP协议栈对比
    用TCP穿透NAT(TCP打洞)的实现
    使用TCP协议的NAT穿透技术
    TCP点对点穿透探索--失败
    snmp++开发实例一
    socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少
  • 原文地址:https://www.cnblogs.com/canceler/p/4450194.html
Copyright © 2011-2022 走看看