есть такой код ul li first letter font size 200 что он делает

Селекторы 3 Уровня

Please refer to the errata for this document, which may include some normative corrections.

Содержимое

6. Простые селекторы

6.6. Псевдоклассы

6.6.1. Динамические псевдоклассы

6.6.1.2. Псевдоклассы действий пользователя :hover,:active и :focus

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

Для селектора не определён случай, когда родительский элемент также как и дочерний имеет ‘ :active ’ или ‘ :hover ’.

Примечание: Если псевдокласс ‘ :hover ’ применяется к элементу, потому что его дочерний элемент был обозначен с помощью указательного устройства, то можно ‘ :hover ’ применять к элементу который не был указан.

Пример сочетания динамических псевдоклассов:

Последний селектор соответствует элементам a к которым применяется псевдокласс :focus и псевдокласс :hover.

Примечание: Элемент может быть и ‘ :visited ’ и ‘ :active ’ (или ‘ :link ’ и ‘ :active ’).

7. Псевдоэлементы

7.1. Псевдоэлемент ::first-line

Вышеуказанное правило приводит к «переводу букв первой строки каждого элемента р в верхний регистр».

Обратите внимание, что длина первой строки зависит от ряда факторов, в том числе от ширины страницы, размера шрифта и так далее. Таким образом, обычный абзац HTML документа, такой как:

строки, которые были разделены следующим образом:

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

7.1.1. Определение в CSS

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

В первой строке элемента со значением table-cell или inline-block первая строка не может быть отформатирована. Таким образом, в

Примечание: Обратите внимание, что в первой строке p в этом фрагменте:

Первый. вообще не содержится букв (при условии, что по умолчанию стиль используется в HTML 4 для br ). При этом слово «Первый» находиться не на первой форматируемой строке.

Агент пользователя должен действовать так, как будто псевдотеги ::first-line были вложены только внутрь самого первого блочного элемента охватывающего остальные элементы с текстом. (В CSS1 и CSS2 не было информации по этому поводу, поэтому разработчики не должны не полагаться на такое поведение.) Например, последовательность псевдотегов для

Псевдоэлемент ::first-line похож на элементы строчного уровня, но тем не менее имеет ряд отличий. К псевдоэлементу ::first-line могут применяться следующие свойства CSS: свойства font, свойства color, свойства background, ‘ word-spacing ’, ‘ letter-spacing ’, ‘ text-decoration ’, ‘ text-transform ’ и ‘ line-height ’. Агенты пользователей можнут также применять и другие свойства.

7.2. Псевдоэлемент ::first-letter

Псевдоэлемент ::first-letter изменяет первую букву элемента, если ей не предшествует любое другое содержимое (например, изображения или встроенные таблицы) находящееся в первой строке. Псевдоэлемент ::first-letter может быть использован для создания «начальных заглавных» символов и «буквиц» являющихся распространёнными типографскими эффектами.

Символы пунктуации (то есть символы, определённые в Unicode в «открывающих» (Ps), «закрывающих» (Pe), «начальных» (Pi), «конечных» (Pf) и «других» (Po) классах пунктуации), которые предшествует или следуют за первой буквой, должны быть включены в форматирование. [UNICODE]

есть такой код ul li first letter font size 200 что он делает. first letter2. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-first letter2. картинка есть такой код ul li first letter font size 200 что он делает. картинка first letter2. Please refer to the errata for this document, which may include some normative corrections.

::first-letter также применяется, если первая буква в действительности является цифрой, например цифра «6» в предложении «67 миллионов долларов это много денег».

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

В следующем примере с использованием CSS и HTML показано, как перекрывающие друг друга псевдоэлементы могут взаимодействовать. Первая буква каждого элемента P окрасится в зелёный цвет с размером шрифта ‘24pt’. Остальные буквы первой форматируемой строки будут окрашены в ‘ синий ’ цвет, а оставшаяся часть текста будет окрашена в ‘ красный ’.

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

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

Первый. первая строка не содержит никаких букв и псевдоэлементу ::first-letter ни чего не соответствует (при условии, что по умолчанию используется стиль для br в HTML 4). В частности, ему не соответствует буква «П» из слова «Первый».

