iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >CSS中Hack表现形式有几种
  • 909
分享到

CSS中Hack表现形式有几种

2024-04-02 19:04:59 909人浏览 薄情痞子
摘要

这篇文章主要介绍了CSS中Hack表现形式有几种,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是CSS hack由于不同厂商的流览器或某

这篇文章主要介绍了CSS中Hack表现形式有几种,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

什么是CSS hack

由于不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持、解析不一样,导致在不同浏览器的环境中呈现出不一致的页面展现效果。这时,我们为了获得统一的页面效果,就需要针对不同的浏览器或不同版本写特定的CSS样式,我们把这个针对不同的浏览器/不同版本写相应的CSS code的过程,叫做CSS hack!

CSS hack的原理

由于不同的浏览器和浏览器各版本对CSS的支持及解析结果不一样,以及CSS优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的CSS。

CSS hack分类

CSS Hack大致有3种表现形式,CSS属性前缀法、选择器前缀法以及IE条件注释法(即html头部引用if IE)Hack,实际项目中CSS Hack大部分是针对IE浏览器不同版本之间的表现差异而引入的。

  • 属性前缀法(即类内部Hack):例如 IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",但不能识别下划线"_",IE6~IE10都认识"\9",但firefox前述三个都不能认识。

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

  • IE条件注释法(即HTML条件注释Hack):针对所有IE(注:IE10+已经不再支持条件注释): <!--[if IE]>IE浏览器显示的内容 <![endif]-->,针对IE6及以下版本: <!--[if lt IE 6]>只在IE6-显示的内容 <![endif]-->。这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。

CSS hack书写顺序,一般是将适用范围广、被识别能力强的CSS定义在前面。

CSS hack方式一:条件注释法

这种方式是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]-->

CSS hack方式二:类内属性前缀法

属性前缀法是在CSS样式属性名前加上一些只有特定浏览器才能识别的hack前缀,以达到预期的页面展现效果。

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

CSS中Hack表现形式有几种

说明:在标准模式中

  • “-″减号是IE6专有的hack

  • “\9″ IE6/IE7/IE8/IE9/IE10都生效

  • “\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack

  • “\9\0″ 只对IE9/IE10生效,是IE9/10的hack

demo如下

<script type="text/javascript">
	//alert(document.compatMode);
</script>
<style type="text/css">
body:nth-of-type(1) .iehack{
	color: #F00;
}
.demo1,.demo2,.demo3,.demo4{
	width:100px;
	height:100px;
}
.hack{


	background-color:red; 
	background-color:blue !important;
	*background-color:black; 
	+background-color:yellow;
	background-color:gray\9; 
	background-color:purple\0; 
	background-color:orange\9\0;
	_background-color:green; 
	*+background-color:pink; 
}


.ie10 #hack{
	color:red; 
}


.iehack{

	background-color:orange;  
	background-color:red\0;  
	background-color:blue\9\0;  
	*background-color:black;  
	_background-color:green;  
}


.element {
	background-color:orange;	
}
.element {
	*background-color: blue;    
}
.element {
	_background-color: red;     
}
.element {
	background-color: green\0; 
}
:root .element { background-color:pink\0; }  



.hacktest{ 
	background-color:blue;      
	background-color:red\9;      
	background-color:yellow\0;    
	+background-color:pink;        
	_background-color:orange;       
}

@media screen and (min-width:0){ 
	.hacktest {background-color:black\0;}  
} 
@media screen and (min-width:0) { 
    .hacktest { background-color:purple\9; }
}
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { 
   .hacktest { background-color:green; } 
}
@media screen and (-WEBkit-min-device-pixel-ratio:0){ .hacktest {background-color:gray;} }  



</style>

demo1是测试不同IE浏览器下hack 的显示效果

IE6显示为:粉色,

IE7显示为:粉色,

IE8显示为:蓝色,

IE9显示为:蓝色,

Firefox/Chrome/Opera显示为:蓝色,

若去掉其中的!important属性定义,则IE6/7仍然是粉色,IE8是紫色,IE9/10为橙色,Firefox/Chrome变为红色,Opera是紫色。是不是有些奇怪:除了IE6以外,其他所有的表现都符合我们的期待。

那为何IE6表现的颜色不是_background-color:green;的绿色而是*+background-color:pink的粉色呢?其实是最后一句所谓的IE7私有hack惹的祸?不是说*+是IE7的专有hack吗???错,你可能太粗心了!我们常说的IE7专有*+hack的格式是*+html selector,而不是上面的直接在属性上加*+前缀。如果是为IE7定制特殊样式,应该这样使用:

*+html #ie7test { 
	color:green;
}

经过测试,我发现属性前缀*+background-color:pink;只有IE6和IE7认识。而*+html selector只有IE7认识。所以我们在使用时候一定要特别注意。

demo2实例是用于区分标准模式下ie6~ie9和Firefox/Chrome的hack,注意顺序

IE6显示为:绿色,

IE7显示为:黑色,

IE8显示为:红色,

IE9显示为:蓝色,

Firefox/Chrome显示为:橘色,

(本例IE10效果同IE9,Opera最新版效果同IE8)

demo3实例也是用于区分标准模式下ie6~ie9和Firefox/Chrome的hack,注意顺序

IE6显示为:红色,

IE7显示为:蓝色,

IE8显示为:绿色,

IE9显示为:粉色,

Firefox/Chrome显示为:橘色,

(本例IE10效果同IE9,Opera最新版效果也同IE9为粉色)

demo4实例是用于区分标准模式下ie6~ie10和Opera/Firefox/Chrome的hack,本例特别要注意顺序

IE6显示为:橘色,

IE7显示为:粉色,

IE8显示为:黄色,

IE9显示为:紫色,

IE10显示为:绿色,

Firefox显示为:蓝色,

Opera显示为:黑色,

Safari/Chrome显示为:灰色,

CSS中Hack表现形式有几种

CSS hack方式三:选择器前缀法

选择器前缀法是针对一些页面表现不一致或者需要特殊对待的浏览器,在CSS选择器前加上一些只有某些特定浏览器才能识别的前缀进行hack。

目前最常见的是

*html *前缀只对IE6生效
*+html *+前缀只对IE7生效
@media screen\9{...}只对IE6/7生效
@media \0screen {body { background: red; }}只对IE8有效
@media \0screen\,screen\9{body { background: blue; }}只对IE6/7/8有效
@media screen\0 {body { background: green; }} 只对IE8/9/10有效
@media screen and (min-width:0\0) {body { background: gray; }} 只对IE9/10有效
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只对IE10有效
等等

结合css3的一些选择器,如html:first-child,body:nth-of-type(1),衍生出更多的hack方式,具体的可以参考下表:

CSS中Hack表现形式有几种

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;
}

CSS hack利弊

一般情况下,我们尽量避免使用CSS hack,但是有些情况为了顾及用户体验实现向下兼容,不得已才使用hack。比如由于IE8及以下版本不支持CSS3,而我们的项目页面使用了大量CSS3新属性在IE9/Firefox/Chrome下正常渲染,这种情况下如果不使用css3pie或htc或条件注释等方法时,可能就得让IE8-的专属hack出马了。

使用hack虽然对页面表现的一致性有好处,但过多的滥用会造成html文档混乱不堪,增加管理和维护的负担。相信只要大家一起努力,少用、慎用hack,未来一定会促使浏览器厂商的标准越来越趋于统一,顺利过渡到标准浏览器的主流时代。

抛弃那些陈旧的IE hack,必将减轻我们编码的复杂度,少做无用功。

最后补上一张引自国外某大牛总结的CSS hack表,这时一张6年前的旧知识汇总表了,放在这里仅供需要时候方便参考。

CSS中Hack表现形式有几种

感谢你能够认真阅读完这篇文章,希望小编分享的“CSS中Hack表现形式有几种”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网JavaScript频道,更多相关知识等着你来学习!

--结束END--

本文标题: CSS中Hack表现形式有几种

