【问题标题】:Not being able to override external scss file with !important tag无法使用 !important 标记覆盖外部 scss 文件
【发布时间】:2021-10-16 01:21:09
【问题描述】:

我一直在尝试构建一个包含外部 SCSS 文件的页面。直到现在,我用 !important 覆盖特定元素都没有问题。我知道这个问题在这里很受欢迎。我经历过

这个答案 How to override external css marked as !important?,

这个 How to override external css?

这个 How to overwrite SCSS variables when compiling to CSS

还有其他一些,但它们似乎都不适合我的情况。

我的目标是通过 CSS @keyframe 计时器(或任何其他可行的方法)设置我的框的颜色更改,但是在外部 SCSS 文件中有一个颜色规则设置为 !important 。 我还可以通过在我的本地 css 中添加一个 !important 来覆盖它一次,以获得我想要的基本颜色,但是颜色更改似乎不起作用并且无法覆盖这两个 !important s,即使使用更高特异性等等。 我将提供对这个问题很重要的代码部分:

主题风格:

<link rel="stylesheet" href="box2.css">
<link rel="stylesheet" href="http://shipping.mambo.com.br/shipping-store/views/_includes/dist/css/adminlte.min.css">

我正在使用的盒子:

<div href="#" id="boxMaster" class="small-box bg-info" class="box-PEDIDO" tabindex="0">
      <a class="nmroPedido small-box-header" id="header" href="#"></a> <a class="float-right" id="dataEntrega"></a>
      <hr>

      <div class="inner">
        <p id="nomeproduto"></p>
      </div>
      <div class="icon">
        <i class="fas fa-shopping-cart" id="carrinho"></i>
      </div>
      <hr id="footer" class="baixoHr" tabindex="-1">
      <a class="small-box-footer" tabindex="-1">   

      </a>
    </div>

还有我的本地 CSS:

     .row .info-box .info-box-icon {
    font-size: 20px;
    cursor: pointer; 
    
    height: 115px;
    width: 30px;
  }
   .box-PEDIDO {
    height: 135px;
    width: 423px;
    cursor: pointer;
  }

  .card-title {
    font-weight: bolder;
  }
  
  

  

  .row {
  height: max-content;
}


hr#antigo {
  border: 0;
  height: 25px;
  background: #333;
  background-image: linear-gradient(to right, #ccc, rgb(0, 0, 0), #ccc);
}







/* NOVO */


body #preparando .small-box  {
  width: 423px;
  height: 160px;
  cursor: pointer;
  margin-right: 11px;
  
}

 html body div #preparando .small-box {
  background-color: var(--bs-success) !important;
}




#preparando:focus-within .small-box:focus-within {
  background-color: #29923f !important;
}

#prontos .small-box {
  width: 423px !important;
  height: 160px !important;
  cursor: pointer;
  margin-right: 11px;
  background-color: var(--bs-dark) !important;

}
 
.small-box-footer {
  position: absolute !important;
  bottom: 0px;
  width: 423px !important;
  text-align: right !important;
  margin-right: 5px !important;
  font-size: 13px;
  font-weight: 250 !important;
  background: none !important;
  cursor: default;
  
  
}

 h3 {
  font-size: 1.2rem !important;
  font-weight: lighter !important;
  
}

.h3qtd {
  position: relative;
  margin-top: -37px !important;
  margin-left: 10px !important;
}

p {
  font-size: 1.3rem !important;
  word-wrap: break-word;
  height: 90px;
  margin-top: 4px !important;
  position: absolute;top: 65px;
  width: 250px;
  line-height: 27px;
  margin-left: 12px;
  font-weight:500;
}

.inner {
  height: 42px;
  margin-top: -30px;  /*Altura da "quantidade", ajustar dps*/
}

#header {
  font-family: "Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
  font-size: 11px;
  margin-left: 5px;
  padding: 8px 0;
  height: 20px;
  font-weight: 200;
  display: inline-block;
}

#dataEntrega {
  font-size: 13px;
  margin-top: 4px;
  margin-right: 5px;
}

.small-box .icon > i {
  position:absolute; top: 50px !important;
}




hr {
  position: relative; bottom: -9px !important;
  width: 423px !important;
}

.baixoHr {
  position: relative; top: 74px;
}

.nroPedHead {
  display: inline-block;
  position: relative;
  
}


.nmroPedido-0 {
 margin-top: -72px !important;
 position: absolute !important;
 margin-left: 5px;
 font-size: 0.75rem;
  
}

.float-right {
  margin-top: -71px;
  margin-right: 5px;
  font-size: 13px;
     
}



#preparando div .small-box .bginfo {
    animation: change 10s step-end both !important;
}

@keyframes change {
    to   { background-color: var(--bs-warning) !important }
}

重要部分在html body div #preparando .small-box { background-color: var(--bs-success) !important; } 中(即使没有所有规范也可以工作)

还有最底层

#preparando div .small-box .bginfo {
    animation: change 10s step-end both !important;
}

@keyframes change {
    to   { background-color: var(--bs-warning) !important }
}