7.2.1. Применение в CSS

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

Фиктивная последовательность тегов для данного фрагмента HTML:

с фиктивными тегами

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

При p::before , селектору p::first-letter соответствует буква «П» в «Примечание:».

есть такой код ul li first letter font size 200 что он делает. initial cap. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-initial cap. картинка есть такой код ul li first letter font size 200 что он делает. картинка initial cap. Please refer to the errata for this document, which may include some normative corrections.

В следующем примере с помощью CSS будет создана буквица первой сроки размером с две строки:

Данный пример может быть отформатирован следующим образом:

есть такой код ul li first letter font size 200 что он делает. first letter. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-first letter. картинка есть такой код ul li first letter font size 200 что он делает. картинка first letter. Please refer to the errata for this document, which may include some normative corrections.

Последовательность фиктивных тегов: :

Обратите внимание, что теги псевдоэлемента ::first-letter примыкают к содержимому (т.е. к начальному символу), в то время как открывающий тег псевдоэлемента ::first-line вставляется сразу после открывающего тега блочного элемента.

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

Источник

Псевдоклассы и псевдоэлементы в CSS (hover, before, first-child и другие)

есть такой код ul li first letter font size 200 что он делает. money birds728. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-money birds728. картинка есть такой код ul li first letter font size 200 что он делает. картинка money birds728. Please refer to the errata for this document, which may include some normative corrections.

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

Псевдоэлементы

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

Псевдоэлементы используются не сами по себе, а только в совокупности с основными селекторами:

Вначале следует имя основного селектора, затем пишется двоеточие, после которого идёт имя псевдоэлемента.

Далее рассмотрим некоторые псевдоэлементы и их свойства.

:first-letter

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

Рассмотрим применение first-letter на примере создание выступающего инициала:

И результат примера:

есть такой код ul li first letter font size 200 что он делает. psevdoel1. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-psevdoel1. картинка есть такой код ul li first letter font size 200 что он делает. картинка psevdoel1. Please refer to the errata for this document, which may include some normative corrections.

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

:first-line

Псевдоэлемент :first-line привязывает стиль к первой строке текста в элементе веб страницы. Посмотрим действие псевдоэлемента :first-line на абзац текста:

есть такой код ul li first letter font size 200 что он делает. psevdoel2. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-psevdoel2. картинка есть такой код ul li first letter font size 200 что он делает. картинка psevdoel2. Please refer to the errata for this document, which may include some normative corrections.

:after и :before

Псевдоэлементы after и before применяется для вставки контента после и перед содержимым элемента. Эти псевдоэлементы работают совместно со стилевым свойством content, которое определяет содержимое для вставки.

есть такой код ul li first letter font size 200 что он делает. psevdoel3. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-psevdoel3. картинка есть такой код ul li first letter font size 200 что он делает. картинка psevdoel3. Please refer to the errata for this document, which may include some normative corrections.

Как видим в конце каждого абзаца вставлен текст «webcodius.ru», как и прописано в css правиле в свойстве «content». Если в место «after» поставить «before», то текст вставиться в начале абзаца.

Псевдоклассы

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

При описании css правил псевдоклассы обычно используют в совокупности с основными селекторами:

Если псевдокласс указывается без селектора впереди (:hover), то он применяется ко всем элементам страницы.

Псевдоклассы условно делятся на три группы:

Псевдоклассы, определяющие состояние элементов

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

Псевдокласс :link применяется для не посещенных ссылок, т.е. ссылкам, на которые пользователь еще не нажимал. Записи a <. >и a:link <. >в таблице стилей дают одинаковый результат, поэтому псевдокласс :link можно не указывать.

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

Псевдокласс :active применяется к активным элементам. Например, для активации ссылки, необходимо навести на нее курсор и щелкнуть мышкой.

Псевдокласс :focus применяется к элементу при получении фокуса. Например, поле текстового ввода получает фокус, когда в него установлен курсор.

И последний псевдокласс :hоvеr применяется к элементу, когда на него наведен курсор мыши, но щелчка не происходит.

