Как скрыть все, кроме div и всех его дочерних элементов?

Я хотел бы скрыть весь контент на странице, кроме определенного div, содержащего class = "content-container", при печати веб-страницы.

Моя разметка сейчас:

@media print {
 :not(.content-container) {
  display: none!important;
 }
}

Теперь, когда я пытаюсь распечатать страницу, ничего не видно, в том числе и div. Я думаю, что мне нужно выбрать как все, что не является дочерним элементом .content-container, но не знаю, как это сделать.

Кто-нибудь знает, как настроить таргетинг на все, кроме этого div и его детей?

родитель(и) этого div должен быть виден, иначе он тоже будет скрыт. Ваш селектор слишком короткий... он начнет устанавливать html для отображения: none; оттуда все скрыто.

G-Cyrillus 23.12.2020 15:56

Почему бы вам не добавить класс (например, .np) ко всем элементам (родителям), которые вы не хотите печатать?

AbsoluteBeginner 23.12.2020 20:46

К сожалению, я не могу поменять родителей, но спасибо за идею!

Sybrentjuh 24.12.2020 09:06
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
3
520
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Н.Б. Это решение работает только в том случае, если .content-container сам по себе не является дочерним элементом другого элемента.

Вы сможете добиться этого эффекта, применив display: none к каждому элементу на странице, а затем переопределив этот display специально для .content-container и его дочерних элементов.


Пример:

@media print {

  /* APPLY DISPLAY:NONE TO EVERYTHING */
  * {
    display: none;
  }

  /* OVERRIDE DISPLAY:NONE FOR .CONTENT-CONTAINER AND ITS CHILDREN */

  html,
  body,
  .content-container,
  .content-container * {
    display: initial;
  }

}

Где .content-container ребенок main

Если .content-container постоянно является дочерним элементом main, того же эффекта должно быть относительно легко достичь с помощью следующих правил стиля:

html,
body,
main,
main .content-container,
.content-container * {
display: initial;
}

Рабочий пример:

* {
  display: none;
}

html,
body,
main,
main .content-container,
.content-container * {
display: block;
}
<header>ABC</header>

<main>
  <h2>DEF</h2>
  <article class = "content-container">
    <p>GHI</p>
    <p>JKL</p>
  </article>
</main>

<aside>
  <p>MNO</p>
<aside>

<nav>
  <ul>
    <li>PQR</li>
    <li>STU</li>
  </ul>
</nav>

К сожалению, контент-контейнер также является дочерним элементом основного контейнера. Хотя за идею спасибо!

Sybrentjuh 24.12.2020 09:06

@Sybrentjuh - Не беспокойтесь. Взгляните на второй подход выше. Это должно дать вам инструменты, необходимые для создания чего-то, что соответствует специфике вашей разметки.

Rounin - Standing with Ukraine 24.12.2020 12:04

О, это круто и похоже, что это работает. Спасибо!!

Sybrentjuh 24.12.2020 14:00

Другие вопросы по теме