问题 隐藏除单个嵌套div之外的所有网页项目


假设我的网页有这样的结构:

<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 因为它可能会改变。


1767
2017-09-13 19:16


起源

当我试图取消隐藏它们时,你如何“搞乱了实际内容项目的风格”。 Div默认为块级元素,当您将其设置为display:block;它应该没有任何问题。 (position:absolute; visibility:hidden;与display:none;具有相同的效果;) - Jawad
当你说你不想硬编码#actual_content时,你的意思是什么?如果ID可能更改,您可以选择最后一个父div的第一个子节点,例如:div#fi + div将在#fi之后立即选择第一个div。 - lowe_22
@Jawad - 我在内容div中不仅仅是div。默认情况下显示为内联的对象(如跨度和ems)也会设置为显示为块。 - MacDonald
@ lowe_22 - 当我说硬编码时,我的意思是通向 actual_content (body> #fee> #fi> #actual_content)。我希望如果我删除了 科幻 div和put actual_content 在下面 费用 在未来的div中,CSS仍然可以处理它。 - MacDonald
你怎么做这样的事情。 “<link rel =”stylesheet“type =”text / css“href =”print.css“media =”print“/>” - 在“print.css”中,你可以拥有 - body * {position:absolute ;能见度:隐藏; } - div#actual_content * {position:static;能见度:可见;} - Jawad


答案:


你可能想用 能见度 属性。 W3Schools的 介绍 显示和可见性属性之间的差异:可见性属性影响元素的可见性而不影响其结构,即它通常在页面上占用的空间。


4
2017-09-18 02:59





在顶级div集 visibility:hidden,然后在你想要的div上 visibility:visible


4
2018-02-18 10:38



只是扩展Ansons答案真的 - Robert Wagstaff


您需要通过设置进入并定位您不想单独显示的所有内容 display:none。如果你可以改变类名等,你应该取消嵌套 actual_content <div>,然后添加类 hide_div 到另一个 <div>所以他们很容易关掉。


2
2017-11-17 21:58





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

PrintArea将指定的dom元素发送到打印机,进行维护   应用于正在打印的元素的原始css样式。

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


1
2017-09-18 03:37