2011-02-03 3 views
36

У меня возникли проблемы с его работой в большинстве браузеров, кроме IE (он работает корректно в IE6) и Opera.CSS-брейк не работает во всех браузерах

Firefox отделяет divs правильно, но только печатает первую страницу.

Chrome и Safari применяет разрыв страницы до последнего div.

Как я могу заставить это работать во всех браузерах правильно?

HTML-:

<div id="leftNav"> 
    <ul> 
    <!--links etc--> 
    </ul> 
</div> 
<div id="mainBody"> 
<div id="container"> 
    <div class="pageBreak"> 
    <!--content--> 
    </div> 
    <div class="pageBreak"> 
    <!--content--> 
    </div> 
    <div class="pageBreak"> 
    <!--content--> 
    </div> 
</div> 
</div> 

дивы с идентификаторами #leftNav и #mainBody будут установлены в float:left, поэтому они показывают красиво.

Я только хочу напечатать классы .pageBreak, скрывая #leftNav и остальную часть #mainBody с CSS.

CSS-:

@media print 
{ 
#leftNav 
{ 
    display:none; 
} 
#mainBody 
{ 
    border:none; 
    margin:none; 
    padding:none; 
} 
} 
+0

Насколько я знаю, это свойство должно работать во всех основных браузерах, если вы используете значение «всегда». Не могли бы вы разместить свои соответствующие css и html? – AJJ

+1

Если вы решили проблему самостоятельно, и это не один из ответов ниже, было бы неплохо разместить ее здесь ради потомков, вместо добавления '[solve]' в заголовок вашего вопроса (который ничего не делает). Также обратите внимание, что ссылка SitePoint (которая связана с ниже) является гораздо лучшей ссылкой для CSS и HTML [чем W3Schools] (http://w3fools.com/) –

+0

Это была одна из моих первых сообщений, и привычка меня заставила меня изменить название в соответствии с многими правилами форума, а не создание нового сообщения. Я посетил SitePoint по этой проблеме, но это не помогло мне в той помощи, в которой я нуждался. В этом случае W3Schools сделали. –

ответ

77

Родительские элементы не могут плавать на них.

Установка float:none на все исходные элементы составляет page-break-before:always.

Другие вещи, которые могут нарушить разрывы страниц: использование разрывов страниц внутри таблиц, плавающих элементов, элементов встроенного блока и блоков с границами.

3

что ваш код?
как это ?:


<style> 
@media print 
{ 
table {page-break-after:always} 
} 
@media print 
{ 
table {page-break-before:always} 
} 
</style> 
 
поддержка
5

"Firefox versions up to and including 3.5 don’t support the avoid, left, or right values." IE также частичная вы можете добиться того, что необходимо: страницы-обкатка перед: всегда; который поддерживается во всех браузерах «но только печатать первую страницу»: я не думаю, что это связано с css, я полагаю, что он находится в окне печати браузера :)

22

Для достижения цели и для других, имеющих такую ​​же проблему, я просто хочу добавить, что мне также пришлось добавить overflow: visible телу тела, чтобы FireFox соблюдал разрывы страниц и даже чтобы напечатать больше, чем только первую страницу.

+1

Это был недостающий шаг, чтобы исправить вещи для меня. –

+10

Для немного более полноты, 'display: flex', похоже, тоже испортит ситуацию. – Ben

+0

сумасшедший, но добавление 'overflow: visible' в тег тела работало !!! Спасибо, Винсент. – Rajesh

5

Несмотря на то, что это не задокументировано, следует отметить, что свойства разбиения страницы не могут применяться к элементам таблицы. Если у вас есть какие-либо элементы, которые имеют к ним display: table; или display:table-cell; (общие для многих шаблонов в классе clearfix), то содержащиеся элементы будут игнорировать правила разрыва страницы. Просто отмените правило в таблице стилей печати, и вы должны быть в порядке (после того, как поплавки также были удалены, конечно!).

Ниже приведен пример того, как это сделать для популярной проблемы с очисткой.

.clearfix:before, .clearfix:after{ 
    display: block!important; 
} 

EDIT: Я забыл добавить, что другое место, я столкнулся с этим, когда шаблон объявил всю страницу (обычно называемый основной или основной оболочкой) с display:inline-block;

Если раздел находится внутри из встроенного блока, он не будет работать, поэтому держите глаза открытыми для них. Изменение или переписывание display:inline-block; с display:block должно работать.

Надеюсь, это поможет!

~ techdude

+1

'display: inline-block' была моей проблемой – iabw

4

У меня был position: absolute; в сНу печати, вызвавшей это не работать.

14

Я обнаружил, что классы Twitter Bootstrap добавляют кучу вещей на страницу, что затрудняет работу страниц. Firefox работал сразу, но мне приходилось следовать различным предложениям, чтобы заставить его работать в Chrome и, наконец, IE (11).

Я следил за предложениями здесь и в другом месте. Единственное свойство, которое я «обнаружил», которого я еще не видел, это «размер окна». Bootstrap может установить это свойство в «box-sizing: border-box», который сломал IE. IE-friendly параметр - «box-sizing: content-box». Меня привели к этому оговоркой о «блочных элементах с границами», сделанном Ричардом Парнаби-королем https://stackoverflow.com/a/5314590/3397752.

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

Это настройка, которая работала для меня (Chrome, FF, IE 11). В принципе, он пытается переопределить все проблемные настройки во всех div на печатной странице. Конечно, это может также нарушить ваше форматирование, и это будет означать, что вам придется найти другой способ настройки страницы.

@media print { 

    div { float: none !important; position: static !important; display: inline; 
      box-sizing: content-box !important; 
    } 

} 
+0

Я бы поднял это не один раз, если мог. – DanSingerman

3

Существует решение, если родитель плавает. Для элемента, к которому вы применили разрыв страницы, сделайте элемент overflow: hidden. Это все. Это сработало для меня.

<div style='float:left'> 

<p style='overflow:hidden;page-break-before:always;'></p> 

</div> 
+0

Это сработало нормально, для меня с помощью 'wkhtmltopdf' мне нужно было установить html, body {overflow: hidden; } 'потому что шаблон .css использовал' overflow-x: hidden'. Это не должно быть уменьшено. Благодаря! – Sebastian

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