Используйте CSS для скрытия содержимого при печати

Я ищу простой способ скрыть все, кроме определенного div и его содержимого.

<html>
  <head></head>
  <body>
    <div class="header">...</div>
    <div class="menu">...</div>
    <div class="content">...</div>
    <div class="footer">...</div>
  </body>.
</html>

Так, например, если я хочу напечатать только div.content, Я бы сделал это так:

.header, .menu, .footer {
  display: none;
}

и если макет сложный, он становится грязным. Есть ли более простой способ сделать это с помощью CSS?

5 ответов


@media print {
.noPrint {
    display:none;
  }
}

теперь вам нужно применить класс noPrint к элементам, которые вы хотите скрыть при печати.


рекомендуется использовать таблицу стилей специально для печати, а также установить ее атрибут media в print.

пример:

<link rel="stylesheet" type="text/css" href="print.css" media="print" />

назначьте отдельный файл CSS, который определяет поведение при печати веб-страницы.

<link rel="stylesheet" href="print.css" type="text/css" media="print" />

и затем в этом файле просто определите:

.header, .menu, .footer { display: none; }

Я сделал это css3 способом: используя не псевдокласс, а прямые предки (дети)

/* hide all children of body that are not #container */
body > *:not(#container) {
  display: none;
}
/* hide all children of #container that are not #content */
#container > *:not(#content) {
  display: none;
}
/* and so on, until you reach a div that you want to print */
#content > *:not(#print_me) {
  display: none;
}

таким образом, вы можете исключить все, кроме того, что вы хотите печатать даже в очень сложных макетов. : не очень эффективно здесь, потому что он заботится о любых будущих модификациях html.


вы можете использовать классы.

.classHide{display: none}

в зависимости от используемого языка, когда if= = true вы можете добавить класс в верхний, нижний и Нижний колонтитулы.

поэтому вам не нужно будет использовать другой файл css.


в зависимости от вашей структуры HTML (и браузеров, которые вам нужно поддерживать, потому что IE6 не будет поддерживать это), вы можете скрыть все дивы верхнего уровня и просто показать один / несколько, которые вы хотите показать:

body > div {
   display: none;
}

#content {
  display: block;
}