【强烈推荐】说说CSS Hack 和向后兼容

前端之家收集整理的这篇文章主要介绍了【强烈推荐】说说CSS Hack 和向后兼容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

   人一旦习惯了某些东西就很难去改,以及各种各样的原因,新的浏览器越来越多,而老的总淘汰不了。增长总是快于消亡导致了浏览器兼容是成了谈不完的话题。说到浏览器兼容,CSS HACK自然而然地被我们想起。今天,我们通常都有一个团队或者将有一个团队的人在一个公司里面做相同的事,需要我们有统一的规范来进行Coding,以方便维护。而解决兼容的方法就是(必须是,因为这才最容易有问题的)其中一个最重要的、要解决的规范之一。

解决兼容方法上,想定出一个统一的规范,个人认为应该以下面3点为基本原则:

  1. 权衡成本:在浏览器被淘汰后,如何快速清理掉无用代码
  2. 可维护:在资源成本和完美间平衡的向后兼容
  3. 可读:省力、易记

这里把成本放在了第一位,并不是说我们不愿意追求完美,而只是,太刻意追求完美有时候可能会阻碍我们前进;在成本后,应该是可维护和可读,这点对于团队的合作来说至关重要,而最终结果也是为了减少成本。

先把这三个原则存起来,来看看我们平时解决兼容的写法(后面会附详细的Hack方法列表):

一、CSS 选择器 Hack

<div class="cnblogs_code">

这种写法的优缺点是:

  • 优点:全面,各种HACK都有;清理无用代码里易认
  • 缺点:选择器名称不易记;代码量多(要重复写选择器)

二、CSS 属性 Hack

<div class="cnblogs_code" onclick="cnblogs_code_show('3912b139-91c4-4cbe-94df-2091ac28b44c')">
<img style="display: none" id="code_img_closed_3912b139-91c4-4cbe-94df-2091ac28b44c" class="code_img_closed" alt="" src="https://www.jb51.cc/res/2019/02-07/12/1c53668bcee393edac0d7b3b3daff1ae.gif"&gt;<img id="code_img_opened_3912b139-91c4-4cbe-94df-2091ac28b44c" class="code_img_opened" onclick="cnblogs_code_hide('3912b139-91c4-4cbe-94df-2091ac28b44c',event)" src="https://www.jb51.cc/res/2019/02-07/12/405b18b4b6584ae338e0f6ecaf736533.gif"&gt;<span class="cnblogs_code_collapse">代码
<div id="cnblogs_code_open_3912b139-91c4-4cbe-94df-2091ac28b44c">

这种写法的优缺点是:

  • 优点:易记;代码
  • 缺点:不全面

三、IE 注释

<div class="cnblogs_code">

IE onlyNOT IE

这种写法的优缺点是:

  • 优点:安全;向后兼容好;易维护
  • 缺点:用不好会增加HTTP请求;用得好代码又多

四、浏览器探测:JS/后端程序判断

<div class="cnblogs_code">

加上class="ie6"  

这种写法的优缺点是:

上面4种是我们最常用的方法。现在,让我们抽出心里存着的那3个原则,看看如何选择。要时间思考一下么?这里简单地说一下我的选择:

  1. 尽量使用单独HACK

    这样维护起来成本比较低,改动不会影响其他的浏览器,而一旦有浏览器淘汰,只要搜索关键字,就可以批量去掉这些代码。比如,ie6的单独hack:

  2. 向后兼容的目标:1年

    你想现在的网站兼容IE10么,谁不想,但这可预见性太低了,也可以说,成本太高了。暂时没必要。不过,IE9可能要发布了,所以,选择像这样的IE8+的hack,在删掉其他代码不影响向后兼容上,会更好;并且,如果IE10出来,一旦支持这个hack,而又没有这个bug,可能删掉只影响2个浏览器,也会更方便;

  3. 尽可能省资源

    你要是不考虑页面加载速度,不考虑服务器承受能力的话,那在向后兼容和淘汰的处理上可以做得很完美(从代码上),但这从某种程度上,不如不做。

五、个人推荐写法

其实可以纠结的还真多,这里结合A-Grade浏览器的种类和HACK的种类,写两种个人认为比较合理的HACK和向后兼容相兼顾的写法,仅供大家参考的。

经济实惠型写法:注重单独的HACK。 IE的HACK比较多,选择省力易记的属性HACK;其他浏览器HACK少,选择块状的选择器HACK(推荐)

