CSS hack
  • 分类:CSS属性前缀法、选择器前缀法以及IE条件注释法
    1.属性前缀法(即类内部Hack):例如 IE6能识别下划线""和星号" * ",IE7能识别星号" * ",但不能识别下划线"",IE6~IE10都认识"\9",但firefox前述三个都不能认识。
    2.选择器前缀法(即选择器Hack):例如 IE6能识别html .class{},IE7能识别+html .class{}或者*:first-child+html .class{}。
    3.IE条件注释法(即HTML条件注释Hack):针对所有IE(注:IE10+已经不再支持条件注释): ,针对IE6及以下版本:。这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
  • 属性前缀法:
  1. “-″减号是IE6专有的hack
  2. \\9 IE6/IE7/IE8/IE9/IE10都生效
  3. \\0 IE8/IE9/IE10都生效,是IE8/9/10hack
  4. \\9\\0 只对IE9/IE10生效,是IE9/10hack
  • 选择器前缀法:
  1. *html *前缀只对IE6生效
  2. *+html *+前缀只对IE7生效
  3. @media screen\\9{...}只对IE6/7生效
  4. @media \\0screen {body { background: red; }}只对IE8有效
  5. @media \\0screen\\,screen\\9{body { background: blue; }}只对IE6/7/8有效
  6. @media screen\\0 {body { background: green; }} 只对IE8/9/10有效
  7. @media screen and (min-width:0\\0) {body { background: gray; }} 只对IE9/10有效
  8. @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只对IE10有效
  • 条件注释法:
    这种方式是IE浏览器专有的Hack方式,微软官方推荐使用的hack方式。举例如下
  1. 只在IE下生效
  2. <!--[if IE]>
  3. 这段文字只在IE浏览器显示
  4. <![endif]-->
  5. 只在IE6下生效
  6. <!--[if IE 6]>
  7. 这段文字只在IE6浏览器显示
  8. <![endif]-->
  9. 只在IE6以上版本生效
  10. <!--[if gte IE 6]>
  11. 这段文字只在IE6以上(包括)版本IE浏览器显示
  12. <![endif]-->
  13. 只在IE8上不生效
  14. <!--[if ! IE 8]>
  15. 这段文字在非IE8浏览器显示
  16. <![endif]-->
  17. IE浏览器生效
  18. <!--[if !IE]>
  19. 这段文字只在非IE浏览器显示
  20. <![endif]-->
