Семантика кода HTML всегда является горячим вопросом. Некоторые разработчики стараются всегда писать семантический код. Другие критикуют догматичных приверженцев. А некоторые даже понятия не имеют о том, что это такое и зачем оно нужно. Семантика определяется в HTML в тегах, классах, ID, и атрибутах, которые описывают назначение, но не задают точно содержание, которое в них заключено. То есть речь идет о разделении содержания и его формата.
Начнем с очевидного примера.
Плохая семантика кода
Хорошая семантика кода
Текст статьи, который кем-то написан.
Инко Гнито - ее автор.Заголовок статьи
Вне зависимости от того, считаете ли вы, что HTML5 готов к использованию или нет, наверняка использование тега Но не все так четко представляется тегами HTML5. Давайте рассмотрим набор имен классов и разберемся с тем, отвечают ли они требованиям семантики. Не семантический код.
Это классический пример. Каждая рабочая среда CSS для модульной сетки использует такого типа имена классов для определения элементов сетки. Будет ли это "yui-b", "grid-4", или "spanHalf" - такие имена ближе к заданию разметки, чем к описанию содержания. Однако их использование в большинстве случаев неизбежно при работе с шаблонами модульных сеток. Семантический код.
Нижний колонтитул (footer
) приобрел устойчивое значение в веб дизайне. Это нижняя часть страницы, которая содержит такие элементы как повторяющаяся навигация, права использования, информацию об авторе и так далее. Данный класс определяет группу для всех этих элементов без их описания. Если вы перешли к использованию HTML5, то лучше применять элемент Не семантический код.
Он точно определяет содержание. Но почему текст должен быть большим? Чтобы выделяться среди другого более мелкого текста? "standOut
" (выделение) больше подходит в данном случае. Вы можете решить изменить стиль для выделяющего текста, но ничего не делать с его размером, и в таком случаем название класса может привести вас в замешательство. Семантический код.
В данном случае речь идет об определении уровня важности элемента в интерфейсе приложения (например, параграфа или кнопки). Элемент с более высоким уровнем может иметь яркие цвета и больший размер, а элементы с низким уровнем могут содержать больше содержания. Но точного определения стилей в данном случае нет, поэтому код является семантическим. Данная ситуация очень похожа на использование тегов Семантический код.
Если бы каждое имя класса можно было так четко определить! В данном случае мы имеем описание раздела, который имеет содержание, назначение которого легко описать, также как и "tweets", "pagination" или "admin-nav". Не семантический код.
В данном случае речь идет о задании стиля для первого параграфа на странице. Такой прием используется для привлечения внимания читателей к материалу. Лучше использовать имя "intro", в котором отсутствует упоминание элемента. Но еще лучше использовать селектор для таких параграфов, например article p:first-of-type или h1 + p . Не семантический код.
Это очень обобщенное имя класса, которое используется для организации форматирования элементов. Но в нем нет ничего, чтобы касалось описания содержания. Различные теоретики семантики рекомендуют в таких случаях использовать имя класса наподобие "group". Вполне вероятно, что они правы. Так как данный элемент, несомненно, служит для группирования нескольких других элементов, и рекомендуемое название будет лучше описывать его назначение без погружения в детали. Не семантический код.
Слишком детальное описание формата содержания. Лучше подобрать другое имя, которое будет описывать содержание, а не его формат. Семантический код.
Класс очень хорошо описывает статус содержания. Например, сообщение об успешном завершении операции может иметь совершенно другой стиль от сообщения об ошибке. Не семантический код.
В данном примере имеется попытка задать определение формата содержания, а не его назначения. "plain-jane" очень похоже на "normal" или "regular". Идеальный код CSS должен быть написан так, чтобы не возникало необходимости в именах класса наподобие "regular", которые описывают формат содержания. Не семантический код.
Такого типа классы обычно используются для определения элементов сайта, которые не должны включаться в цепочку ссылок. В данном случае лучше использовать что-то наподобие rel=nofollow для ссылок, но не класс для всего содержания. Не семантический код.
Здесь имеется попытка описать формат содержания, а не его назначение. Допустим, что у вас на сайте есть две статьи. И вы желаете задать им разные стили. "Обзоры фильмов" будут иметь голубой фон, а "Горячие новости" - красный фон и шрифт большего размера. Один из способов решить задачу такой: Другой способ такой: Наверняка, если опросить нескольких разработчиков о том, какой код более соответствует требованиям семантики, большинство укажет на первый вариант. Он отлично соответствует материалу данного урока: описание назначение без ссылок на форматирование. А второй вариант указывает на формат ("blueBg" - имя класса, которое сформировано из двух английских слов, означающих "голубой фон"). Если вдруг будет принято решение поменять дизайн обзоров фильмов - например, сделать зеленый фон, то имя класса "blueBg" превратится в кошмар разработчика. А имя "movie-review" позволит абсолютно спокойно изменять стили оформления с сохранением отличного уровня поддержки кода. Но никто не утверждает, что первый пример лучше во всех без исключения случаях. Допустим, что определённый оттенок синего используется во многих местах на сайте. Например, он является фоном для некоторой части нижнего колонтитула и областей в боковой панели. Вы можете воспользоваться следующим селектором: Movie-review,
footer > div:nth-of-type(2),
aside > div:nth-of-type(4) {
background: #c2fbff;
} Эффективное решение, так как цвет определяется только в одном месте. Но такой код становится сложным для поддержки, так как имеет длинный селектор, сложный для визуального восприятия. Также потребуются другие селекторы для определения уникальных стилей, что приведет к повторению кода. Или вы можете использовать другой подход и оставить их разделёнными: Movie-review {
background: #c2fbff;
/* Определение цвета */
}
footer > div:nth-of-type(2) {
background: #c2fbff;
/* И еще одно */
}
aside > div:nth-of-type(4) {
background: #c2fbff;
/* И еще одно */
} Такой стиль помогает сохранять CSS файл более организованным (разные области определяются в разных разделах). Но платой является повторение определений. Для больших сайтов определение одного и того же цвета может доходить до нескольких тысяч раз. Ужасно! Вариантом решения может быть использование класса по типу "blueBg" для определения цвета один раз и вставки его в HTML коде, когда требуется использовать данный дизайн. Конечно, его лучше назвать "mainBrandColor" или "secondaryFont", чтобы отвязаться от описания форматирования. Можно пожертвовать семантикой кода в пользу сохранения ресурсов. Веб-дизайнеры и разработчики любят бросаться жаргонами и заумными фразами, которые нам иногда сложно понять. В этой статье речь пойдет о семантическом коде. Давайте разберемся, что же это такое! Что такое семантический код?
Даже если вы не веб-дизайнер, вы наверное знаете, что ваш сайт был написан в HTML. HTML был первоначально предназначен как средство описывающие содержание документа, а не как средство, чтобы сделать вид визуально приятным. Семантический код возвращается к этой оригинальной концепции и призывает веб-дизайнеров писать код, который описывает содержание, а не то как оно должно выглядеть. Например, заголовок страницы может быть запрограммирован следующим образом: Это заголовок страницы
Это сделало бы название крупным и жирным, придавая ему вид заголовка страницы, но в нем нет ничего, что описывает его как “заголовок” в коде. Это означает, что компьютер не может определить это как заголовок страницы. При написание названия семантически для того, чтобы компьютер распознавал его как “заголовок”, мы должны использовать следующий код: Внешний вид заголовка может быть определен в отдельном файле, который называется “каскадные таблицы стилей” (CSS), при этом не вмешиваясь в ваш описательный (семантический) код HTML. Чем важен семантический код?
Возможность компьютера правильно распознавать контент важно по нескольким причинам: Также у семантического кода есть и другие преимущества: Как убедиться в том, что веб-сайт использует семантический код?
На данный момент не существует инструмента, который может проверить наличие семантического кода. Все сводится к проверке наличия в коде цветов, шрифтов или макетов, вместо описания контента. Если анализ кода звучит страшновато, то прекрасной отправной точкой будет вопрос к вашему веб-дизайнеру - кодирует ли он соблюдая семантику? Если он тупо на вас смотрит или начинает нелепую болтовню, то тогда вы можете быть уверены, что он не кодирует данным способом. В этот момент вы должны решить, предоставите ли ему новое направление в работе, или найдете себе нового дизайнера?! Целью тегов HTML является передача смысла
документу. Не беспокойтесь о том, как ваша веб-страница выглядит. Сосредоточьтесь на значении каждого тега, который вы будете использовать. В зависимости от написанного вами содержимого, вы можете выбрать подходящий элемент, соответствующий смыслу текста. Диапазон
элементов достаточно широк, чтобы он подходил и для материалов общего
назначения (например, абзацы или списки) и для более конкретного
содержимого, вроде Структурные элементы позволяют организовать основные части вашей страницы. Они обычно содержат другие элементы HTML. Вот что типичная веб-страница может в себя включать: Внутри структурных элементов вы обычно находите текстовые
элементы, призванные определить цель
вашего содержимого. Вы, в основном, будете использовать: Для абзацев; Поскольку текстовые элементы могут быть длинными, но с разным содержанием, строчные
элементы позволяют различать
части текста. Есть много строчных элементов, но вы обычно столкнётесь со следующими: Просто читая этот код HTML, вы можете легко понять, что означает каждый элемент HTML
.
Какие-то всякие разные штуки и некоторые выделенные и
даже важные слова.
Другой абзац.
Когда ни один семантический элемент не подходит для вашего содержимого, но вы всё ещё хотите вставить элемент HTML (в целях группирования или стилизации), то можете остановиться на одном из двух общих
элементов: Хотя эти элементы HTML на самом деле не несут какого-либо смысла
, они пригодятся когда мы начнём использовать CSS. Существует около 100 семантических элементов HTML на выбор. Это много. Может оказаться непреодолимым пройтись по этому списку и выбрать соответствующий элемент для вашего контента. Но не тратьте слишком много времени, беспокоясь об этом. Если вы будете придерживаться следующего списка на данный момент, этого будет достаточно. Целью
дан разр явл: Сформировать
наиб общ принц созд сем кода Показ
в общем виде на примерах его возможности Обнаруж
пути возм. Статья 100 000-го словаря Созд
пробн сист. Мы оперир словарем в объеме
около 400 слов и выр-ний. И наз отвеч на
вопр к тексту обземом в страницу не
представл сложности. Подобн
система мб постр лингвистически за 2-3
месяца, за 2 мес отлажена в прогр виде.
При этом можно искл тот же самый текст,
как на РЯ, так и на АЯ При
всей искуств текста, а он практически
содержит избыт инф-цию в реальн текстах
такой инф-ции не бывает. Данная работа
- аналог сист груб понимания при одном
условии: если мы решим, что такое машинное
понимание? Принципы
хранятся в двух основных моментах: Прежде
всего целостн картины мира … на отдельные
части множ-вом. Пр0-й. Именно поэтому
ученье часто ив о «мозаичном» знании.
Так, в моногр фр иссл-я А. Моля целый
раздел посвящен мозаичной культуре и
ср-вам масс коммуникации, созд именно
мозаичн картины мира Чаще
всего эти Пр0-и несвяз др с другом и в
силу отсуств общ сист термин-ии. Эта
разобщ мешает формализ даже именому
знание о мире. Это происходит из-за того,
что в рамках Пр0 вновь сталк с делен на
подобл знания. При
разг о зания и попытки их форм-ть не
учит-ся сама изм приращ знаний за счет
их можериз-я. Знания приобр-ся лишь за
счет напол нав игф, а не за счет лог
вывода новых знаний на базе старых.
Между тем ребенок, освоив мир, моделирует
и модернизирует. Причины
создания такой научн сист-м соверш
разнопл. Одна из них - это отсуствие
мат аппарата и эмпиризм и диктат практики.
Само отсутсв мат аппарата мб и неведения
что этот апп нах-ся в твоих руках, но ты
его не видишь. Смысл
относится к тем загадочным явлениям,
которые считаются как бы общеизвестными,
поскольку постоянно фигурируют как в
научном, так и обыденном общении. На
самом деле он не только не имеет
сколько-нибудь строгого общепринятого
определения, но и на описательном уровне
существует большой разброс суждений о
том, что это такое.
Иногда допускается,
что смысл принадлежит к тем наиболее
общим категориям, которые не подлежат
определению и должны восприниматься
как некоторая данность.
В настоящее
время в связи с необходимостью решения
целого ряда актуальных задач как
теоретического, так и прикладного
характера, где понятие смысла играет
ключевое значение, требуются определенные
уточнения данного понятия. Онтология
смысла приобретает особую значимость
в связи с теми изменениями в понимании
объекта, предмета и задач лингвистики,
которые уже произошли и продолжают
происходить в настоящее время. Если в
период, когда доминировала абсолютизация
языка как самодостаточной автономной
сущности, смысл часто выступал лишь как
некоторое факультативное явление,
находящееся на периферии интересов
исследователей, то при обращении к речи,
тексту, дискурсу смысл начинает
фигурировать как одна из наиболее
фундаментальных категорий. С.А.Васильев
различает предметный смысл и текстовый.
Предметный смысл связывается им с
механизмом вычленения, осознания
предметов реальной действительности.
В связи с этим основу смысла, по мнению
автора, составляет способность
устанавливать тождество и различие."Вещи
неразличимы, если имеют для человека
равный смысл, как неразличимы штампованные
экземпляры одной и той же детали"
(Васильев 1988, 96). С.А.Васильев
выделяет несколько составляющих смысла.
Одной из таких составляющих является
предметная объективация человеческого
опыта в виде знания о данном предмете.
Но оно, по мнению автора, образует лишь
наиболее общую составляющую смысла,
интерсубъектную по своему источнику,
имеющую общечеловеческую ценность.
Помимо этого смысл содержит и такие
компоненты, которые выражают жизненные
установки ее носителей, их особые
отношения к предметному миру. Эти две
составляющие смысла лежат в основе
межиндивидуального общения, а потому
откладываются в их сознании и фиксируются
как устойчивые, повторяющиеся компоненты,
постоянно воспроизводимые в речи. Кроме
того, в состав смысла входит индивидуальный
опыт, глубоко личностные отношения
индивида к предмету и возникающие отсюда
ожидания, привязанности, эмоции, памятные
ассоциации, которые выделяют данный
предмет из множества похожих на него. Все
это составляет, по терминологии автора,
"смысл-ценность", который имеет
отношение не только к предметному миру,
но реализуется и на уровне текста,
составляя один из его смысловых уровней.
Другой уровень текста составляет
"смысл-сообщение" т.е. то, что хотел
сказать автор. Все
это позволяет автору сделать вывод о
том, что заключенный в тексте
"смысл-сообщение" является
специфическим свойством, отличающим
его от всех прочих предметов, которые
текстами не являются, а "смысл-ценность",
который текст приобретает вследствие
включенности его в систему жизнедеятельности
человеческого общества, наоборот,
сближает его с другими предметами,
делает его элементом того предметного
универсума, в котором разворачивается
вся человеческая жизнь. Характеризуя
"смысл-сообщение", С.А.Васильев
обращает внимание на одну очень
существенную его особенность. Он задается
вопросом: за счет чего смысл целого
высказывания оказывается всегда больше
суммы значений, образующих его слов? В
связи с этим он анализирует фрагмент
романа М.Ю.Лермонтова "Герой нашего
времени", в частности, слова Максимыча,
характеризующие поведение Печорина:"...ставни
стукнут, он вздрогнет и побледнеет; а
при мне на кабана ходил один на один..."
Автор отмечает, что приведенные слова
сами по себе не воссоздают смысл поведения
героя. Он считает, что здесь "говорит"
само поведение, сам поступок: пугливость,
храбрость... Как бы мы эти слова не
сочетали, мы никак не получим значения
пугливости, храбрости. Союз "а"
здесь противопоставляет смысл не двух
частей фразы, а двух способов поведения,
которое мы понимаем на основе нашего
индивидуального и усвоенного коллективного
опыта. В результате автор делает
чрезвычайно важный для понимания природы
смысла вывод: "Здесь происходит
использование невербальных средств в
вербальном тексте"(Васильев 1988, 98).
Это во-первых, свидетельствует об
экстралингвистическом характере смысла,
во-вторых, о том, что он является внешним
по отношению к тексту, поскольку связан
с актуализацией прошлого опыта, знания,
оценочно-эмоциональных компонентов
сознания личности. Кроме того, отсюда
можно сделать вывод и о том, что смысл
не содержится непосредственно в тексте,
а является производным от процесса
понимания, в котором он собственно и
возникает как некоторая субстанция.
Этот вывод возникает как объективное
следствие, вытекающее из рассуждений
автора, хотя оно и вступает в противоречие
с некоторыми другими его положениями. И судя по тем рассуждениям, которые были в комментариях, мне бы хотелось прояснить один важный момент, который нужно понимать, прежде чем говорить о языке HTML
и тегах, которые в нем используются. Момент этот заключается в понимании такого важного понятия, как семантика кода
. Давайте в этой заметке попытаемся разобраться с этим вопросом и зачем это все нужно. Что такое семантика кода
? Семантика
(с лингвистической точки зрения) – это смысл, информационное содержание языка или отдельной его единицы. Как мы знаем, структурными единицами языка HTML
являются теги, они и являются теми самими отдельными единицами, которые несут смысл, информационное содержание. Когда перед нами есть какая-то информация, которую нужно представить на веб-странице в Интернете, в первую очередь, мы должны объяснить компьютеру, какая часть этой информации, чем является. Не зная об этом, он просто не сможет правильно отобразить все содержимое. Таким образом, когда мы создаем веб-страницу, с помощью языка HTML
, мы объясняем компьютеру, какой элемент, какую роль должен играть на странице. Мы должны понимать, что содержание каждого элемента веб-страницы должно быть заключено в теги, которые бы соответствовали их логическому и смысловому назначению. Т.е. заголовки в тексте заключались бы в теги h
1-h
6, абзацы в теги p
, списки в теги ul
/ol
(li
) и.т.д. Код, который соответствует этим условиям, называют семантическим
т.е. каждому элементу на веб-странице, соответствует правильное
смысловое значение. А теперь вопрос, можем ли мы заголовок на веб-странице, заключить в тег абзаца? Вывод, который мы с вами должны сделать, исходя из этого, семантика кода и оформление это две разные вещи, которые не нужно путать между собой. Определенное оформление каждому тегу присваивается, но его можно легко изменить,а вот изменить семантическое значение этого тега уже нельзя. Мы можем заключить заголовок в абзац, но при этом теряется семантичность кода и этот текст будет нести совершенно иной смысл. Поэтому, прежде чем заключать элемент в какой-либо тег, желательно подумать, а какую функцию, смысл он несет на странице? Возникает логичный вопрос, а зачем в таком случае вообще нужна семантика кода? Зачем заголовки делать заголовками, абзацы делать абзацами, аббревиатуры делать аббревиатурами и.т.д.? По моему мнению, есть несколько причин, которые помогут вам склониться в сторону семантического кода. Что нам дает семантическая разметка? 1) Информацию о том, как браузеру по умолчанию отображать тот или иной элемент на странице;
Например, мы знаем, что заголовок h
1, если не задавать ему никаких специальных стилей, отображается на странице размером 2em
и жирным шрифтом. Но, по моему мнению это самая не существенная причина. 2) Семантический код лучше читается и воспринимается поисковыми системами;
Считается, что страница, которая имеет семантическую разметку, при прочих равных условиях, будет выдаваться выше в результатах выдачи поисковых систем, чем страница с несемантическим кодом. 2) Код более понятный для человека;
Согласитесь, что разобраться с кодом, где все четко прописано, что эта часть текста является абзацем, эта аббревиатурой, и.т.д. намного легче, чем с кодом, где вся информация идет одной сплошной структурой и не понятно, что хотел сказать автор. 3) Проще получить доступ к элементу и как следствие большая гибкость.
Делая код семантическим, вы сможете намного проще обращаться к этим элементам с помощью специальных средств, которые работают с элементами на веб-страницах, например, языки CSS
, Javascript
и др. Если вы заключите все аббревиатуры на вашей странице в тег abbr
, то в CSS
, для того, чтобы все аббревиатуры на вашей странице стали красными достаточно будет просто прописать. abbr
{color
:red
;} Вместо того, чтобы в HTML
выделять и прописывать это правило к каждой отдельно взятой аббревиатуре. Это всего лишь один пример, которых можно привести массу. По этим причинам нужно понимать, что семантический код просто дает нашему документу больше возможностей. Мы можем применять какие-то теги для улучшения семантики сайта и получать при этом большую функциональность, либо их не применять и не получать эти выгоды. Дело ваше! Вы должны сами для себя принять это решение. ,
,
, и так далее, но к другим элементам интерфейса.
Но...
Это заголовок
Структурные элементы: организация страницы
в качестве заголовка страницы;
Текстовые элементы: определение контента
для (неупорядоченных) списков;
для (упорядоченных) списков;
для цитат.
Строчные элементы: различный текст
Основной заголовок страницы
Подзаголовок
Однажды сказано
Общие элементы
Не заморачивайтесь на семантике
Структурные
Текстовые
Строчные
Семантический код. Его цели. Предназначение. Принцип построения. Возможности.
Предназначение семантического кода. Термин «смысл».
А почем нет? Конечно, можем. Многие скажут, но ведь при этом мы теряем оформление, которое имеют заголовки h
1-h
6. Но, на самом деле, оформление здесь никакой роли не играет. С помощью стилей CSS
, мы можем присвоить любому абзацу точно такое же оформление, которое было у элемента h
1-h
6.