<div class="cnblogs_code" onclick="cnblogs_code_show('f6bed689-3315-47df-8248-d78beab33a8f')">
<img style="display: none" id="code_img_closed_f6bed689-3315-47df-8248-d78beab33a8f" class="code_img_closed" alt="" src="https://www.jb51.cc/res/2019/02-07/12/1c53668bcee393edac0d7b3b3daff1ae.gif"&gt;<img id="code_img_opened_f6bed689-3315-47df-8248-d78beab33a8f" class="code_img_opened" onclick="cnblogs_code_hide('f6bed689-3315-47df-8248-d78beab33a8f',event)" src="https://www.jb51.cc/res/2019/02-07/12/405b18b4b6584ae338e0f6ecaf736533.gif"&gt;<span class="cnblogs_code_collapse">代码
<div id="cnblogs_code_open_f6bed689-3315-47df-8248-d78beab33a8f">

准完美主义写法:配合IE注释,一律采用选择器HACK(选择性推荐)

<div class="cnblogs_code" onclick="cnblogs_code_show('64fdad57-e193-4844-8435-ea901ce6b494')">
<img style="display: none" id="code_img_closed_64fdad57-e193-4844-8435-ea901ce6b494" class="code_img_closed" alt="" src="https://www.jb51.cc/res/2019/02-07/12/1c53668bcee393edac0d7b3b3daff1ae.gif"&gt;<img id="code_img_opened_64fdad57-e193-4844-8435-ea901ce6b494" class="code_img_opened" onclick="cnblogs_code_hide('64fdad57-e193-4844-8435-ea901ce6b494',event)" src="https://www.jb51.cc/res/2019/02-07/12/405b18b4b6584ae338e0f6ecaf736533.gif"&gt;<span class="cnblogs_code_collapse">代码
<div id="cnblogs_code_open_64fdad57-e193-4844-8435-ea901ce6b494">

添加body class  

<div class="cnblogs_code" onclick="cnblogs_code_show('0a3cc80f-9917-4df2-93b8-035f62e62c79')">
<img style="display: none" id="code_img_closed_0a3cc80f-9917-4df2-93b8-035f62e62c79" class="code_img_closed" alt="" src="https://www.jb51.cc/res/2019/02-07/12/1c53668bcee393edac0d7b3b3daff1ae.gif"&gt;<img id="code_img_opened_0a3cc80f-9917-4df2-93b8-035f62e62c79" class="code_img_opened" onclick="cnblogs_code_hide('0a3cc80f-9917-4df2-93b8-035f62e62c79',event)" src="https://www.jb51.cc/res/2019/02-07/12/405b18b4b6584ae338e0f6ecaf736533.gif"&gt;<span class="cnblogs_code_collapse">代码
<div id="cnblogs_code_open_0a3cc80f-9917-4df2-93b8-035f62e62c79">

然后,从第二种方式我们也可以发现。把IE注释用在body class上,而不是添加单独的或者会是更好的选择。虽然分文件也是一种不错的选择,但了为页面加载速度,HTTP请求一个都不能浪费。

至于利用JS或者后端程序来判断,除非你有足够的资源,除非你解决不了(90%不会发生),不然,并不推荐用。附上一个表(),可以参考参考:

六:全面的IE6+ / Firefox / Webkit / Opera CSS HACK列表:

<div class="cnblogs_code" onclick="cnblogs_code_show('ecff4882-9b0c-4e69-ad93-73e8c9e0e161')">
<img style="display: none" id="code_img_closed_ecff4882-9b0c-4e69-ad93-73e8c9e0e161" class="code_img_closed" alt="" src="https://www.jb51.cc/res/2019/02-07/12/1c53668bcee393edac0d7b3b3daff1ae.gif"&gt;<img id="code_img_opened_ecff4882-9b0c-4e69-ad93-73e8c9e0e161" class="code_img_opened" onclick="cnblogs_code_hide('ecff4882-9b0c-4e69-ad93-73e8c9e0e161',event)" src="https://www.jb51.cc/res/2019/02-07/12/405b18b4b6584ae338e0f6ecaf736533.gif"&gt;<span class="cnblogs_code_collapse">代码
<div id="cnblogs_code_open_ecff4882-9b0c-4e69-ad93-73e8c9e0e161">

*/ 

 

 

  body #tres 

 

 

 

 #quince 

 

 

 

其他的就不多说了。不过,还是要提醒一下: 注释也是很重要的。虽然是HACK了,但现实中情况有时候比想象中的复杂得多,给代码一个注释,好过千言万语。

最后,还是那句,希望看到你更好的方法

转自:

原文链接:https://www.f2er.com/css/70632.html

猜你在找的CSS相关文章