css - 具有相同属性但不同值的不同 css 类

标签 css

我有 2 个包含背景颜色属性的 css 类。一类用于一般元素,另一类用于选定元素。我根据模型中的数据将 selected_element 类放在元素上。 这是 CSS:

.selected_obj {
    background-color: #00EE76
}

.general_obj{
    /* Othe CSS Properties */
    background-color: #d9d9d9;
}

这是我的 JSP:

<c:forEach items="${myModel.myCollection}" var="obj">
        <c:choose>
            <c:when test="${obj.id == myModel.selectedObj.id}">
                <div class="selected_obj general_obj">
                    <span>${obj.name}</span>
                </div>
            </c:when>
            <c:otherwise>
                <div class="general_obj">
                    <span>${obj.name}</span>
                </div>
            </c:otherwise>
        </c:choose>
    </c:forEach>

当我查看生成的 HTML 时,我可以在正确的元素上看到 selected_obj 类,但该值被 general_obj 类的 backgroung-color 属性值覆盖。浏览器如何选择正确的值,我该如何克服这个问题?

最佳答案

当要应用两个具有相同特异性的冲突规则时,后一个获胜。 ) 在你的情况下 .general_obj background-color 规则获胜(= 实际上应用),因为它遵循 CSS 文件中的 .specific_obj 规则。

这 - class="general_obj selected_obj" - HTML 中的更改不会解决问题,因为两个类仍然具有相同的特异性。

解决此问题的一个明显方法是使用 !important:

.selected_obj {
    background-color: #00EE76 !important;
}

...因为使用 !important 指定的样式将覆盖原本应该应用的样式(通过遵循一般的 CSS 级联规则)。

这作为一个快速修复很顺利,但实际上我强烈建议不要这样做(原因在 this article 中描述得很好;CSS-Tricks 也有关于该主题的 a mighty word)。

相反,您可以...

  • 为这种情况制定特定的多类规则,如下所示:

    .selected_obj, .selected_obj.generic_obj { 背景色:#00EE76; }

  • (强烈建议)修复 CSS 文件,以便首先描述通用类的规则,然后再描述特定类的规则。

实际上,这是一个很好的经验法则:首先处理所有通用的东西,然后再处理特殊的东西。 )

关于css - 具有相同属性但不同值的不同 css 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997288/

相关文章:

javascript - 如何跨浏览器调试网页渲染兼容性问题?

html - 居中标题上的 CSS 伪元素下划线

html - 背景图像不可用时的 Font Awesome 图标

php - 在单个文件中提供 CSS 和 JS,可能的优点和缺点

css - 使用 Ruby Gem 不显示 Font Awesome 图标

html - 元素溢出 :auto affected by Floating Element

javascript - 页面加载时背景变灰

html - 如何制作全尺寸水平滚动页面?

css - 字段集上的列计数不适用于 Firefox

javascript - 如何在 Django Javascript 中打开编辑部分而不刷新每个帖子的页面?