CSS 特异性问题

Con*_*ean 2 html css css-selectors

我正在为我自己的教育创建一个 javascript 游戏。游戏需要几个页面,我通过 hidden 实现这些页面,div当你想查看它们时,这些页面会被隐藏/取消隐藏(题外话:欢迎任何关于这是否是个好主意的建议)。

我有一个 CSS 规则,它隐藏了我所有的 div,display: none;然后是一个用display:block;. 但是,不是取消隐藏类,而是我用于选择所有 div 的 css 选择器覆盖了类,导致规则不适用。我知道我可以使用!important属性来解决这个问题,但我想了解为什么我写的东西不起作用。我认为一个类将是一个足够具体的选择器,并且该规则甚至出现在隐藏规则之后。

这是我的来源:

<!DOCTYPE HTML>
<html>
<head>
    <link rel="stylesheet" href="style.css" type="text/css" media="screen" charset="utf-8">
</head>
<body>
    <div id="game">
        <div id="content">
            <div id="viewport">
                <div id="home_page" class="current_page">Home</div>
                <div  id="work_page">Work</div>
            </div>
        </div>
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

和CSS:

#content
{
    background: #eef;
    padding: 5px;
}

#viewport div
{
    display:none;
}

.current_page
{
    display:block;
    //display:block !important; //One solution, but not preferred
}
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 5

#viewport div是一个 ID 选择器和一个类型选择器。这比.current_page单独的类选择器更具体,因为只有 ID。

display: block !important;您可以并且应该修改最后一个选择器,而不是应用,为其提供 ID 使其变为#viewport .current_page。这使得 ID 同样具体,类选择器比类型选择器更具体。