CSS 优化
  • 避免过度约束
    一条普遍规则
  1. // 糟糕
  2. ul#someid {..}
  3. .menu#otherid{..}
  4. // 好的
  5. #someid {..}
  6. #otherid {..},不要添加不必要的约束。
  • 后代选择符最烂
    不仅性能低下而且代码很脆弱,html代码和css代码严重耦合,html代码结构发生变化时,CSS也得修改,这是多么糟糕,特别是在大公司里,写html和css的往往不是同一个人。
  1. // 烂透了
  2. html div tr td {..}
  • 避免链式(交集)选择符
    这和过度约束的情况类似,更明智的做法是简单的创建一个新的CSS类选择符。
  1. // 糟糕
  2. .menu.left.icon {..}
  3. // 好的
  4. .menu-left-icon {..}
  • 使用复合(紧凑)语法
    尽可能使用复合语法。
  1. // 糟糕
  2. .someclass {
  3. padding-top: 20px;
  4. padding-bottom: 20px;
  5. padding-left: 10px;
  6. padding-right: 10px;
  7. background: #000;
  8. background-image: url(../imgs/carrot.png);
  9. background-position: bottom;
  10. background-repeat: repeat-x;
  11. }
  12. // 好的
  13. .someclass {
  14. padding: 20px 10px 20px 10px;
  15. background: #000 url(../imgs/carrot.png) repeat-x bottom;
  16. }
  • 避免不必要的命名空间
  1. // 糟糕
  2. .someclass table tr.otherclass td.somerule {..}
  3. //好的
  4. .someclass .otherclass td.somerule {..}
  • 避免不必要的重复
    尽可能组合重复的规则。
  1. // 糟糕
  2. .someclass {
  3. color: red;
  4. background: blue;
  5. font-size: 15px;
  6. }
  7. .otherclass {
  8. color: red;
  9. background: blue;
  10. font-size: 15px;
  11. }
  12. // 好的
  13. .someclass, .otherclass {
  14. color: red;
  15. background: blue;
  16. font-size: 15px;
  17. }
  • 尽可能精简规则
    在上面规则的基础上,你可以进一步合并不同类里的重复的规则。
  1. // 糟糕
  2. .someclass {
  3. color: red;
  4. background: blue;
  5. height: 150px;
  6. width: 150px;
  7. font-size: 16px;
  8. }
  9. .otherclass {
  10. color: red;
  11. background: blue;
  12. height: 150px;
  13. width: 150px;
  14. font-size: 8px;
  15. }
  16. // 好的
  17. .someclass, .otherclass {
  18. color: red;
  19. background: blue;
  20. height: 150px;
  21. width: 150px;
  22. }
  23. .someclass {
  24. font-size: 16px;
  25. }
  26. .otherclass {
  27. font-size: 8px;
  28. }
  • 避免不明确的命名约定
    最好使用表示语义的名字。一个好的CSS类名应描述它是什么而不是它像什么。
  • 避免 !importants
    其实你应该也可以使用其他优质的选择器。
  • 遵循一个标准的声明顺序
  1. .someclass {
  2. /* Positioning */
  3. /* Display & Box Model */
  4. /* Background and typography styles */
  5. /* Transitions */
  6. /* Other */
  7. }
  • 组织好的代码格式
    减少空格和回车位空间
  1. //糟糕的
  2. .yangshi{
  3. font-size:12px;
  4. border:1px solid #000000;
  5. padding:5px;
  6. }
  7. .yangshi2{
  8. font-size:12px;
  9. border:1px solid #000000;
  10. padding:5px;
  11. }
  12. //好的
  13. .yangshi{ font-size:12px;border:1px solid #000000;padding:5px;}
  14. .yangshi2{ font-size:12px;border:1px solid #000000;padding:5px;}

css hack 用法注意的更多相关文章

  1. 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结

    史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...

  2. CSS选择器、CSS hack及CSS执行效率

    主要内容: 1.CSS选择器.优先级与匹配原理 2. CSS 引入的方式有哪些 ? link 和 @import 的区别是 ? 3.CSS hack 4.如何书高效CSS  一.CSS选择器.优先级与 ...

  3. CSS技巧(二):CSS hack

    什么是CSS hack CSS hack由于不同的浏览器,比如IE6,IE7,Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果. 这个时候我们就需 ...

  4. 常见浏览器兼容问题、盒模型2种模式以及css hack知识讲解

    什么是浏览器兼容问题?所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们 ...

  5. CSS hack样式兼容模式收藏

    part1 —— 浏览器测试仪器,测试您现在使用的浏览器类型 IE6   IE7   IE8   Firefox   Opera   Safari (Chrome)   IE6   IE7   IE8 ...

  6. 刚更新的css hack技巧

    一 一般Hack 1概念: 不同的浏览器对CSS的解析效果不同,为了达到相同的效果,就得根据不同浏览器写不同的css 2规则: CSS Hack大致有3种表现形式,CSS类内部Hack.选择器Hack ...

  7. 网页重构应该避免的10大 CSS 糟糕用法

    对于网页重构来说,CSS禅意花园 是网页布局从 table 表格转到了 html +css 的标志 .这些年来,随着我们的网站越来越复杂:html5,css3,新的技术.新的属性,越来越多的开发者开始 ...

  8. 史上最全 Css Hack汇总

    前言 每次要找个东西都得慢慢去翻自己收集的一些东西,每次都是那么花时间,再加上有时存放时间久远就忘了当时是存在哪了,为了方便查询及阅读,决定把一些Css Hack 收集起来... 1.区别不同浏览器, ...

  9. 怎么用css hack处理各浏览器兼容IE6,IE7,IE8,IE9/ FF

    第一:什么事浏览器兼容性 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题,指网页在各种浏览器上的显示效果可能不一致而产生浏览器和网页间的兼容问题.在网站的设计和制作中,做好浏览器兼容,才能够让网站 ...

随机推荐

  1. php统计中英文混合的文章字数

    function ccStrLen($str) #计算中英文混合字符串的长度 { $ccLen=0; $ascLen=strlen($str); $ind=0; $hasCC=ereg("[ ...

  2. delphi absolute 应用实例

    procedure TForm1.Button1Click(Sender: TObject); var i1,i2:Integer; b:..] of Byte absolute i1; // b 在 ...

  3. 关于opcdaauto.dll的注册

    关于opcdaauto.dll的注册 无论win7_32还是win7_64位都执行一样的CMD命令,即regsvr32 opcdaauto.dll . 如果从网上下载的opcdaauto.dll 文件 ...

  4. InfluxDB 常用命令

    查表: http://192.168.0.200:8086/query?q=select+*+from+telegraf..cpu http://192.168.0.200:8086/query?q= ...

  5. InfluxDB学习之InfluxDB的基本操作| Linux大学

    来源地址:https://www.linuxdaxue.com/influxdb-study-series-manual.html 本文属于<InfluxDB系列教程>文章系列,该系列共包 ...

  6. DataGridView之编码列重绘

    实现方式如下: private void dgvRelation_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { ...

  7. win10和ubuntu16.04双系统时间同步

    在win10安装了ubuntu双系统,发现在两个系统见时间相差8个小时,这是由于windows和和ubuntu对于从主板取得时间后的处理方式不同,如果你把位置设为上海,ubuntu总是把主板时间当作u ...

  8. C++11--时钟和计时器<chrono>

    /* 介绍<chrono> -- 一个精确中立的时间和日期库 * 时钟: * * std::chrono::system_clock: 依据系统的当前时间 (不稳定) * std::chr ...

  9. Android Studio 小技巧

    请参照http://blog.csdn.net/jdsjlzx/article/details/50689047 个人认为较有用: 30

  10. apk重签名方法

    转载(http://www.51testing.com/?uid-115892-action-viewspace-itemid-223023) 1.      生成Android APK包签名证书 1 ...