注意:颜色更改关键帧适用于页面中的其他元素,但无法更改框的颜色。

我怎样才能让它工作?提前谢谢你。

编辑: MRadev 的回答确实有效并触发了颜色变化,每个元素 BUT .bg-info (这是框的背景),因为 !important 在外部 CSS我相信的文件。

仍在尝试找到解决此问题的方法。 将 MRadev 的线条设置为每个元素将不起作用,因为 .bg-info 背景中剩余的绿色会渗入元素的颜色。

【问题讨论】:

    标签: javascript html css sass


    【解决方案1】:

    您的问题在于嵌入在密钥中的 !important 语句。关键帧内的“!important”被忽略。请参考:

    https://developer.mozilla.org/en-US/docs/Web/CSS/@keyframes#!important_in_a_keyframe

    和

    https://rules.sonarsource.com/css/RSPEC-4655

    这不应该是您要解决的问题,而是需要使用 !important。通常这意味着你的风格结构很糟糕。 (我确实知道您正在尝试覆盖库。

    也许您最好的解决方案是在您的情况下使用 JS 动画而不是 CSS 动画。或者,如果您不使用动画,但直接覆盖“背景颜色”并且如上面的答案中所述 - 让您的“!important”加载首先是忽略图书馆。

    此处显示您的代码:

    // Smallbox:
    .small-box > .inner {
        animation: change 2s step-end both;
    }
    
    // Outher box
    .bg-info {
     background-color: yellow !important;
    }
    
    @keyframes change {
        to   { background-color: red}
    }
    
    
    @import url("https://cdn.jsdelivr.net/npm/admin-lte@3.1/dist/css/adminlte.min.css")
    

    https://codepen.io/Rbx/pen/zYdrvRP?editors=1100

    【讨论】:

    • 哦,我明白了。您的回答确实有效@MRadev,部分。您的答案能够在 .inner 中应用红色关键帧,该关键帧绘制了框顶部的一大块。但是,.bg-info Yellow Background-color 没有。但是对于您的实现,我将尝试对您的贡献进行一些调整,看看我是否可以将其应用于整个盒子。我会留下这个问题,所以如果我可以解决这个问题,我会更新它。
    • 我很高兴它在某种程度上有所帮助。主要思想是当前的想法不应该起作用。关于实现,它只是为了显示特异性(在小盒子部分),并且 .bg-info 部分只是表明 !important 在首次应用时按预期工作:)
    • 我可能遗漏了一些东西...... .bg-info 部分根本不起作用。无论我如何改变事物或我有多具体。如果我将 .bg-info 而不是“.inner”放在第一行,它也什么都不做。我知道你的想法是为了展示,它确实做到了。但我仍然对为什么我不能对 .bg-info 做任何事情感到困惑。
    • 在示例中,.bg-info 被黄色背景覆盖,并通过我现在能想到的一种方式完成(如果我有想法将编辑)。但请记住这一点:1. .bg-info 不能通过第一行更改,因为您不能将 !important 放在关键帧内;2. 将 !important 添加到动画的值实际上不会覆盖背景声明 ->因此您不能覆盖 !important 库。该示例显示您需要直接使用背景颜色!重要并将其放在加载库之前。 (这不是解决方案)
    【解决方案2】:

    这是在样式中使用 !important 的库的问题;很难被覆盖。浏览器不可能假设哪个 !important 标记比另一个 !important 标记更重要,所以它只取第一个。做到这一点的唯一方法是使您的样式定位比库更具体。

    例如,如果库根据类名在元素上设置 !important,那么您可以在 CSS 中使用 ID 目标使其“更具体”(ID 应该只设置在单个元素上,因此它被认为是最具体的定位形式)。

    覆盖第三方 !important 标记的唯一其他方法是确保您的 CSS 首先加载该特定样式的 !important 标记。然后当库样式加载时,它将无法覆盖您的样式。

    代码示例:

    html body div #preparando .small-box { // This is targeted by class name
         background-color: var(--bs-success) !important;
    }
    
    html body div #preparando .small-box#someID { // This is targeted by ID which is more specific
         background-color: var(--bs-success) !important;
    }
    

    【讨论】:

    • 我明白了。在您用作示例的部分中,样式确实有效,并且在添加 !important 时应用。我无法解决的部分是 CSS 底部的颜色变化。在那里,它没有。永远不会应用颜色更改,即使使用规范和 !important (尝试使用您刚刚回答的规范路径。没有工作。)
    • 您是否更改了关键帧的特异性?还是在#preparando div .small-box .bginfo 定位?
    • ` html body div #preparando .small-box#boxMaster { 动画:改变 10s 步结束两个 !important; } @keyframes 将 { 更改为 { background-color: var(--bs-warning) !important } }` 我在关键帧动画声明处更改了它。对吗?
    • 是的,应该可以的。 W3 学校有一篇文章对此进行了解释:w3schools.com/css/css_important.asp。我会看看我是否可以编写一个您的代码示例,然后看看它为什么不工作。
    猜你喜欢
    • 1970-01-01
    • 2019-09-10
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2019-11-26
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多