有没有办法将CSS属性纯粹设置为其他浏览器不兼容的后备?

Is there any way I can set CSS properties purely as a fallback for others not being browser compatible?

提问人:FSDevie 提问时间:4/9/2022 最后编辑:FSDevie 更新时间:4/10/2022 访问量:384

问:

我的网站在所有浏览器中都呈现良好,直到我在 Internet Explorer 中对其进行测试。我的菜单栏完全向左移动,覆盖了我的徽标,所有使用 Grid 的部分都不再显示。

我弄清楚了我必须进行的确切替换才能与IE浏览器兼容。但是,只是将它们放在我原始的 nav 和 grid 属性之后的 CSS 中,通常会在我的网站上覆盖它们,这是我不希望的,因为我仍然希望我在其他浏览器上最初编码的网站保持不变。

有没有另一种方法可以只为 IE 浏览器创建回退或如何解决这些问题?

例如,我的网格附加 - 我的标题代码很长,因为它还包括一个响应式切换菜单 - 以及两者的媒体查询!

总而言之 - 我希望浏览器忽略我之前设置的 CSS 属性并粘贴新的属性 - 以防浏览器失败。

.grid {
  display: grid;
  grid-template-columns: 500px 500px;
  grid-gap: 10px;
  grid-column-gap: 100px;
}

.grid__item {
  background-color: var(--violet-lighter);
}

/*start internet explorer grid fallback*/
.grid {
  display: inline-block;
}

.grid_item {
  width: 50%;
}


/*end internet explorer grid fallback*/

我也尝试了以下方法,但没有成功 - 在这种情况下,IE会忽略所有更改:

.grid {
  display: inline-block; /*IE fallback*/
  display: grid;
  grid-template-columns: 500px 500px;
  grid-gap: 10px;
  grid-column-gap: 100px;
}

.grid__item {
  background-color: var(--violet-lighter);
}
HTML CSS 互联网浏览器

评论

0赞 Alohci 4/10/2022
一般的技术是将旧浏览器的 CSS 放在首位,然后用支持较新 CSS 的浏览器的更高版本的 CSS 覆盖它。
0赞 FSDevie 4/10/2022
@Alohci谢谢!在我的第二个示例中,我把我的 IE 回退放在第一位,对吧?但这并没有奏效。在这种情况下,它完全忽略了支持它的浏览器中较新的CSS功能

答:

0赞 meerhamzadev 4/9/2022 #1

我不知道后备,但您可以在单独的文件中编写特定于IE的CSS,然后以这种方式使用条件注释:

<!--[if IE]>
   <link rel="stylesheet" type="text/css" href="only-ie.css" />
<![endif]-->

您可以参考本文以更好地理解。https://www.browserstack.com/guide/create-browser-specific-css

评论

0赞 Zach Jensz 4/10/2022
浏览器回退有更好的方法
0赞 meerhamzadev 4/11/2022
@ZachJensz那么请启发我们
0赞 Zach Jensz 4/11/2022
Jen Simmons 有一些很棒的视频。(顺便说一句,我没有对你投反对票)
1赞 Ere Männistö 4/10/2022 #2

您可以尝试使用 javascript/jquery 进行浏览器管道类型输入,并指定该特定浏览器的 or 类名。在本例中,我使用了类名:htmlbody

  • 歌剧 =.is-opera
  • 火狐浏览器 =.is-firefox
  • Safari =.is-safari
  • IE =.is-internet-explorer
  • 边缘 =.is-edge
  • 铬 =.is-chrome
  • E-铬 =is-edge-chromium

需要注意的是,依靠管道打字不是一个好主意,如果您的网站需要被所有浏览器访问,您的原始代码应该以支持传统浏览器的方式编写。

要了解您可以使用和不能使用的内容,可以在此处找到: 我可以使用吗 - 检查CSS浏览器支持

// Detect which browser is being used:

jQuery( document ).ready(function() 
{

    // Where the class will be set, in this case to the body:
    var body = $('body');

    // Opera
    var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
    if(isOpera){
        body.addClass('is-opera');
    }

    // Firefox
    var isFirefox = typeof InstallTrigger !== 'undefined';
    if(isFirefox){
        body.addClass('is-firefox');
    }

    // Safari
    var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && window['safari'].pushNotification));
    if(isSafari){
        body.addClass('is-safari');
    }

    // Internet Explorer:
    var isIE = /*@cc_on!@*/false || !!document.documentMode;
    if(isIE){
        body.addClass('is-internet-explorer');
    }

    // Microsoft edge
    var isEdge = !isIE && !!window.StyleMedia;
    if(isEdge){
        body.addClass('is-edge');
    }

    // Chrome
    var isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);
    if(isChrome){
        body.addClass('is-chrome');
    }

    // Edge Chromium
    var isEdgeChromium = isChrome && (navigator.userAgent.indexOf("Edg") != -1);
    if(isEdgeChromium){
        body.addClass('is-edge-chromium');
    }

});

添加 javascript 代码后,您可以使用浏览器对其进行测试,看看是否获得了一个名为 .然后对像这样的有问题的浏览器进行编辑。(我用你在这里试图改变的东西作为类的例子)body.is-xxx.is-internet-explorer

.is-internet-explorer .grid {
  display: inline-block;
}

.is-internet-explorer .grid_item {
  width: 50%;
}

评论

0赞 Ere Männistö 4/10/2022
我个人已经放弃了那些仍然使用互联网浏览器的人。但是,如果它是必需的,那么它是必需的。我们能做些什么。
0赞 FSDevie 4/10/2022
非常感谢@erecodes!我今天才开始学习 Javascript,所以我会进一步探索这个。可悲的是,我还没有看到任何纯粹的CSS回退。IE 将于今年 6 月停用,但仍然有太多浏览器不支持 Grid 等非常有用的功能。