Пробельные символы и форматирование ими кода в Html, а так же спецсимволы неразрывного пробела и другие мнемоники

19 июня, 2011

Здравствуйте, уважаемые читатели блога KtoNaNovenkogo.ru. Чуть ранее мы уже успели поговорить о том, что такое язык Html, также узнали про оформление в нем комментариев и назначение директивы Doctype. Сегодня у нас на очереди понятие пробела в ХТМЛ, а еще связанное с ним форматирование кода при его написании (для удобства последующего его чтения и восприятия).

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

Пробелы и пробельные символы в языке Html


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

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

В языке Html в качестве пробельных символов используются:

  1. пробел (самая широкая клавиша на клавиатуре без подписи)
  2. табуляция (соответствующая клавиша)
  3. перенос строки (клавиша Enter)

Именно по каким-то из этих символов пробела и будет осуществляться перенос строки при форматировании текста в браузере. У разных посетителей вашего сайта будут разные размеры экрана браузера и, следовательно, разбивка текста во всех этих случаях может происходить по-разному (если вы используете, например, резиновый макет). Типичным примером может служить поисковая выдача Яндекса, где макет подстраивается под размер экрана по ширине, но до определенного минимального размера.

Но даже если вы используете фиксированный макет, то все равно при написании статьи в визуальном редакторе используемого вами движка (CMS) вы не сможете точно знать, где именно будет осуществляться перенос строки и по какому именно пробельному символу.

В связи с этим возникает вопрос: как не допустить разрыва конструкций типа «100 руб.» при формировании переноса в браузере по символу пробела в Html коде? Ответом на этот вопрос может служить использование не обычного пробела, а спецсимвола неразрывного пробела, который может выглядеть как:

 

В коде это может выглядеть примерно так:

100 руб.

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

Визуальное форматирование кода для повышения его наглядности

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

Особенностью языка гипертекстовой разметки является то, что любое количество пробелов (или переносов с табуляцией) идущих подряд, браузером заменяется при разборе Html кода на один единственный пробел. Что это нам дает? Ну, давайте подумаем.

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

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

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

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

Уже после того, как вы все отладите и всесторонне протестируете, сможете сжать CSS (удалить из кода все пробелы) для повышения скорости загрузки.

Правда для такого рода визуального форматирования (которое не будет видно на вебстранице) чаще всего используют не сами пробелы, а именно символы табуляции и переноса строки. Есть такое правило — когда начинаете писать вложенный Html тег, то сделайте отступ с помощью табуляции (клавиша Tab на клавиатуре), а когда этот тег закрываете, то уберите отступ (сочетание клавиш Shift+Tab на клавиатуре).

Делать это нужно так, чтобы открывающий и закрывающий тэги были бы на одном вертикальном уровне (на одинаковом количестве табуляций от правого края страницы вашего Html редактора, например, Notepad++, о котором я писал тут). Кроме этого советую непосредственно после написания открывающего элемента сделать несколько переносов строки и сразу же прописать закрывающий на том же уровне (количестве табуляций), чтобы потом не забыть это сделать.

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

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

Спецсимволы или мнемоники в Html коде


Так, а теперь давайте поговорим о так называемых специальных символах, удобство использования которых я анонсировал в начале этой статьи. Спецсимволы еще иногда называют мнемоники или подстановки. Они предназначены для того, чтобы решить довольно давно возникшую в языке гипертекстовой разметки проблему, связанную с используемыми кодировками.

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

Кодировок существует очень много, но для языка Html по умолчанию была принята расширенная версия кодировок ASCII под названием Windows 1251 (CP1251).

В этой кодировке текста было возможно записать всего лишь 256 знаков — 128 от ASCII и еще 128 для букв русского языка. В результате возникла проблема с использованием на сайтах знаки, которые не входят в ASCII и не являются буквами русского языка, входящими в состав кодировки Windows 1251 (CP1251). Ну, вздумалось вам использовать тильду или апостроф, а возможности такой изначально в используемой языком Html кодировке не заложено.

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

В общем понимании, мнемоника — это такой знак, который начинается с амперсанда «&» и заканчивается точкой с запятой «;». Именно по этим признакам браузер при разборе Html кода выделяет из него спецсимволы. Сразу за амперсандом в цифровом коде подстановки должен следовать знак решетки «#», который иногда называют хеш. А уже потом следует цифровой код нужного символа в кодировке юникод.

В юникоде можно записать более 60 000 знаков — главное, чтобы нужный вам символ мнемоники поддерживался используемым на вашем сайте шрифтом. Есть шрифты с поддержкой почти всех знаков кодировки юникод, а есть варианты только с определенным набором символов.

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

Символ Назначение Мнемоника Код
  неразрывный пробел    
¡ перевёрнутый восклицательный знак ¡ ¡
¢ символ цента ¢ ¢
£ символ фунта £ £
¤ знак валюты ¤ ¤
¥ символ иены ¥ ¥
¦ разорванная вертикальная черта ¦ ¦
§ знак параграфа § §
¨ умлаут / трема ¨ ¨
© знак охраны авторского права © ©
ª порядковый индикатор (женский род) ª ª
« направленная влево двойная угловая кавычка « «
» направленная вправо двойная угловая кавычка » »
¬ знак «отрицание» (скобка) ¬ ¬
­ мягкий перенос (место возможного переноса) ­ ­
® знак правовой охраны товарного знака
не путать с ™ — символ товарного знака
® ®
¯ макрон ¯ ¯
° знак градуса ° °
± плюс-минус ± ±
² верхний индекс «2» ² ²
³ верхний индекс «3» ³ ³
´ акут ´ ´
µ значок микро µ µ
знак абзаца ¶ ¶
· интерпункт · ·
¸ седиль ¸ ¸
¹ верхний индекс «1» ¹ ¹
º порядковый индикатор (мужской род) º º
¼ простая дробь «одна четвёртая» ¼ ¼
½ простая дробь «одна вторая» ½ ½
простая дробь «одна треть» ⅓
¾ простая дробь «три четверти» ¾ ¾
¿ перевёрнутый знак вопроса ¿ ¿
маркер списка (буллит) • •
горизонтальное многоточие … …
штрих ′ ′
двойной штрих ″ ″
верхняя черта ‾ ‾
косая черта ⁄ ⁄
рукописная заглавная P = power set = Weierstrass p ℘ ℘
чёрная заглавная I = мнимая часть ℑ ℑ
чёрная заглавная R = вещественная часть ℜ ℜ
товарный знак ™ ™
буква Алеф — кардинальное число ℵ ℵ
влево ← ←
вверх ↑ ↑
вправо → →
вниз ↓ ↓
влево ◄
вверх ▲
вправо ►
вниз ▼
влево-вправо ↔ ↔
вниз с углом вправо = возврат каретки ↵ ↵
двойная стрелка влево ⇐ ⇐
двойная вверх ⇑ ⇑
двойная вправо ⇒ ⇒
двойная вниз ⇓ ⇓
двойная влево-вправо ⇔ ⇔
[ левая квадратная скобка [
] правая квадратная скобка ]
/ деление /
\ разность множеств \
для всех ∀ ∀
частичный дифференциал ∂ ∂
существует ∃ ∃
пустой набор = диаметр ∅ ∅
оператор набла = backward difference ∇ ∇
элемент из ∈ ∈
не элемент из ∉ ∉
содержит как член ∋ ∋
n-ary product = знак произведения ∏ ∏
n-ary sumation ∑ ∑
минус − −
оператор звёздочка ∗ ∗
квадратный корень = radical sign √ √
пропорционально к ∝ ∝
бесконечность ∞ ∞
угол ∠ ∠
логическое И = wedge ∧ ∧
логическое ИЛИ = vee ∨ ∨
пересечение = cap ∩ ∩
объединение = cup ∪ ∪
интеграл ∫ ∫
следовательно ∴ ∴
оператор тильда = varies with = подобно ∼ ∼
приблизительно равен ≅ ≅
почти равно = asymptotic to ≈ ≈
не равно ≠ ≠
идентично ≡ ≡
меньше или равно ≤ ≤
больше или равно ≥ ≥
подмножество ⊂ ⊂
включает в себя ⊃ ⊃
не включает в себя ⊄ ⊄
подмножество или эквивалентно ⊆ ⊆
включает в себя или эквивалентно ⊇ ⊇
плюс в круге = прямая сумма ⊕ ⊕
умножение в круге = векторное произведение ⊗ ⊗
up tack = ортогонально к = перпендикулярно ⊥ ⊥
оператор точка ⋅ ⋅
левая скобка округления вверх = apl upstile ⌈ ⌈
правая скобка округления вверх ⌉ ⌉
левая скобка округления вниз = apl downstile ⌊ ⌊
правая скобка округления вниз ⌋ ⌋
угловая скобка влево = бра ⟨ 〈
угловая скобка вправо = кет ⟩ 〉
ромб ◊ ◊
«пики» (картёжные) ♠ ♠
«трефы» = shamrock ♣ ♣
«червы» = valentine ♥ ♥
«бубны» ♦ ♦
' одинарная кавычка ' '
" двойная кавычка " "
& амперсанд & &
< меньше &lt; &#60;
> больше &gt; &#62;
Œ латинская заглавная лигатура OE &OElig; &#338;
œ латинская лигатура oe &oelig; &#339;
Š латинская заглавная S с птичкой &Scaron; &#352;
š латинская s с птичкой &scaron; &#353;
Ÿ латинская заглавная Y с двоеточием &Yuml; &#376;
ˆ акцент перевёрнутая птичка/circumflex accent &circ; &#710;
˜ малая тильда &tilde; &#732;
пробел длины N &ensp; &#8194;
пробел длины M &emsp; &#8195;
узкий пробел &thinsp; &#8201;
zero width non-joiner &zwnj; &#8204;
zero width joiner &zwj; &#8205;
left-to-right mark &lrm; &#8206;
right-to-left mark &rlm; &#8207;
неразрывный (неразделяемый) дефис / non-breaking hyphen   &#8209;
тире длины N &ndash; &#8211;
тире длины M &mdash; &#8212;
одиночная левая кавычка &lsquo; &#8216;
одиночная правая кавычка &rsquo; &#8217;
одиночная low-9/нижняя кавычка &sbquo; &#8218;
двойная левая кавычка &ldquo; &#8220;
двойная правая кавычка &rdquo; &#8221;
двойная low-9/нижняя кавычка &bdquo; &#8222;
крест/dagger &dagger; &#8224;
двойной dagger &Dagger; &#8225;
промилле &permil; &#8240;
одиночная левая угловая скобка (предложена, но ещё не стандартизирована ISO) &lsaquo; &#8249;
одиночная правая угловая скобка (предложена, но ещё не стандартизирована ISO) &rsaquo; &#8250;
евро &euro; &#8364;
Знак номера &#8470;
 ́ Знак ударения (ставится непосредственно после буквы, над которой должен изображаться) &#769;

Существует довольно интересный способ получения кода Html мнемоник для необходимого вам знака. Для этого достаточно будет открыть редактор Microsoft Word, создать новый документ и выбрать из верхнего меню «Вставка» — «Символ» (я пользуюсь 2003 версией, поэтому не знаю как сделать аналогичную операцию в более поздних версиях).

В открывшемся окне вам нужно выбрать шрифт, например, Times New Roman (или любой другой, который заведомо будет присутствовать на большинстве компьютеров посетителей вашего сайта — Courier или Arial, к примеру).

Добавьте из открывшегося списка в свой документ Word все нужные вам спецсимволы и сохраните данный вордовский документ как веб страницу (выбирается из выпадающего списка «.html» при сохранении). Ну, а затем вам лишь останется открыть эту веб страницу в любом Html редакторе (все тот же Notepad++ подойдет) и вы увидите все цифровые коды нужных вам мнемоник:

Способ немного сложноватый, но если приспичит использовать на странице своего сайта какой-нибудь редкий спецсимвол, то это будет проще, чем отыскивать в сети интернет таблицы, подобные приведенной чуть выше. Полученный код спецсимвола вам нужно будет вставить в нужное место и вместо него на веб странице браузер отобразит нужный вам знак (например, неразрывный пробел).

Неразрывный пробел и мягкий перенос в примерах


Как я уже упоминал выше и как вы можете видеть из приведенной чуть выше таблицы спецсимволов, некоторые мнемоники в Html получили кроме цифрового еще и символьное обозначение для их более простого запоминания. Т.е. вместо знака решетки «#» (хеша) в символьных вариантах используются слова. Например, все тот же неразрывный пробел может быть записан либо как &#160; (цифровая мнемоника), либо как &nbsp; (символьная).

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

Т.е., если вы пишите статью, в которой вам нужно будет в текст вставить, например, отображение тега < body> или же вам просто нужно вставить знак меньше (< ), то сделав это без использования подстановок на веб странице вы ничего не увидите, т.к. браузер, обнаружив «<» , поймет, что это Html тег, а не текст статьи.

Поэтому вам нужно будет вставить для решения подобной задачи следующую конструкцию:

&lt;body>

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

&amp;lt;

Это нужно будет сделать, чтобы получить на странице &lt;, а не отображение левой угловой скобки (<), в которую преобразует браузер мнемонику &lt;, обнаружив при разборе знак амперсанда. Хитро, но вы все поймете попробовав это на практике.

Также вы скорее всего будет использовать неразрывный пробел &nbsp;, который на веб странице будет выглядеть как обычный пробел, но при этом браузер не будет воспринимать его как пробельный символ вообще и не будет осуществлять по нему перенос (например, это будет уместно для таких словосочетаний, как 1400 гБ и т.п., которые не желательно будет разносить переносом по разным строкам):

1400&nbsp;гБ.

Иногда может возникнуть обратная ситуация, когда в тексте присутствуют очень длинные слова и хочется сделать так, чтобы при возникновении необходимости браузер мог бы разбивать это слова переносом. Для таких целей предусмотрен спецсимвол «мягкий перенос» &shy;

длинноепредлин&shyноеслово;

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

Удачи вам! До скорых встреч на страницах блога KtoNaNovenkogo.ru

Анализ сайта: Проверка Траста
Самое интересное и полезное из категории "Html для чайников"
  1. Директивы комментариев и Doctype в Html коде,
  2. Что такое язык гипертекстовой разметки Html и
  3. Html формы для сайта — теги Form,
  4. Таблицы в Html — основные (Table, Tr и
  5. Списки в Html коде — теги UL, OL,
  6. Как вставить в HTML ссылку и картинку

Комментарии
Сергей

Как всегда широко и открыто. Для новичков в самый раз. Дмитрий Вы молодец !

ApparaturaPC

Еще один RSS-читатель у Вас появился ;)

Пробелы (и табуляцию) надо использовать не только при форматировании HTML-кода, но и любого другого кода (на языках программирования), читабельность кода рулит.

Сейчас уже список Html мнемоник запомнить сложно, поэтому лучше пользоваться специальной программой по выбору этих мнемоник (но и за таблицу спасибо =)

andrew87

О, как я просил, в примерах проще понимать, а то html сам по себе сложен. А так — конкретная таблица и самые используемые символы приведены.

Давайте поскорее уже о раскрутке, можно пошагово или какие-то эксперименты и их результаты описать.

Scorpio

Интересный портал. Регулярно читаю, часто беру на заметки Ваши советы. Дмитрий у меня вопрос, возможно не по теме. Я тут вот прочел Методы управления поведения роботом от яндекса _http://help.yandex.ru/webmaster/?id=1111858 в которой говорится о таком мета теге как <link rel="canonical". Я вот тут заметил что у Вас в тайтле тоже он прописан. Так вот, он влият как нибудь на улучшение позиций в индексе? Если да то можете объянить как он работает ну или статью написать =)

Дмитрий

Scorpio: действительно, Яндекс, с опозданием всего на пару лет относительно Google и других мировых лидеров поиска стал учитывать тег rel="canonical". Я уже когда-то писал о нем и о способах его правильной настройки для WordPress — Новый тег CANONICAL, предназначенный для удаления дубликатов страниц из индекса поисковиков.

Nyukers

Здравствуйте Дмитрий. Все ссылки от статьи открываются в Новом Окне. А нельзя ли сделать в Новой Вкладке ?

Игорь

Спасибо за примеры и классную табличку. Всё это возьму на вооружение.

Андрей

Хорошая статья. Кстати по адресу http://sitemaker.x10.bz/cheat_sheets.php можно найти удобную и очень полную таблицу по мнемоникам.

Profi30

Дмитрий, спасибо. Сколько раз читал, столько раз брал на заметку темы, освещённые вами. Да и эта интересная тема. А главное, далеко не все знают. И если в разговоре мелькает какой из тегов такого плана, часто приходится отдельно объяснять, почему так, а не иначе.

Семён

Огромное спасибо Дмитрию за такую замечательную тему.

Евгений

Спасибо. Наконец исправил ошибку валидатора ;)

Кирилл

Спасибо)

Роман

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

Тут може бігати Ваша реклама !           &nbspНе відкладайте в довгий ящик !     &nbsp      У нас дешево і дієво !

Похоже на бред, или так и должно быть ?

Роман

Извините код не дало

В тэге налепил по паре штук &nbsp между фразами

Виктор

«Офтоп»;

Блок слева «Это не реклама, а похожие статьи с этого же сайта (ссылки открываются в новом окне):», мне кажется рекламой именно потому, что я не успел дочитать статью, отвлекся и забыл о чем думал, когда появилось оно(((((

Желательно и я думаю меня поддержат, чтобы это окно открывалось только в присутствии конца статьи, т.е я «дочитал», а тут оно.

«По теме»:

Отичная статья, правда я не нашел то что искал, буду искать дальше.

Написать

(обязательно)

(обязательно)

При вставке любого кода, пишите его между [php] и [/php]

Это не спам (обязательно)

Подписаться без комментирования