Для примера посмотрим как будут выглядеть ссылки в разных состояниях:

есть такой код ul li first letter font size 200 что он делает. ssylki. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-ssylki. картинка есть такой код ul li first letter font size 200 что он делает. картинка ssylki. Please refer to the errata for this document, which may include some normative corrections.

Псевдоклассы структуры документа

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

Первыми рассмотрим псевдоклассы :first-child и :last-child, которые привязывают стиль к элементам селектора, которые являются соответственно первым и последним дочерним элементом своего родителя. Чтобы стало понятней рассмотрим эти псевдоклассы на примере маркированного списка:

Результат примера: есть такой код ul li first letter font size 200 что он делает. first child. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-first child. картинка есть такой код ul li first letter font size 200 что он делает. картинка first child. Please refer to the errata for this document, which may include some normative corrections.

В этом примере с помощью правила CSS «li:first-child» мы говорим браузеру, что стиль необходимо применить к элементу li, который идет первым в своем родительском элементе. А с помощью селектора «li:last-child» элемент должен быть последним. Таким образом, с помощью свойств css для настроек отображения шрифтов, мы указали, что первый элемент списка должен быть выделен жирным шрифтом, а у последнего элемента установили шрифт красного цвета.

Следующий псевдокласс :only-of-type, который применяется к дочернему элементу указанного типа, только если он единственный у своего родителя.

есть такой код ul li first letter font size 200 что он делает. only of type. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-only of type. картинка есть такой код ul li first letter font size 200 что он делает. картинка only of type. Please refer to the errata for this document, which may include some normative corrections.

В примере псевдокласс : only-of-type применяется к элементу , в правилах стиля которого размер шрифта увеличивается в два раза. Размер шрифта увеличивается только у тех гиперссылок, которые у своих родителей (в данном случае это тег

) встречаются только один раз.

Псевдокласс :nth-child позволяет привязать стиль к элементам Web-страницы, на основе их нумерации в дереве элементов:

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

Например, как выделить все четные строки таблицы цветом? В этом случае идеально поможет псевдокласс :nth-child:

есть такой код ul li first letter font size 200 что он делает. nth child. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-nth child. картинка есть такой код ul li first letter font size 200 что он делает. картинка nth child. Please refer to the errata for this document, which may include some normative corrections.

В коде примера запись tr:nth-child (2n) означает, что стиль необходимо привязать ко всем элементам tr, с помощью которых формируются строки таблицы (об этом мы говорили в статье как вставить таблицу на html-странице). Причем порядковый номер строк относительно родительского элемента table должен удовлетворять формуле 2n, в которую браузер вместо n подставляет целые числа 0, 1, 2. В итоге получается, что стиль применяется к строкам под номерами 2, 4, 6 и т.д.

Псевдоклассы :not и *

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

Стиль будет привязан к элементам веб страницы, удовлетворяющим основному селектору и не удовлетворяющему селектору выбора. Например:

В результате этого css правила, текст всех заголовков h1 окрасятся в красный цвет, кроме того у которого атрибут id будет равен main.

И последний на сегодня псевдокласс * («звездочка»), который обозначает любой элемент html страницы. Он может потребоваться в случае, если необходимо установить одновременно один стиль для всех элементов веб-страницы, например, задать шрифт или начертание текста. Синтаксис:

Например, чтобы установить размер текста для всех элементов документа можно использовать следующее правило css:

На этом все, до новых встреч на страницах блога!

Источник

Тест «Тестирование по C#»

Государственное автономное профессиональное образовательное учреждение Чувашской Республики «Межрегиональный центр компетенций – Чебоксарский электромеханический колледж» Министерства образования и молодежной политики Чувашской Республики

Зам. Директора по УМНР

Задания для рубежного контроля

МДК.02.01 Разработка, внедрение и адаптация программного обеспечения отраслевой направленности

09.02.05 Прикладная информатика

А1. Какая запись подразумевает, что фото размещено на уровень выше от документа? ;

есть такой код ul li first letter font size 200 что он делает. foto. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-foto. картинка есть такой код ul li first letter font size 200 что он делает. картинка foto. Please refer to the errata for this document, which may include some normative corrections.

