• css hack


    什么是css hack?

    有些人不知道css hack是什么..........但是我想任何一个前端开发一定是遇到过的。

    我们现在有5大浏览器内核

    1. Trident  主要代表是IE浏览器                                                     -ms

    2. Gecko  主要代表是FF(FireFox)                                            -moz

    3. Webkit  主要代表是safari ,曾经的google也是                         -webkit

    4. Presto   主要代表是opera                                                         -o

    5. Blink    主要代表是现在的google

    不同的浏览器对应不同的内核,它们对css的解析是不一样的,这样就会导致在不同的浏览器中呈现出不一致的效果,为了获得统一(或者为了给不同的浏览添加不同效果),就需要针对不同的浏览器或者不同的版本写特定的css样式,这就叫css hack

    css hack解决方法

    1.  css属性前缀法   例如 IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",但不能识别下划线"_",IE6~IE10都认识"9",但firefox前述三个都不能认识。

    2.  css选择器前缀法     例如 IE6能识别*html .class{},IE7能识别*+html .class{}或者*:first-child+html .class{}。

    3. IE条件注释法   针对所有IE(注:IE10+已经不再支持条件注释): IE浏览器显示的内容 ,针对IE6及以下版本: 。这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。

    css属性前缀法

    IE浏览器各版本 CSS hack 对照表

    说明:在标准模式中

    • “-″减号是IE6专有的hack
    • “9″ IE6/IE7/IE8/IE9/IE10都生效
    • “″ IE8/IE9/IE10都生效,是IE8/9/10的hack
    • “9″ 只对IE9/IE10生效,是IE9/10的hack

     css3 hack

     这只是一部分,另外,随着css3的出现和使用,我们看到的更多的是-ms-,-moz-,-webkit-,-o-

     对于css3的属性,并不是每个浏览器都支持,所以我们在使用的时候都要加上对应的前缀

    但是在写大量css的时候是不是会很麻烦呢..........不用担心,现在的有很多插件帮助我们简化开发,提高效率

    这就是Atuoprefixer

    像 grunt  autoprefixer     ,你可以安装grunt-autoprefixer

    像 gulp  autoprefixer    ,  你可以安装gulp-autoprefixer

    像 sublime    ,  你可以安装sublime autoprefixer

    ................

    他们会自动检测需要css hack的属性,自动生成响应的css,十分方便

    css选择器前缀法

    *html *前缀只对IE6生效 *+html *+前缀只对IE7生效 @media screen9{...}只对IE6/7生效
    
    @media screen {body { background: red; }}只对IE8有效
    
    @media screen\,screen9{body { background: blue; }}只对IE6/7/8有效
    
    @media screen0 {body { background: green; }} 只对IE8/9/10有效
    
    @media screen and (min-00) {body { background: gray; }}只对IE9/10有效
    
    @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只对IE10有效
    @media screen and (-webkit-min-device-pixel-ratio:0){} 对webkit核心有效
    @-moz-document url-prefix(){} 对firefox浏览器有效
    @media all and(-webkit-min-device-pixel-ratio:10000),not and all(-webkit-min-device-pixel-ratio:0){} 对opera浏览器有效

    这里只是一小部分

    CSS3选择器结合JavaScript的Hack

    我们用IE10进行举例:

    由于IE10用户代理字符串(UserAgent)为:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0),所以我们可以使用javascript将此属性添加到文档标签中,再运用CSS3基本选择器匹配。

    JavaScript代码:

    	var htmlObj = document.documentElement;
    	htmlObj.setAttribute('data-useragent',navigator.userAgent);
    	htmlObj.setAttribute('data-platform', navigator.platform );
    

    CSS3匹配代码:

    html[data-useragent*='MSIE 10.0'] #id {
    	color: #F00;
    }


    各个浏览器都可以



    IE条件注释法

      这种方式是IE浏览器专有的Hack方式,微软官方推荐使用的hack方式。举例如下

    
    
      只在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]-->
    
    
     1 <!--[if IE]><p>You are using Internet Explorer.</p><![endif]-->
     2 <![if !IE]><p>You are not using Internet Explorer.</p><![endif]>
     3 
     4 <!--[if IE 7]><p>Welcome to Internet Explorer 7!</p><![endif]-->
     5 <!--[if !(IE 7)]><p>You are not using version 7.</p><![endif]-->
     6 
     7 <!--[if gte IE 7]><p>You are using IE 7 or greater.</p><![endif]-->
     8 <!--[if (IE 5)]><p>You are using IE 5 (any version).</p><![endif]-->
     9 <!--[if (gte IE 5.5)&(lt IE 7)]><p>You are using IE 5.5 or IE 6.</p><![endif]-->
    10 <!--[if lt IE 5.5]><p>Please upgrade your version of Internet Explorer.</p><![endif]-->
    11 
    12 <!--[if true]>You are using an <em>uplevel</em> browser.<![endif]-->
    13 <![if false]>You are using a <em>downlevel</em> browser.<![endif]>
    14 
    15 <!--[if true]><![if IE 7]><p>This nested comment is displayed in IE 7.</p><![endif]><![endif]-->


    适用范围广的,识别能力强的css一定要定义在前面


  • 相关阅读:
    map()和filter()函数讲解与示例
    通过假设巧妙的判断出参数的最大值和最小值
    通过函数定义数据结构list中的每个元素是一个元组,扑克牌示例
    FileCloud 的原理简述&自己搭建文件云
    opengl学习笔记
    Pascal的sin^-1函数实现
    OpenGL键盘交互响应事件
    OpenGL 鼠标交互响应事件
    重踏比尔盖茨走过的路——模拟操作系统
    Pascal代码自动格式化
  • 原文地址:https://www.cnblogs.com/jiangshichao/p/7612804.html
Copyright © 2020-2023  润新知