隐藏除单个嵌套div以外的所有网页元素

12

假设我的网页结构如下:

<body>
    <div id="fee">
        <div id="fi">

            <div id="actual_content">

                <p>Content</p>
                <div id="some_important_stuff">Blah</div>
                <p>More content</p>
                <span class="and_another_thing">Meh</span>

                ...
            </div>

            <div id="fo>
                ...
            </div>

            ...
        </div>

        <div id="fum">
            ...
        </div>

        ...
    </div>

    <div id="fazz">
        ...
    </div>

    ...
</body>

我想创建一个打印CSS样式,除了actual_content的内容之外,其他所有东西都隐藏起来。

我的第一次尝试是这样的:

body * {
    display: none; /* Hide everything first */
}

/* Show content div and all of its ancestors */

body > #fee {
    display: block;
}

body > #fee > #fi {
    display: block;
}

body > #fee > #fi > #actual_content {
    display: block;
}

/* Unhide contents of #actual_content */

#actual_content * {
    display: block; /* Not ideal */
}

然而,由于没有 "display: auto" 或 "display: default",当我尝试显示它们时,我会弄乱actual_content的项目样式。我也不喜欢硬编码到actual_content的路径,因为它可能会更改。


当我尝试取消隐藏时,如何“搞乱实际内容项的样式”。Div默认是块级元素,当您将其设置回display:block;时,它不应该有任何问题。(position:absolute; visibility:hidden;与display:none;具有相同的效果;) - Jawad
当你说你不想硬编码 #actual_content 时,你是什么意思?例如,如果ID可能会更改,您可以选择最后一个父div的第一个子div:div#fi + div 将选择紧随 #fi 后的第一个div。 - lowe_22
@Jawad - 我的内容 div 里不仅仅有 div。默认情况下以行内显示的对象,如 spans 和 ems,也被设置为显示为 blocks。 - MacDonald
@lowe_22 - 当我说硬编码时,我指的是到actual_content (body > #fee > #fi > #actual_content) 的路径。我希望如果将来我删除 fi div 并将 actual_content 放在 fee div 下面,CSS 仍然可以处理它。 - MacDonald
1
你可以这样做。"<link rel="stylesheet" type="text/css" href="print.css" media="print"/>" - 然后在 "print.css" 中,你可以写 - body * {position: absolute; visibility: hidden; } - div#actual_content * {position: static; visibility: visible;} - Jawad
http://www.alistapart.com/articles/goingtoprint/ - Jawad
4个回答

4
在顶级div中设置visibility:hidden,然后在你想要的div中设置visibility:visible

只是在扩展Ansons的答案。 - Robert Wagstaff

4

2

您需要进入并通过设置 display:none 逐个针对不想显示的所有内容进行定位。如果可以更改类名等,则应将 actual_content <div> 解除嵌套,然后向其他 <div> 添加诸如 hide_div 的类,以便轻松关闭它们。


1

我知道你的标签显示你想要一个CSS解决方案,但是PrintArea jQuery插件非常适合你的需求:

PrintArea将指定的dom元素发送到打印机,保持应用于被打印元素的原始css样式。

http://plugins.jquery.com/project/PrintArea


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接