есть такой код ul li first letter font size 200 что он делает. foto. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-foto. картинка есть такой код ul li first letter font size 200 что он делает. картинка foto. Please refer to the errata for this document, which may include some normative corrections.

есть такой код ul li first letter font size 200 что он делает. foto. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-foto. картинка есть такой код ul li first letter font size 200 что он делает. картинка foto. Please refer to the errata for this document, which may include some normative corrections.

А2. Текст заключённый в данный тег выводится браузерами на экран в том виде в котором он был набран, т.е. со всеми пробелами и переносами строк ;

А3. Какая запись подразумевает, что фото размещено на уровень выше от документа? ;

есть такой код ul li first letter font size 200 что он делает. foto. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-foto. картинка есть такой код ul li first letter font size 200 что он делает. картинка foto. Please refer to the errata for this document, which may include some normative corrections.

есть такой код ul li first letter font size 200 что он делает. foto. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-foto. картинка есть такой код ul li first letter font size 200 что он делает. картинка foto. Please refer to the errata for this document, which may include some normative corrections.

есть такой код ul li first letter font size 200 что он делает. foto. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-foto. картинка есть такой код ul li first letter font size 200 что он делает. картинка foto. Please refer to the errata for this document, which may include some normative corrections.

А4. Выберите правильно записанный код для того чтобы изменить шрифт документа ;

Эта строчка будет написана с помощью шрифта Arial

Эта строчка будет написана с помощью шрифта Arial

Эта строчка будет написана с помощью шрифта Arial

Эта строчка будет написана с помощью шрифта Arial *

А5. Сколько в наборе тегов html языка имеется типов заголовков? ;

А6. В каком расширении сохраняются файлы при работе в css? ;

А8. Для чего служит тег "link"? ;

сообщает браузеру, какой синтаксис использовать для правильной интерпретации стилей

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

А9. Какое свойство используется для задания отступов у блока?

А 10. Есть такой код : ul li:first-letter . Что он делает?

Делает первую букву у первого элемента в нумерованном списке размером 200%. *

Ничего не делает, так как псевдоэлемента first-letter вообще не существует.

Делает первую букву у каждого элемента ненумерованного списка размером 200%.

Делает первую букву у первого элемента в ненумерованном списке размером 200%.

А11. Какое свойство используется для задания полей у блока?

А12. Какой вариант задания цвета НЕ сработает?

А13. Выберите верный php тэг.

А15. PHP код не может быть встроен в HTML. Это выражение…

А16. Каждое PHP выражение должно заканчиваться..

А17. Какой HTML атрибут используется для создания встроенных стилей?

А18. Какой из следующих операторов используется для конкатенации строк?

А19. CSS – это аббревиатура от:

Креативные таблицы стилей

Красочные таблицы стилей

Каскадные таблицы стилей*

Компьютерные таблицы стилей

А20. Как задать цвет фона для всех элементов h1?

А1. С помощью параграфа можно расположить наш текст по левому краю, выберите правильно записанный код

Источник

Псевдоэлемент ::first-letter

Псевдоэлемент ::first-letter определяет стиль первого символа в тексте элемента, к которому добавляется. К этому псевдоэлементу могут применяться только стилевые свойства, связанные со свойствами шрифта, полями, отступами, границами, цветом и фоном.

Синтаксис

Обозначения

ОписаниеПример
Указывает тип значения.
A && BЗначения должны выводиться в указанном порядке.&&
A | BУказывает, что надо выбрать только одно значение из предложенных (A или B).normal | small-caps
A || BКаждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке.width || count
[ ]Группирует значения.[ crop || cross ]
*Повторять ноль или больше раз.[, ]*
+Повторять один или больше раз.+
?Указанный тип, слово или группа не является обязательным.inset?
Повторять не менее A, но не более B раз.
#Повторять один или больше раз через запятую.#

Пример

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

Взгляд Оли опустился на пол, и она вскрикнула. В пустом помещении никого не было, и лишь на полу валялась порванная туфля Паши.

Источник

