2016-01-15 3 views
8

У меня есть большой HTML-документ с заголовками (h1, h2, h3 ...) и параграфы. При печати документа, я хочу, чтобы автоматически, заголовки в нижней части документа, перейдите на следующую страницу:Orphan CSS: Как избежать заголовков (h1, h2 ...) на нижней странице?

enter image description here

Как я могу сделать? Я использую «сироты: 3» CSS с параграфами и работает с тегами «p», но с h1 или h2 не работает.

@page { 
    size: A4; 
} 

p { 
    orphans:3; 
} 

h1, h2 { 
    orphans:3 
} 

Full example on action где:

  • 1-2 страницы: абзацы сирота отлично работает.
  • 2-3 страницы: заголовки не работают.

Требования:

  • HTML есть один основной контейнер DIV.
  • Не изменяйте HTML.
  • Поддержка браузера не имеет значения (на моей конкретной задаче).
  • Мне нужен какой-то трюк в CSS (нет JS или JQuery, желательно)
  • Я не могу использовать разрыв страницы перед: всегда, потому что я хочу, чтобы эти заголовки переходили только на следующую страницу, когда появляется внизу страницы.
+0

Слишком много теории .. можем ли мы получить код в действии? –

+0

Вопросы, требующие помощи кода, должны содержать кратчайший код, необходимый для его воспроизведения ** в самом вопросе **. См. [** Как создать минимальный, завершенный и проверяемый пример **] (http://stackoverflow.com/help/mcve) –

+0

Вы должны знать, что такие стили печати, как 'сироты',' break -after' и т. д., имеют известную плохую поддержку браузерами, поэтому всегда будут случаи, когда эти вещи не работают. Как правило, стили печати и страницы по-прежнему являются слабым местом для HTML/CSS, поэтому, если вам нужны распечатки хорошего качества, вы серьезно должны смотреть на альтернативы, такие как PDF. – RoToRa

ответ

8

В типографии сирота:

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

Однако в HTML <h1> и <p> разные пункты то, что вы должны использовать это break-after свойство сказать макет двигателя, чтобы не поставить разрыв страницы после этого пункта (с побочным эффектом, чтобы перейти в следующий абзац вверх на предыдущую страницу - если подходят - или переместить заголовок на следующую страницу

h1, h2 { 
    break-after: avoid-page; 
} 

Примечания о совместимости: break-after установки является истинным рабочего проекта и даже основные функции не имеет широкую поддержку (нет. в целом Internet Explorer 10 делает). Чтобы обойти это, вы можете использовать еще одно свойство с подобным значением:

h1, h2 { 
    page-break-after: avoid; 
} 

Обратите внимание, что page-break-after относится как к странице и столбцов.page-break-after не очень хорошо поддерживается FF (it is a bug), а затем, если совместимость важна и пункт не будет охватывать через несколько страниц, которые можно обойти оберточной <h1> и <p> внутри контейнера (скажем <section>), а затем применить page-break-inside так:

section { 
    page-break-inside: avoid; 
} 

IMO вы должны комбинировать page-break-after и page-break-inside с использованием page-break-inside с префиксом -moz, пока он не исправит эту ошибку.

+0

Ваш ответ прекрасен, я понимаю и знаю эти моменты, но теория не работает (или я делаю некоторые неверные). Может дать некоторый код (или изменить пример codepen для «Выбрать весь текст»/Печать) и показать, как работает? В моем примере, я не получаю заголовок «Бла-бла», перейдите на следующую страницу. – Manz

+0

Не пытайтесь внутри CodePen, используя автономный файл, который он работает. Разумеется, совместимость с браузером является aleatory (в лучшем случае, типография не очень хорошо поддерживается). Большинство _compatible_ way в последний раз описываются одним, это немного изменяет способ вывода вывода (потому что он попытается сохранить все разделы вместе, возможно, даже не разбивая абзацы и добавляя - при необходимости - разрыв страницы перед первым заголовком). С этой разницей это только один, который я видел правильно обработанным в каждом браузере, который я пробовал. –

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

  • Нет связанных вопросов^_^