#html #css #printing
#HTML #css #печать
Вопрос:
Я делаю некоторые изменения для печатной брошюры на сайте моего клиента, которая потенциально может содержать длинные неупорядоченные списки информации.
Моя проблема заключается в том, что при печати в Firefox все <UL>
будет переходить на новую страницу вместо разделения дочерних <li>
элементов, что означает, что оно не передается с другим содержимым на странице.
Я обнаружил, что свойство CSS page-break-inside
поддерживается только в Opera и IE8, кто-нибудь знает альтернативу этому свойству или другой метод, который я могу использовать, чтобы предотвратить переход всего списка на новую страницу.
Приветствия!
ОБНОВЛЕНИЕ [23.11.2011]: я смог обойти свою проблему, поскольку печатный документ генерируется в ответ на выбор пользователя, поэтому эта страница будет только печататься. Я (очень неохотно) отодвинул семантику в сторону и удалил UL и заменил LI на DIVS, которыеправильно разрывать. Тем не менее, вопрос остается в силе для всех, у кого есть аналогичная проблема, но используется тот же HTML для печати и экрана.
Я воспроизведу проблему, с которой столкнулся, и опубликую необходимые HTML и CSS, как только смогу.
Комментарии:
1. это боль, но экспорт в PDF …
2. Если бы вы могли опубликовать образец html-документа для работы, это помогло бы проверить возможные ответы.
3. Какая именно версия FF? Я использую последнюю версию, и она обычно разделяет UL.
4. также вы пробовали применять свойства сирот или вдов? они и разрыв страницы поддерживаются в ff3.5
Ответ №1:
Рассмотрите возможность программного удаления тегов UL для печатной версии. Вы должны быть в состоянии заставить элементы LI отображаться одинаково с некоторым стилем.
JavaScript или даже jQuery могут справиться с этим достаточно легко, но я уверен, что вы могли бы позаботиться об этой стороне сервера.
Я знаю, что это технически неверный HTML, но иногда вам приходится нарушать правила, когда HTML / CSS не предлагает вам гибкости.
Ответ №2:
Заслуга принадлежит блогу Дэвида Уолша
@media screen {
.page-break { height:10px; background:url(page-break.gif) 0 center repeat-x; border-top:1px dotted #999; margin-bottom:13px; }
}
@media print {
.page-break { height:0; page-break-before:always; margin:0; border-top:none; }
}
Комментарии:
1. Да, я использовал Google, чтобы найти это решение — просто еще один ресурс в моем распоряжении. Честно говоря, я не уверен, кого волнует, какую поисковую систему я использовал. Я тестировал в каждом браузере, который я установил (IE8, FF4, FF5, FF6 и FF8, Opera 11 и Safari 5) — работал во всех из них.
2. @JoshStodola — не имеет значения, откуда взят правильный ответ, если указан источник, и это помогает человеку, задающему вопрос.
Ответ №3:
Для немного лучшей поддержки браузера вы можете использовать это:
ul li {
page-break-after: avoid;
}
ul li:first-child {
page-break-after: auto;
}
Должно работать и в IE7. Но не будет работать в Firefox. Браузеры просто отстой, когда дело доходит до печати.