是否值得为IE或某些其他旧版本指定某些属性? [向后兼容]

时间:2019-03-05 05:18:59

标签: css css3 browser backwards-compatibility

我已经使用-webkit-moz好几次了,直到这让我震惊。

除了基于浏览器定义特定的属性以及不受广泛支持的某些属性(例如break-inside)之外,

不会

  

border-radius:5px;

缩短

  

-moz-border-radius:5px;
   -webkit-border-radius:5px;
  border-radius:5px;

还有许多其他功能已经标准化,但是仍有几个示例使用了供应商前缀,这样做的目的是什么?

前者受最新浏览器的支持,但是我们不能假设几乎每个人都在使用最新的浏览器(尤其不是某些规则适用的旧版IE)吗? (即使人们不更新他们的浏览器,考虑到没有人从胸口拿起一部诺基亚旧手机并开始浏览,他们也会留下几个版本)

我们为什么要使用它们?为什么我们要指定较旧的IE特定规则或仅指定较旧的浏览器规则?

跳入旧版本多少就足够了? IE8?

3 个答案:

答案 0 :(得分:4)

嗯...这是一个非常大的话题,因此很难一一回答,但是您应该/可以遵循一些最佳做法。

首先-一切都基于您的特定受众。查看您的分析并查看正在使用的浏览器。这些数据可能会让您感到惊讶,特别是如果您拥有美国卫生保健或政府用户。诸如Stylelint之类的工具将帮助您在CSS中找到不受支持的规则。

下一步,利用功能检测,而不是针对特定的浏览器,这是最佳做法。您可以通过在像media query这样的条件代码中使用@supports来实现这一点。这样,只有在浏览器可以使用您的代码的情况下,才会应用您的代码。您可以使用Modernizr在javascript中进行类似的检测。

最后,我个人推荐使用CSS后处理器或构建脚本,这样您就不必再担心前缀问题了(而且它将通过可选插件来加快开发速度)。我倾向于喜欢PostCSSPrefixfree的组合(其中包括一些Webpack自定义项),但是有许多类似的选项。

主要优点是该库可以跟踪需要前缀和不需要前缀的内容,因此您可以编写非前缀版本,其余部分都将得到处理。


没有硬性规定,但是您应该尝试支持用户的设备,而不是推动升级。上述做法的好处是,您的结果代码将更易于维护,面向未来并针对用户

答案 1 :(得分:4)

这是我的想法-在进行详细介绍之前,我不得不说我在支持浏览器方面实在是个怪胎。

直到几年前,我一直在尝试从IE8及更高版本获得支持。这种逻辑背后的原因是,那些被Windows XP和IE8所“困住”的人是Windows XP支持的最新版本。被困,我的意思是,它们是像政府电脑这样的案例,升级成本太高。

在Windows 7足够成熟并且Windows XP使用率下降之后,我尝试支持IE9及更高版本。从本质上讲,这意味着即使在有用的属性(例如flexbox)问世之后,我也花了很长时间才能迁移-因此,我正在使用表构建布局以获取最佳的浏览器支持,等等。

但是,Javascript框架开始放弃对较旧浏览器(包括IE9)的支持,然后CSS框架开始放弃支持。如果您考虑了一会儿,MS本身早就放弃了支持。大型移动公司放弃了对其2年期设备的支持,那么为什么我们应该支持较旧的浏览器?如其他答案中所述,这取决于听众-假设您最好的客户公司的首席执行官拥有一台装有Windows XP或其他过时设备的笔记本电脑-其他人是否使用现代浏览器也没关系。

因此,回溯到几年前,您必须选择跟随潮流,还是选择现代化或支持较旧的设备。我为内容的一致性和统一性而竭尽全力,因此,对某些精选的浏览器支持现代功能,而对其他浏览器放弃它们则对我而言是不可行的。 Flexbox是促使我跳过旧版浏览器支持的那些属性之一-它在很大程度上帮助我减少了标记-从而使维护更加容易。同时,即使是Bootstrap也决定放弃对旧版浏览器的支持,因此,必须升级以跟上竞争对手的步伐。

不用说,问题不仅仅在于IE,还在于Android,它占用了v4.4才能使常规浏览器支持特定属性-vh,flexbox包装等

这些说的,让我给你一个直接的答案:

  • 不要担心对IE9的支持-即使是10也不会。IE10可以在同一操作系统上升级到11,因此出于安全原因无论如何都应该对其进行升级。 JS框架(例如Ember)不支持IE9,缺少CSS3过渡和其他有用的属性,例如flexbox。如果没有这些,那么您要想保持设计的一致性就必须退后许多步。

  • 作为一个附带说明,IE10开始支持他们自己对flexbox的解释(很抱歉,对于flexbox的所有这种持久性,但这是最有用的属性之一)。这意味着,为了正确地支持它,您将不得不编写很多CSS。想象一下,添加30kb的缩小CSS以仅支持一种相当不常见的浏览器。值得吗?

  • 对于4年前发布的浏览器版本,某些Webkit浏览器(例如Opera)可能仍需要供应商特定的前缀,例如CSS3转换。更重要的事情在这样的浏览器(包括Opera)上被打破了,我会更加担心其他东西。就个人而言,我仅在特定情况下使用-webkit-前缀(例如,最近已经很成熟的flexbox属性)。

  • 在某些情况下,甚至在现代浏览器中,特定于浏览器的前缀也可能会派上用场,例如,设置范围输入或滚动条的样式时,您必须弄乱特定于浏览器的属性以实现一致性。在这种情况下,可能需要使用带有供应商前缀的特定CSS hack。

最后一点,我将避免使用任何前沿的属性,例如网格;了解它的作用及其工作原理,但是暂时不要使用它。您应该看一下https://caniuse.com/,以便对CSS属性和浏览器支持有所了解。

但是,由您决定,您应该根据项目的要求进行选择。两年前,我会告诉您尽力提供支持……那时,您将能够以不同的努力实现相同的目标,但是现在不再如此。从某个角度来看...较旧的浏览器无法跟上步伐。

答案 2 :(得分:3)

不应担心IE 8之前的浏览器。这些浏览器几乎不再使用,并且不支持很多功能。请参考以下网站:

https://imagebox.com/industry/why-your-website-doesnt-look-the-same-in-every-browser/ http://dowebsitesneedtolookexactlythesameineverybrowser.com/

关于各种border-radius命令,请确保全部使用它们。我发现,如果不包括webkit和mozilla,则会损失大量流量。在我的网站中,通常会包含命令的每个变体,因此我确定我的网站可以正常工作。拥有庞大而丑陋的CSS代码比破碎的网站更好。

如果需要进一步说明,请随时对此答案发表评论。