本文链接: https://www.lsjlt.com/news/88047.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CSS中Hack表现形式有几种
    这篇文章主要介绍了CSS中Hack表现形式有几种,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是CSS hack由于不同厂商的流览器或某...
    99+
    2024-04-02
  • CSS的Hack表现形式有哪些
    这篇文章主要讲解了“CSS的Hack表现形式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS的Hack表现形式有哪些”吧!摘要: &nb...
    99+
    2024-04-02
  • html中空格的几种表现形式
    这篇文章主要介绍了html中空格的几种表现形式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。空格的表示形式:1、空格字符实体“&nbsp;”、“&ensp;”...
    99+
    2023-06-15
  • css有几种样式
    这篇文章主要为大家展示了“css有几种样式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css有几种样式”这篇文章吧。一。行内样式(很少使用) &nb...
    99+
    2024-04-02
  • VB.NET循环有几种形式
    这篇文章给大家分享的是有关VB.NET循环有几种形式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。VB.NET循环有三种形式:For/Next循环、While/End While循环、Do/Loop循环和For/...
    99+
    2023-06-17
  • css样式有哪几种
    CSS样式有以下几种:1. 内联样式(Inline Style):直接在HTML标签的style属性中定义样式,作用于单个元素,具有...
    99+
    2023-09-05
    css
  • java多态实现的形式有哪几种
    Java多态的实现形式主要有以下几种:1. 方法重写(Override):子类重写父类的方法,通过父类引用指向子类对象时,根据实际引...
    99+
    2023-09-27
    java
  • css样式表自动生效有哪几种
    css 样式表自动生效有五种方法:1. 直接内联样式;2. 内部样式表;3. 外部样式表;4. 属性选择器;5. javascript。 CSS 样式表自动生效的几种方法 CSS 样式...
    99+
    2024-04-25
    css 属性选择器
  • css样式表有几种,分别怎么使用
    css 样式表有三种类型:内联、内部和外部。内联样式适用于特定元素,内部样式适用于整个文档,外部样式可用于多个文档。使用 css,样式规则由选择器和声明块组成,选择器指定要应用样式的元素...
    99+
    2024-04-06
    css
  • css定位有几种方式
    这篇文章将为大家详细讲解有关css定位有几种方式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。css定位有:1、static,表示静态定位;2、relative,表示相对定位;3、absolute,表示绝...
    99+
    2023-06-14
  • css应用样式有几种
    css 应用样式的方法有:1. 行内样式 2. 嵌入样式 3. 外部样式表 4. css 预处理器 5. javascript CSS 应用样式 CSS(层叠样式表)提供了多种应用样式...
    99+
    2024-04-25
    css
  • css的书写格式有几种
    这篇文章主要为大家展示了“css的书写格式有几种”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css的书写格式有几种”这篇文章吧。css的书写格式一共有三种行内...
    99+
    2024-04-02
  • CSS position定位方式有几种
    有4种,分别是静态定位、相对定位、绝对定位和固定定位。好的,让我用一个有趣的比喻来解释CSS中position定位的不同方式。想象一下你是一位建筑师,而你的网页就是你的建筑项目。CSS的position属性就像是你在建筑项目中选择不同类型的...
    99+
    2023-11-23
    css position
  • css中元素定位有哪几种方式
    在css中,有四种主要元素定位方式:静态定位:元素按照文档流显示,不能偏移。相对定位:元素相对于父元素偏移。绝对定位:元素脱离文档流,相对于最近的已定位父元素或body元素定位。固定定位...
    99+
    2024-04-28
    css 绝对定位 相对定位 静态定位 固定定位
  • css应用样式有几种类型
    css 提供了五种应用样式的类型:行内样式、内部样式、外部样式、嵌入样式和用户代理样式。行内样式适用于单个元素,内部样式适用于文档中的所有元素,外部样式存储在单独的 .css 文件中,嵌...
    99+
    2024-04-25
    css
  • css属性书写方式有几种
    css 属性书写方式有多种,包括缩写、大小写、连接符或驼峰命名法,以及前缀。使用变量可存储和重用属性值,而不同的书写方式具有不同的优先级,其中内联样式优先级最高,重要性声明优先级最低。 ...
    99+
    2024-04-25
    css css属性
  • php中常用的表达式有哪几种
    php 中常用的表达式包括:算术表达式:用于数学运算比较表达式:比较两个值逻辑表达式:组合逻辑条件条件表达式:简化的 if-else 语句数组表达式:创建数组字符串表达式:创建字符串 ...
    99+
    2024-04-29
  • css中有几种选择器
    这篇文章给大家分享的是有关css中有几种选择器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。CSS的选择器有:1、类别选择器;2、标签选择器;3、ID选择器;4、后代选择器;5、子选择器;6、伪类选择器;7、通用...
    99+
    2023-06-14
  • Css在HTML文档里的三种表现形式是什么
    这篇文章主要介绍了Css在HTML文档里的三种表现形式是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Css在HTML文档里的三种表现形式是什么文章都会有所收获,下面我们一...
    99+
    2024-04-02
  • mysql表级锁的模式有几种
    本篇内容介绍了“mysql表级锁的模式有几种”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、表共享读锁,添加共享读锁的表不会阻塞其他ses...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作