隐藏所有,用css显示一个类

Jos*_*iah 5 html css printing css3

上下文:使可打印的发票在浏览器中生成.

在制作可打印的网页时,通常会使用@media print规则来更改内容查找打印页面的方式.理想情况下,因为我只打印页面的一小部分,所以我想隐藏所有内容然后显示特定元素的内容.

结构是这样的:

<body>
    <div id="topMenu">...lots of elements...</div>
    <div id="sideMenu">...lots more...</div>
    <div class="tools">...some tools...</div>
    <div class="printing">...some elements I want to print...</div>
    <div class="tools">...more stuff I don't want to print...</div>
</body>
Run Code Online (Sandbox Code Playgroud)

我试过的东西:

理想情况下,我想做点什么

body * {
    display: none;
}
.printing, .printing * { /* Both parts are needed to make it display */
    display: block !important;
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为有些元素需要内联,有些需要阻塞.我已经displayMDN中使用了一些不同的值,但找不到一个可以轻松将值重置为原始值的值.display: initial好像被对待了inline.

CSS中的建议:"display:auto;"?似乎只适用于JS.

当然,有可能明确地"隐藏"我不想要打印的东西,而不是显示我想要的东西,但在我看来应该可以走另一条路.

在这个问题中如何只显示CSS的某些部分用于打印?建议body *:not(.printable *) {display:none;}但注意(在w3否定页面上备份),这还不支持.

我注意到w3草案显示外部页面似乎建议使用未知(to webkit)box-suppress属性来保留显示值而不显示元素.

我的问题:

什么是隐藏所有内容并定位某些元素的最佳方式,当它们不共享显示属性时?

到底是box-suppress做什么的?

Ben*_*ero 5

由于您专门标记了此CSS3,请尝试使用CSS3!

body>:not(.printing) {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

这应该适用于您给出的示例.我希望它适用于您的实际应用程序!


为了回答你的辅助问题,截至2014年10月,box-suppress可能是将来的替代品display:none,希望能够更容易地隐藏和删除流程中的元素,而不必担心改变其显示类型(相反visibility仍然保持在流程中,并且position:absolute仍然保持可见).我认为它目前不受支持,所以我现在暂时离开它.如果您想了解更多信息,请访问http://w3.org/TR/css-display