2009-10-02 3 views
26

У меня есть следующие CSS для моего стиля печати:Скрыть все элементы, кроме одного DIV для вида печати

* { 
display:none; 
} 

#printableArea { 
display:block; 
} 

Я ожидал, чтобы скрыть всех элементов, а только показать printableArea, однако всех получают скрытый. В режиме печати все, что я получаю, является пустой страницей.

Я включил его правильно в HEAD, с media="print" на этой странице стилей.

ответ

27

Если элемент не отображается, то ни один из его дочерних элементов не будет отображаться (независимо от его свойства отображения).

* соответствует <html> элементам, поэтому весь документ скрыт.

Вам нужно быть более избирательным относительно того, что вы скрываете.

+1

Ах, спасибо! Думаю, я мог бы просто разместить printableArea вне оболочки страницы, а затем скрыть оболочку, показывая печатный div. – FatherCarbon

+0

@FatherCarbon - это то, что я только что внедрил, и похоже, что это прекрасно подойдет – Michael12345

9
html body * { 
display:none; 
} 

#printableArea { 
display:block; 
} 

Кроме того, вам может понадобиться! Важно на #printableArea, но, вероятно, нет.

+19

Это будет работать только в том случае, если #printableArea - это прямой ребенок тела. –

0

Если вы хотите использовать JavaScript, вы можете попробовать этот простой фрагмент кода, который даже не требует JQuery:

document.body.innerHTML=document.getElementById('printableArea').innerHTML; 
+0

это действие заменит весь HTML, а не требуемый результат –

4

Вы можете попробовать выскакивают его поверх всего. Это позволило решить 90% моих проблем, тогда мне просто пришлось сделать класс .noprint и добавить его в несколько элементов.

.print_area{ 
    position: fixed; 
    top: 0px; 
    left: 0px; 
    width: 100%; 
    z-index: 9999; 

    background-color: #ffffff; 
} 
8

Вы принимаете правильный общий подход, но вы хотите использовать visibility: hidden вместо display: none, так что вы можете установить дочерние элементы, чтобы быть видимыми.

См. Print <div id=printarea></div> only?

Смежные вопросы