«Загадочные отступы» между инлайн-элементами

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

В этой статье мы попытаемся понять, что же из себя представляют эти загадочные «Отступы», что это за звери и с чем их едят. Так же рассмотрим, что такое inline-block, и почему после себя он ставит эти непонятные интервалы. Ну, и, самое главное, мы увидим несколько универсальных решений данного вопроса и, конечно же, обсудим все их стороны.

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

inline-block

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

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Как видно из примера, inline-block чувствует высоту и ширину, которую мы ему прописали. Так же можно заметить одну интересную штуку, наш подопечный выровнялся по вертикали, выровнялся так, как и должны выравниваться большинство инлайн-элементов в html, т.е. по базовой линии (baseline), т.е. выравнивается наш блок относительно своего текста, который в нём находится. Добавляем текста в блок и смотрим результат.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Блок выровнялся по базовой линии. Чего и следовало ожидать.
Сразу же приведу несколько разных примеров, поведения inline-block с разным вертикальным выравниванием.

Тут я продемонстрировал три разных выравнивания, но на самом деле их намного больше, если интересно, то вот здесь описаны все возможные варианты. В данной статье нет смысла всех их описывать. Просто учитывайте это, при работе с inline-block.

inline-block — как буква

Одна из главных вещей, которые вы должны знать, это то, что наш коробок со спичками inline-block — является по сути обычной буквой — символом, т.е. весь наш строчный блок составляет всего лишь одну букву в строке, одну единицу. Даже не смотря на то, что содержит в себе кучу других символов или элементов. Именно по этой причине inline-block не «разрываются», как строчные элементы, а переносятся на следующую строку целиком. Ну и соответственно, если рядом с inline-block не будет пробелов, то расстояние между ним и соседними буквами будет обычный межбуквенный интервал (трекинг), которым можно управлять (кернинг). Если есть пробелы — до соседней буквы будет этот же интервал плюс ширина пробела.
Переваривайте эту информацию и идёмте дальше.

Почему в статье я использую именно inline-block?

На самом деле «Проблема» пробелов для inline-block и обычных инлайн элементов — является общей. Т.е. и с теми и с другими происходят идентичные вещи. Ненавистные отступы, появляются у тех и у других. Просто дело в том, что:
Во-первых, inline-block имеет больше возможностей, таких например, как задания ширины или высоты и т.д.
Во-вторых, мне всё таки хотелось немного объяснить вам, что такое inline-block и что они из себя представляют, всё же они относятся к строкам, как-никак.
Ну и в-третьих это то, что с inline-block связаны определённые проблемы, в браузере Safari, о которых, мне бы хотелось, чтобы вы знали.
Так что я думаю, что знакомство с этим поведением строчно-блочного элемента будет для вас полезным делом и, безусловно, расширит ваш кругозор.

Загадочные отступы

Познакомившись поближе со строчно-блочным элементом, мы можем смело двигаться дальше, к демонстрации и ответам на вопрос: «Откуда берутся отступы после инлайн элементов?». Для того, чтобы понять, о чём идёт речь, приведу код и скриншот с проблемой.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

На картинке отчётливо видны пробелы между пунктами меню. Откуда же они берутся? Причина кроется в том, что, как мы уже выяснили, inline-block ведет себя, как обычная буква, а значит так же, как и простой текст — имеет пробелы между словами. Эти пробелы можно отчётливо наблюдать в разных веб-инспекторах, например таких как «IE WebDeveloper» для Internet Explorer.
В итоге мы видим ту самую «неприятность», из-за которой мы все тут и собрались.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Наша задача

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

Материал для работы

Вариант 1 — margin-left

Первым у нас на очереди выступает левый отрицательный margin. Посмотрим, как он сможет помочь нам.
Код CSS для наглядности:

Из кода видно, что для общего списка я выставил шрифт Verdana и размер шрифта в 14px (в наших примерах будет отталкиваться от этих значений). Ну и, конечно же, левый отрицательный margin, равный -.36em. Как вы могли заметить, для нашей цели я выбрал именно масштабируемую единицу длины (em), потому что, как мы уже знаем, наш пробел пляшет от размера шрифта, а значит, может масштабироваться в зависимости от него. Долго повозившись со значениями, я определил, что -.36em) подходит для нашего шрифта лучше всего (для иного придётся подбирать другие значения), так что оставим, пожалуй, именно этот масштаб. Посмотрим на результат:

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Да, действительно, на данный момент во всех браузерах всё здорово и смотрится одинаково. Хм… неужели мы добились своей цели? Давайте проверим это, сделав размер шрифта, к примеру, в два раза больше.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Как можно видеть, мы достигли своей цели, но это до тех пор, пока мы не поменяли шрифт, например, на Arial (предварительно подогнав под него левый, отрицательный margin)

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Выставив фон нашему списку, мы можем заметить, что теперь результаты немного разнятся в браузерах Chrome, Opera 11.53, IE6-8 и Firefox 8, IE 9. В первых всё осталось на своих местах, а вот в последних можно заметить небольшой отступ справа, что говорит о том, что всё-таки есть риск получить немного не ту картину, которую мы задумывали изначально. Как вариант, конечно же, можно подогнать спец. значения для Firefox 8 и IE 9 отдельно, но, опять же, это не очень хорошее решение, так как во-первых, это по сути костыль, а во-вторых, не даёт полной универсальности, ведь никогда не знаешь, при каких размерах и как, поведут себя остальные браузеры.

В общем, я, лично, сделал вывод, что это вполне себе нормальный и жизнеспособный вариант, в фиксированной ситуации можно подогнать размеры и будет всё в порядке. Ряд минусов конечно же тоже есть, в виде обнуления margin-left у первого пункта + подгонка значений для разных браузеров, ну и… конечно же есть доля риска, из-за которой могут быть, хоть и не большие, но какие-то отличия с отступами, при разных шрифтах и их размерах.

Вариант 2 — font-size

