воскресенье, 29 января 2012 г.

2.4.8 Никогда не начинайте страницу с последней строки многострочного параграфа

“Последняя строка из параграфа, перенесенная на новую страницу, называется вдовой. У нее есть буде, но нет прошлого, и она выглядит укороченной и несчастной”.

В CSS 2 был введен всесторонний контроль разрыва страниц, однако поддержки браузеров ограничиваются пока только одной лишь Opera 9. Единственные страничные свойства, которые поддерживают Internet Explorer 7, Safari 3 и Firefox 2 – это ‘page-break-before’ и ‘page-break-after’ (это также относится к IE8 и Firefox 3 beta в момент написания статьи).

Свойства ‘page-break-before’ и ‘page-break-after ' позволяют сказать, когда должен произойти разрыв страницы - до или после указанного элемента. Следующий пример запускает новую страницу каждый раз, когда встречается заголовок ‘h1’ и после каждого раздела.

h1 {
   page-break-before:always }
.section {
   page-break-after:always }

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

.dontsplit {
   page-break-before:always }

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

Будущее.

В сущности, контроль вдов и сирот в настоящее время невозможен для подавляющего большинства людей. Однако поддержка CSS 2 будет со временем возрастать, так что если вы пишете в печатном стиле, то стоит учесть свойства, которые указаны в CSS 2. Родственное свойство к 'page-break-after', указанному ранее, свойство 'page-break-inside', которое останавливает элементы промежуточных страниц. Например вы можете применить это правило ко все рубрикам:

h1, h2, h3, h4, h5, h6 {
   page-break-inside:never }

Точные вдовы и сироты также доступны через свойства ‘вдова’ и 'сирота'. Значение свойства – минимальное количество линий, которым позволено быть вдовами или сиротами. Например, вы можете оставить менее четырех строк параграфа позади или разрешить к печати на новой странице, используя следующее:

p {
   widows:4;
   orphans:4 }

2.4.6 Короткие цифровые или математические выражения с жестким пробелом

“Жесткие пробелы полезны для предотвращения разрывов строк в пределах фраз таких как, ‘6,2 мм’, ‘3 дюйма’, ‘4 × 4’, или фразы типа ‘стр. 3’ и ‘глава 5’”.

В HTML жесткий пробел известен как неразрывный пробел и вставляется с помощью кода  , например:

1 inch is equivalent to 2.54 cm.

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

$search = '/([0-9]) ([a-zA-Z])/';
$replace = '$1 $2';
$text = preg_replace($search,$replace,$text);

Эта функция ищет последовательности из цифр, ставит после них пробел и букву, а затем заменяет пробел неразрывным пробелом. Это будет касаться случаев, таких как ‘2,54 см’. Для такой фразы, как ‘глава 5’ было бы лучше создать набор лозунгов, а не присоединять любое число к предыдущей строке. Кроме того, правила должны быть созданы для обработки общих математических операций, таких как ‘4×4’.

2.4.5 Перенос в соответствии с конвенцией языка

“В английском языке разрешены такие переносы ‘cab-ri-o-let’, а во французском только такие ‘ca-brio-let’. Конвенции каждого отдельного языка должны быть соблюдены, в идеале, даже при использовании одного иностранного слова или краткой цитаты”.

Эта рекомендация легко может быть достигнута, при расстановке переносов вручную. См. § 2.4.1 для получения дополнительной информации по ручной расстановке переносов.

Будущее.

Переносы будут включены в текстовый модуль CSS 3, но на момент написания статьи, функция определения переносов еще не готова. В настоящее время страничный модуль CSS 3 первоначально предлагают более подробную информацию о свойствах переноса. Выбор словаря переносов должен автоматически зависеть от языка документа. Язык документа должен быть указан в заголовке HTTP, но также может быть отождествлен с заметки:

<html lang="en"> ... </html>

У текстового модуля CSS 3 также есть свойство ‘hyphenate-dictionary’, указывающее какой словарь переносов использовать. Например:

html[lang=en] {
  hyphenate-dictionary:url(hyph_en.dic) }
html[lang=fr] {
  hyphenate-dictionary:url(hyph_fr.dic) }

Значение авто будет означать, что должны быть использованы встроенные словари, если таковые имеются.

2.4.3 Избегать более трех последовательных строк с переносами

Эта рекомендация легко может быть достигнута, если расставлять переносы вручную. См. § 2.4.1 для получения дополнительной информации по расстановке ручных переносов.

Будущее.

Переносы будут включены в текстовый модуль CSS 3, но на момент написания статьи, функция определения переносов еще не готова. В настоящее время страничный модуль CSS 3 первоначально предложил более подробную информацию о свойствах переноса, среди которых есть свойство 'hyphenate-lines', которое определяет максимальное число строк с последовательными переносами. Например:

p {
  hyphenate: auto;
  hyphenate-lines: 3; }

Не проставленное значение означает, что нет ограничений на количество строк с переносами.

2.4.1 В строках с переносами оставлять, по крайней мере, 2 знака до и 3 знака после

“’Fi-nally’ является условной пригодной формой для окончания строки, а ‘final-ly’ – нет, поскольку на перенос остается слишком мало знаков”.

В отличии от обработки текстов и верстки программного обеспечения, до сих пор нет какой-либо автоматической расстановки переносов, встроенной в браузеры. Лучший метод для вставки переносов – вручную.

Плавающие макеты и возможность изменения текста означают что в Вебе никто не знает какое слово придется на конец строки. Чтобы справится с этим в HTML есть два типа переносов – простой дефис и мягкий дефис. Браузеры относятся к простому дефису также как и ко всем остальным знакам. Мягкий дефис показывают браузеру в каком месте слова перенос может быть удачным и должен быть отображен когда слово разбивается на две строки.

Мягкий дефис существует с HTML 3.2, и объясняется также в рекомендации HTML 4.0. Его код - ­ or ­ который используется следующим образом:

anti&shy;dis&shy;est&shy;ab&shy;lish&shy;ment&shy;arian&shy;ism

Который оказывается в вашем браузере таким: anti¬dis¬est¬ab¬lish¬ment¬arian¬ism anti¬dis¬est¬ab¬lish-ment¬arian¬ism anti¬dis¬est¬ab¬lish¬ment¬arian¬ism.

По определению, мягкий дефис должен быть использован только тогда, когда слово переносится. Поддержка браузеров была различная, но ситуация улучшилась в последнее время. Internet Explorer 6 трактует мягкий дефис правильно, как и Opera, Safari 2 и Firefox 3. Однако старшие Gecko-браузеры, такие как Firefox 2 скрывают все мягкие дефисы и не выполняют никаких переносов. В отличие от Safari 1 отображает все мягкие переносы независимо от того, переносится ли слово.

Будущее.

До недавнего времени текстовый модуль CSS 3 содержал свойство переноса, которое настраивалось на авто или отключалось. Это свойство было введено для автоматической расстановки переносов в браузерах и требовало наличие словаря переносов на том языке, на котором был текст с переносами. Например:

p {
  hyphenate: auto; }

На момент написания последнего рабочего проекта, в марте 2007 года, говорится, что функция определения переноса еще не готова, но вполне вероятно, что будут введены современные средства управления переносов. CSS 3 страничный модуль Медиа первоначально предлагал более подробную информацию о свойствах переноса, среди них свойства дефис-до и дефис-после, которые определяют минимальное количество символов в переносимом слове и количество символов после переноса. Например:

p {
  hyphenate-before:2;
  hyphenate-after:3; }

2.3.3 Добавление разрыва до или после блока цитат

“Между тем, устанавливая блок цитат, должно быть визуальное различие между основным текстом и цитатой, и снова – между цитатой и последующим текстом”.

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

blockquote {
   margin:1.5em }

Как объяснялось в § 2.2.2, поля должны быть такого размера, чтобы ритм текста сохраняется. Если размер текста цитаты такой же, как и основной текст, разделяющие поля должны быть равными высоте строки.

2.3.2 В непрерывном тексте отметьте все параграфы после первого, с отступом не менее 1 em

“Орнаменты [...], снижение строк [...], снижение [...] и все остальное имеют свои области применения, но самое простой, безошибочный и ненавязчивый способ маркировки отступов – это простой отступ”.

Отступ первой строки абзаца, или любого блочного элемента достигается в CSS через свойство 'text-indent':

p {
   text-indent:1em }

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

p + p {
   text-indent:1em }

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

p {
   margin-bottom:0 }
p + p {
   text-indent:1em;
   margin-top:0 }

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

Следует отметить, что Интернет Експлорер не поддерживает смежный селектор. В предыдущих примерах, ИЕ6 не сделает отступа ни перед каким параграфом, кроме тех параграфов, которые будут отмечены строкой.

Отступы – это не единственный путь идентификации параграфа. Есть много альтернатив: простые блочные параграфы, орнаментированные отступы, орнамент в виде неразрывного потока или опущенная строка.

Блочные параграфы.

Как отмечалось ранее, блочные параграфы – это параграфы разделенные строкой – метод используется браузерами по умолчанию. Как объяснялось в § 2.2.2, поля разделения параграфов должны быть установлены в том же значение, что и высота строки, для того, чтобы сохранялся ритм текста.

Уменьшение

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

p {
   margin-bottom: 0 }
p + p {
   text-indent:-1.5em;
   margin-top:0 }

Орнаменты

Орнаментальные отступы, в отличие от стандартных отступов, не обязательно требуют использования свойства ‘text-indent’ для достижения основного эффекта (хотя оно может помочь ясности). Ключом к достижению этого эффекта является использование CSS 2.1: до псевдо-элемента указать орнамент. Следующий пример вставляет цветочные сердца в начале последующего параграфов:

p {
   margin-bottom: 0 }
p + p:before { 
  content: "2767"; 
  padding-right: 0.4em;
  margin-top:0 }

В приведенном выше примере, применяя ‘text-indent’ к параграфу приведет к возникновению орнамента в первой строке параграфа; чтобы отделить орнамент от контента нужно применить ‘padding-right’ к основному контенту.

Другое использование орнаментов, в качестве абзаца, должно иметь непрерывный поток текста с параграфами, разделенными орнаментом. Чтобы добиться этого, параграфы должны быть установлены для отображения в качестве встроенных элементов, с орнаментом установленным как показано раньше (в данном случае декоративные 'pilcrow’ используются вместо цветочных сердец):

p { display: inline }
p + p:before { 
  content: "2761"; 
  padding-right: 0.1em;
  padding-left: 0.4em }

Следует отметить, что упомянутые правила орнамента не будут работать в Internet Explorer (до версии 7 на момент написания статьи), так как он не поддерживает содержание свойства CSS. Кроме того, Firefox на Windows (проверено на XP SP2 на момент написания статьи) будут отображаться только те орнаменты, которые содержатся в текущем шрифте. По существу, эти ограничения означают, что вышеупомянутая техника не может полагаться на работу на машинах Windows, в настоящее время. Альтернативный метод – это использование фоновых изображений, или включение реальных изображений в код, который, в случае калибровки в EMS, изменялись бы в размере в пропорции к тексту.

Droplines.

Такие параграфы начинаются на одну строку ниже относительно конца предыдущего параграфа. В отличие от других упоминающихся стилей, таких параграфов в длинных текстах невозможно последовательно достичь в CSS без непомерно длинных файлов CSS или (предпочтительно) помощи JavaScript.

Техника, которая может быть применена, похожа на технику, используемую для непрерывного потока текста, который использует дисплей: встроенная для достижения горизонтального позиционирования. Как только параграфы позиционированы горизонтально, относительная высота эквивалентная высоте строки, применимая к последующим параграфам. Может создать желаемое вертикальное положение (и, следовательно, полный эффект снижения)

p {
  display: inline; 
  position: relative }
p + p {top: 1.3em }

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

p {
  display: inline; 
  position: relative }
p + p {top: 1.3em }
p + p + p {top: 2.6em }
p + p + p + p {top: 3.9em }

Указание лидирующих позиций таким образом, громоздкое, и вполне разумное для реализации в JavaScript. Техники могут быть применимы для показа материала, где есть только короткие промежутки текста.