Как вы уже знаете, font-size влияет на размер шрифта элемента, делая его больше или меньше, в зависимости от своего значения. Пробел — это символ, который исходит от этого самого размера шрифта, а значит, с помощью font-size мы можем попробовать воздействовать на него, например, выставив его значение в ноль и тем самым, возможно полностью «скрыть» наш ненавистный пробел. Давайте проверим это на деле.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Что произошло с символами? Куда они все пропали? На самом деле всё просто. font-size наследуемое свойство, а значит, выставив родителю (в нашем случае UL) какое либо значение, отличное от значения по умолчанию, мы должны возвратить font-size в прежнее состояние, у потомков (в нашем случае у LI).

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Отлично! Теперь всё работает! Но везде ли? Проверяем… упс… к сожалению почти.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Как видно из скриншотов, Safari подвёл нас, напрочь отказавшись обнулять наш межсловный символ :(. Почему же так произошло? Не найдя ответа на этот вопрос, я рискнул предположить, что всё-таки это ни что иное, как самый настоящий баг браузера Safari и поэтому, нам нужно, либо искать вменяемое лекарство от этого бага, либо отказываться от этого способа, полностью. Исключать этот способ из списка не очень хочется, потому что, во-первых, этот вариант не работает лишь в Safari, а во-вторых, моя интуиция мне подсказывала, что решение всё же имеется. В итоге спортивный интерес взял вверх и решение всё таки нашлось! Да, и при чём оно оказалось для меня приятной неожиданностью. Ответ кроется в свойстве display: table, которое вешается на контейнер с пунктами (в нашем случае UL). Проверим.

А вот и скриншот из Safari:

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Супер! Сработало! Но как же это так? Возможно, при display:table движок воспринимает строку блоков внутри как «что-то вроде table-cell», т.е. ячеек таблицы, в каких-то FF до 3.6, если я ничего не путаю, был похожий баг.

Чем это может нам грозить?

Есть пару мелких недостатков, о которых следовало бы знать.
1. Во всех браузерах, кроме Firefox, точкой отсчёта позиционированных элементов являются ближайший предок с relative, т.е. это может быть та же ячейка (TD). Но у нас тут не TD, а LI, так что в этом плане проблем у нас точно не будет. Но проблемы будут, если мы захотим позиционировать сами LI, внутри UL, а так как UL у нас — это, по сути, таблица, то Firefox откажется позиционировать пункты относительно её. Но тут не стоит беспокоиться, так как в этом случае на помощь к нам придёт обычная обёртка (например div) для элемента UL.
* Кстати, спустя несколько лет, я всё таки нашёл решение этой проблемы.
2. Второй нюанс — ширина. display:table по умолчанию не растягивается на доступное пространство, так что может понадобиться еще выставление ширины контейнеру (а при наличии бордеров/паддингов — box-sizing: border-box c нужными префиксами вдобавок).
Это что касалось самого display:table, а что же сам font-size? У него есть минусы? Да, есть, пожалуй, один неприятный недостаток. Из-за нулевого значения font-size у родителя, мы не можем применять масштабируемые единицы длины к потомкам, т.к. они отталкиваются от наследуемого размера шрифта и соответственно от нуля в нашем случае. Ну и плюс ко всему, это то, что всегда надо быть начеку и смотреть, чтобы у потомков был переназначен размер шрифта.
Ну а так в целом способ, вполне себе рабочий, если не считать нюансы. Так что смотрим пример в действии и идём дальше.

Вариант 3 — letter-spacing

Третьим номером у нас идёт letter-spacing. Чуть ранее мы выяснили, что это свойство влияет на интервал между символами, а так как наш inline-block по сути и есть один, большой символ, то letter-spacing всё таки должен помочь в решении нашей задачи. Как и в прошлый раз, я повозился с масштабом и выяснил, что -.36em будет как раз то, что нужно для Verdana.
* Да, и ещё стоит учесть, что letter-spacing, как и font-size, наследуемое свойство, поэтому нам придётся проделывать ту же операцию с обнулением потомков, что и во втором варианте.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Отлично, сами пункты вроде бы состыковались так, как нам нужно. «Вроде бы» — я сказал не случайно, а почему, вы поймёте из следующих скриншотов.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Во всех браузерах, кроме Opera, мы можем наблюдать вполне себе отличную картину, но вот в самой Opera к сожалению всё наоборот. Как оказалось, Норвежцы считают, что letter-spacing может влиять на всё, кроме пробела. Видимо из-за того, что символ пробела означает конец слова, а значит и letter-spacing заканчивает на этом свою работу, так как предназначен для сдвижки/раздвижки букв, именно внутри слова (в т.ч. для кернинга вручную). И тут не имеет значения, что inline-block тоже по сути буква, после неё есть пробел, а значит в любом случае, слово по факту, закончилось.
Считать ли это багом Opera? Ну не знаю, ситуация двоякая, и те и другие по своему правы, так что предлагаю оставить это на совести самой Opera, а самим отправиться на поиски решения этой проблемы.

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

Да, вот теперь всё отлично, font-size действительно смог нам помочь. Из этого я сделал вывод, что по сути можно пользоваться обоими вариантами в равной степени: font-size + display-table или letter-spacing + font-size. Т.е. как в первом, так и во втором случае нам требуются вспомогательные инструменты в виде дополнительных свойств.

Вариант 4 — word-spacing

Сразу же хочется отметить, что word-spacing и letter-spacing похожи друг на друга и отличаются только лишь тем, что первый работает с расстоянием между символами, а второй — между словами. При этом word-spacing так же имеет свои недостатки, но в отличие от letter-spacing, с недостатками word-spacing можно бороться, что не может не радовать.
* Также стоит отметить, что word-spacing тоже наследуемое свойство, поэтому в целом код будет напоминать код с letter-spacing. Так что подбираем значение и в путь.

По коду вроде всё уже ясно, переходим к скриншотам:

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Ну и конечно же снова не обошлось без происшествий. Но теперь уже оба webkit-a (Chrome и Safari) показали нам свои недостатки. Как мы можем наблюдать, word-spacing в этих браузерах вообще не сработал, как будто бы мы его и не назначали. Поведение webkit-ов в данной ситуации, скорее всего, можно назвать багом, так как свойство, которое мы тут применяли, предназначено именно для межсловных расстояний. Доказательством в пользу бага служит то, что для обычных inline элементов word-spacing как раз таки работает в webkit так, как и должен, а вот для inline-block-ов к сожалению нет.

Первый вопрос, который вы зададите, будет: «А есть ли решение у данной проблемы?». С радостью отвечу вам, что ДА! И, как, ни странно, этим решением является снова наш старый, добрый display:table, который помог нам при проблемах в Safari, во втором варианте с font-size. Так что смело добавляем это правило и смотрим результат.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Да, вы не ошиблись. display: table действительно помог нам решить баг webkit-ов. Недостатки этого лечения, собственно точно такие же, как я приводил во-втором варианте, т.е. это позиционирование и задания ширины в контейнере. В остальном этот способ я лично считаю более уместным, чем все предыдущие предшественники, так как, во-первых, мы всё таки решаем проблемы с межсловным расстоянием (word-spacing как раз и создан для этого), во-вторых, решение для проблемы webkit-ов вполне безобидное, если не считать пару нюансов, ну и в-третьих, я, тестировал этот метод с разными размерами шрифта и даже тут ничего страшного не заметил. Так что привожу работающий пример, смотрим и идём далее.

Вариант 5, 6 — Соединение элементов

Эти два решения, я решил объединить в одно целое, так как они схожи по своей сути и делают почти одно и то же, т.е. состыковывают элементы, убирая между ними пробелы.

HTML первого варианта:

Ну и второго соответственно:

А CSS для обоих вариантов будет таким:

Ну и конечно же, скриншоты:

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

Как видно из кода, в первом варианте мы просто пристыковали элементы вплотную, перенеся закрывающие теги вплотную к открывающим. А во втором — поместили между границами элементов комментарии, заменяя ими наши пробелы. Т.е. фактически мы намеренно лишили элементы каких либо отступов между ними, специально соединив их разными способами. При этом, как можно заменить, у этих вариантов есть хороший плюс, для них не требуются никакие спец. свойства и костыли в CSS, они работают сами по себе, при чём во всех браузерах, начиная с IE6+.

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

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

Вариант 7

Как оказалось, на свете есть ещё более простое, а главное, абсолютно законное решение, которым я хочу поделиться. Дело в том, что любая спецификация HTML (но не XHTML), позволяет нам опускать закрывающие теги у некоторых элементов, т.е. разрешает их отсутствие. В спецификации HTML5 таких элементов целых 18 штук. Это означает, что мы, на вполне законных основаниях, можем пользоваться этим преимуществом. Ведь никто не запрещает нам это сделать, не правда ли?)
В нашем случае элементы попадают в этот список, так что воспользуемся этим.

есть такой код ul li first letter font size 200 что он делает. image loader. есть такой код ul li first letter font size 200 что он делает фото. есть такой код ul li first letter font size 200 что он делает-image loader. картинка есть такой код ul li first letter font size 200 что он делает. картинка image loader. Please refer to the errata for this document, which may include some normative corrections.

*Стоит заметить, что в IE6-7, например, опциональные закрывающие теги в списках всё равно игнорируются, поэтому там этот метод получается «автоматом». Именно из-за этого в первом варианте c отрицательным левым margin-ом, мы, отдельно, обнуляли margin-left для этих браузеров.
Этот способ мне кажется наиболее удачным, одновременно лёгким и удобным, чем все остальные, которые мы рассматривали в этой статье. Недостатком лишь стоит назвать то, что такую структуру не воспринимают любые XML-парсеры.

Вывод такой, что этот метод не подходит «фанатикам валидности ради валидности», выбирающим XHTML-доктайп, но практикам, ориентирующимся на современные спецификации и реальный результат, отказываться от такого решения незачем =)

Резюме:

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

Все варианты воедино:

1. Результат с margin-left (Почти рабочее решение)
2. Решение с font-size (Рабочее решение)
3. Результат с letter-spacing (Работающее решение)
4. Результат с word-spacing (Рабочее решение)
5. Вариант с намеренно прижатыми элементами (Рабочее решение)
6. Решение с незакрытыми тегами (Рабочее решение)

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *