Article Title
Quae similitudo in genere etiam humano apparet. Est, ut dicis, inquam...
Данный материал является вольным переводом статьи:
Ire Aderinokun SECTIONING CONTENT IN HTML5 - DIV OR SECTION OR ARTICLE?
HTML5 стал важной ступенькой для концепции семантического кода. Он отстаивает идею, что документ должен быть структурирован и используемые вами теги должны передавать смысл.
Помимо прочего, теги Элемент Элемент
Text goes here Элемент Главное правило заключается в том, что элемент section уместно использовать только тогда, когда его содержимое может быть явно сгруппировано. Поскольку содержимое тега
Тег Цель тега
Quae similitudo in genere etiam humano apparet. Est, ut dicis, inquam... Если содержимое не является семантически связанным, стоит использовать Попытаемся объединить различные элементы вместе. Элементы article можно вкладывать друг в друга. И хотя они по прежнему являются самодостаточными, предполагается, что содержимое внутреннего
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Мы можем так же несколько тегов
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Каждый индивидуальный тег
The div element is the most general purpose element. Один славный малый Matt West c туманного альбиона, промышляющий фрилансом и предпринимательством, предложил нашему вниманию пост: «Как использовать секционные элементы HTML5». HTML5 предлагает набор секционных элементов, используя которые в своей разметке вы добавляете смысловую или семантическую нагрузку своим страницам, тем самым позволяя компьютерным программам лучше понимать их содержание.
Величайшие гитары современности
Это была интересная статья Как ты связываешь это с мировым превосходством?
Статья, в которой рассматривается HTML-элемент section из категории sectioning.
Элемент section используется для создания секции в документе, которая группирует некоторый тематический контент вместе. Для каждой секции в документе следует указывать её название (тему). Это, как правило, осуществляется с помощью заголовков (элементов h1 - h6).
Содержимое секции… Элементы section , обычно применяются в следующих случаях: Таким образом, элемент section стоит применять для некоторого контента только в том случае, если он имеет заголовок и является частью чего-то другого.
Например, рассмотрим фрагмент кода страницы, содержащий статью с комментариями. Каждый из комментариев, оставленных пользователем на странице, содержит некоторый завершенный контент и, следовательно, может рассматриваться как элемент article . Но, в тоже время все комментарии представляют некоторую тематическую группу, и следовательно их можно поместить в элемент section , т.е. данный элемент сгруппирует все эти комментарии на странице вместе.
Название статьи
Комментарии
Заголовок комментария
Заголовок комментария
Например, рассмотрим применение элементов section для создания разделов внутри элемента article:
Вышеприведенный пример будет иметь следующую структуру (outline): Название книги
Первая глава
Вторая глава
Третья глава
Приложение A
Приложение B
Элемент section в HTML 5 не является универсальным элементом для группировки содержимого, т.е. его не следует использовать для оборачивания любого понравившегося контента. Его основное назначение это добавление семантики в документ и создание его структуры (outline). Когда автору необходимо сгруппировать контент, только для того, чтобы применить к нему стили или поработать с ним в сценарии JavaScript, ему в этом случае лучше всего будет воспользоваться элементом div . Элемент div в отличие от элемента section , не добавляет семантики в документ и не участвует в создании его структуры (outline). Элементы section и article хоть и кажутся на первый взгляд очень похожими, но имеют различное семантическое значение. Элемент article предназначен для группирования контента, который представляет собой нечто завершённое, самостоятельное и которое может рассматриваться отдельно от остального содержимого страницы. А элемент section несёт в себе другой семантический смысл, он предназначен для группировки контента, который является составной частью чего-то другого. Но как автору узнать, что собой представляет некоторый контент на странице? Давайте рассмотрим это на примере фрагмента статьи. Фрагмент - это часть статьи и, следовательно, для группировки его контента необходимо применять элемент section . Но этот же фрагмент, уже оставленный в качестве комментария, будет представлять собой нечто целое, завершенное. Следовательно, в этом контексте для его группировки можно использовать элемент article . Но рассуждать, конечно, можно и наоборот. Поэтому, какой элемент использовать для группировки контента, в большинстве случаев зависит от вашего субъективного мнения как автора. Но самое главное в этом подходе поддерживаться выбранной позиции. Поэтому чем автор будет более последовательным в создании структуры, тем он сможет больше смысла в неё вложить. ).
Каждый тэг {section}
должен иметь пару
{/section}
. Обязательными параметрами являются
name
и loop
. Имя цикла
{section} может быть любым, состоящим из букв, цифр и знаков
подчеркивания. Циклы {section}
могут быть вложенными
и имена вложенных {section} должны быть уникакльными между собой.
Переменная loop
(обычно - массив значений)
определяет количество итераций цикла.
При печати переменных внутри секции, имя секции должно быть указано
рядом с именем переменной внутри квадратных скобок .
{sectionelse}
выполняется в том случае, если
параметр loop
не содержит значений. Начиная с версии Smarty 1.5.0, синтаксис переменных свойств сессий был
изменен с {%sectionname.varname%} на {$smarty.section.sectionname.varname}.
Старый синтаксис всё ещё поддерживается, но вы увидите лишь примеры
нового синтаксиса. index используется для отображения текущего индекса массива,
начиная с нуля (или с атрибута start, если он был указан) и увеличиваясь
на единицу (или на значение атрибута step, если он был указан). Если атрибуты step и start не указаны, то index
аналогичен атрибуту секции iteration, кроме того,
что начинается с 0, а не с 1. iteration используется для отображения текущего номера итерации цикла. Это значение не зависит от свойств start, step и max, в отличие от
свойства index .
Кроме того, итерации начинаются с единицы, а не с нуля, как индексы.
rownum - это синоним к
свойству iteration, они работают одинаково. Example 7.38. свойство {section} iteration
assign("custid",$id);
?>
{section name=cu loop=$custid start=5 step=2}
iteration={$smarty.section.cu.iteration}
index={$smarty.section.cu.index}
id={$custid} Результат выполнения данного примера: Iteration=1 index=5 id=3005 Этот пример использует свойство iteration для
вывода заголовка таблицы через каждые пять строчек
(использует {if}
с оператором mod - остаток от деления).
Минимизация дублирования кода за счет лучшей организации и повторного использования является важной целью объектно-ориентированного программирования. Но в PHP
иногда возникают сложности - из-за ограничений используемой модели единого наследования у вас могут быть некоторые методы, которые вы хотели бы использовать в нескольких классах, но они могут плохо вписываться в иерархию наследования. Языки, подобные C++
и Python
, позволяют нам наследоваться от нескольких классов, которые в какой-то мере решают эту проблему, а mixins в Ruby
позволяет смешивать функциональность одного или нескольких классов без использования наследования. Но множественное наследование имеет свои проблемы. В этой статье я расскажу о трейтах в php
- новую функциональность, представленную в PHP 5.4
для решения таких проблем. Понятие самих трейтов не является чем-то новым для программирования и используется в других языках, таких как Scala
и Perl
. Они позволяют нам повторно использовать код через независимые классы в разных иерархиях. Трейт похож на абстрактный класс, который не может быть создан сам по себе (хотя чаще он сравнивается с интерфейсом). Документация PHP
определяет трейты следующим образом: Трейты - это механизм повторного использования кода в отдельных языках, таких как PHP. Трейт предназначен для преодоления некоторых ограничений одиночного наследования, позволяя разработчику свободно использовать множество методов в нескольких независимых классах, находящихся в разных иерархиях.
Рассмотрим пример: Class DbReader extends Mysqli {} Class FileReader extends SplFileObject {} Все будет хорошо до тех пор, пока нам не станет необходимо использовать общую функциональность для этих классов. Конечно, мы можем написать один и тот же кусок кода два раза, но это отнюдь не хорошая практика. Допустим, оба класса должны быть синглтонами. Поскольку PHP
не поддерживает множественное наследование, каждый класс должен будет реализовать необходимый код для поддержки шаблона Singleton
. Трейты предлагают решение именно такого рода проблем. Trait Singleton Public static function getInstance() { Class DbReader extends ArrayObject Class FileReader Трейт Singleton
содержит реализацию шаблона Singleton
со статическим методом getInstance()
, который создает объект класса с использованием этого трейта (если он еще не создан) и возвращает его. Попробуем создать объекты этих классов с помощью метода getInstance()
.
$a = DbReader::getInstance(); Var_dump($a); //object(DbReader) Мы можем видеть, что $a
является объектом DbReader
, а $b
является объектом FileReader
, но оба теперь ведут себя как объекты реализующие шаблон Singleton
. Метод от класса Singleton
был введен в классы, использующие его трейт. Трейты не налагают никакой дополнительной семантики на класс. В некотором роде вы можете думать об этом как о механизме копирования и вставки на уровне интерпретатора PHP
, где методы этого признака копируются в класс компоновки. Если мы просто расширим класс DbReader
из родителя со скрытым свойством $instance
, свойство не будет отображаться в дампе ReflectionClass::export()
. До сих пор мы использовали только один трейт, но в некоторых случаях нам может потребоваться включить в класс функциональность более чем одного трейта. Trait Hello Trait World Class MyWorld
$world = new MyWorld(); Здесь у нас есть два трейта: "Привет" и "Мир". Трейт Hello
может только сказать "Привет", а трейт World
может сказать "Мир". В классе MyWorld
мы применили Hello
и World
, чтобы объект MyWorld
получал методы от обоих черт и мог сказать "Hello World". В одной из следующих статей мы продолжим обсуждать трейты. А сегодня на этом все. Спасибо за внимание!Обзор элементов
DIV
Modal Title
SECTION
Subscribe to the Newsletter
ARTICLE
Article Title
DIV или SECTION или ARTICLE?
Так какой из тегов когда нужно использовать?
Комбинирование элементов
Article в article
Article Title
Another Article
Article в section
Latest Blog Posts
Blog Post Title
Blog Post Title
Section в article
Sectioning Content in HTML5 - div or section or article?
Overview of the Elements
div
Ниже приводится его перевод.
Прочитав этот пост, вы научитесь применять секционные элементы на ваших веб-сайтах. Я постараюсь объяснить, в каких случаях лучше использовать тот или иной элемент и когда лучше прибегнуть к старому доброму.
Давайте начнем.Элемент main
Элемент должен содержать главный контент вашей вебстраницы. Причем, все содержимое должно быть уникально на странице и не должно отображаться где-либо еще на сайте.
Повторяющийся на нескольких страницах контент (логотип, окно поиска, ссылки в футере и т.д.) не следует помещать внутри элемента.
Ниже приводится пример представления главного содержимого страницы.Гитары
Gibson SG
Fender Telecaster
Примечание:
Мы использовали атрибут роли ARIA role=”main”, здесь он указывает на важность этого элемента тем программам, которые еще не поддерживают элемент (например, некоторые скринридеры).
Можно использовать только один элемент на странице, который нельзя помещать внутри элементов, или.Элемент article
Элемент должен содержать часть самодостаточной информации, которая может быть вырвана из контекста всей страницы без потери смысла. Это могут быть: новость, статья в блоге, комментарии пользователя.Название статьи
Вы можете вкладывать элементы один в другой. Это будет означать, что вложенные элементы связаны с внешним элементом. Название статьи
Комментарии
В этом примере мы использовали элемент, чтобы выделить саму статью и каждый комментарий к ней. Такая схема вложенности позволяет отнести комментарии к тексту статьи.Элемент section
Элемент используется для представления секции (группы) связанного контента. Его применение похоже на с главным отличием, что допускается отсутствие смысла содержимого внутри элемента вне контекста самой страницы.
Рекомендуется использовать теги (–
)
для обозначения темы секции.
В качестве примера можно привести статью, которую вы сейчас читаете, можно было бы каждый параграф обернуть в тег.Как использовать секционные элементы HTML5
Элемент main
Элемент article
Элемент section
...
Если вы хотите сгруппировать контент для последующей стилизации, в этом случае нужно использовать элемент вместо.Элемент nav
Элемент используется для разметки группы ссылок на внешние страницы или разделы внутри текущей страницы. Он хорошо подходит как для основной навигации по сайту, так и по оглавлению или постам.
Разметка ссылок как списка упрощает навигацию, хотя и не требуется при использовании элемента.Элемент aside
Элемент используется для выделения содержания, непосредственно связанного с окружающим контентом, но которое может рассматриваться и отдельно. Это могут быть боковые сноски (как в книгах), группы элементов, цифры или цитаты.Компания Google покупает Nest
В этом примере мы использовали элемент, чтобы выделить информацию о компании Google в новостной статье. Эта информация может быть полезна читателю, но не связана напрямую с новостью.Элемент header
Элемент используется для представления вводной части к статье или веб-странице. Обычно он содержит заглавие или какие-либо метаданные, относящиеся к данному контенту, например, дата публикации статьи или оглавление (внутри элемента) для более длинного документа.
Элемент будет связан с ближайшим секционным элементом, обычно это прямой родитель в структуре страницы.Компания Google покупает Nest
В этом примере элемент содержит заголовок и дату публикации новостной статьи.Элемент footer
Элемент используется для представления такой информации о разделе, как автор, авторские права, ссылки на связанные веб-страницы.
Так же как, элемент связан с ближайшим секционным элементом.Элемент address
Элемент один из самых неправильно используемых элементов в HTML. Этот элемент предназначен не для разметки почтового адреса, а для представления контактной информации по статье или веб-странице. Это могут быть ссылки на сайт автора или его электронный адрес.
Этот элемент часто используется внутри элемента, который в свою очередь располагается внутри элемента.Компания Google покупает Nest
Заключение
В этом посте вы узнали как использовать секционные элементы HTML5 для разметки веб-страниц. Использование таких элементов имеет ряд преимуществ.
Одно из самых больших – это придание семантического значения определенным областям вашей веб-страницы, позволяющего компьютерным программам (скринридерам) идентифицировать ключевые элементы содержания и навигации.
Примечание:
Пока еще не все скринридеры имеют поддержку семантических элементов. Чтобы обезопасить себя, вы можете продолжать использовать роли
Назначение элемента section
Заголовок секции
Применение элемента section
Название статьи
Комментарии
Заголовок комментария
Заголовок комментария
Название книги
Первая глава
Вторая глава
Третья глава
Приложение A
Приложение B
Ограничения при использовании элемента section
Отличие между элементами section и article
Имя атрибута
Тип
Обязателен
По умолчанию
Описание
name
string
Да
n/a
Название секции
loop
mixed
Да
n/a
Значение, определяющее количество итераций цикла.
start
integer
Нет
0
Индекс позиции, с которой будет начинаться
цикл. Если значение отрицательное, то начальная позиция
вычисляется от конца массива. Например, если в переменной
цикла 7 элементов и значение атрибута start равно -2, то
начальный индекс будет 5. Неверные значения (значения, вне
массива) автоматически обрезаются до ближайшего верного
значения.
step
integer
Нет
1
Значение шага, которое используется для прохода по
массиву. Например, step=2 указывает обход массива
по элементам 0,2,4... Если шаг отрицателен, то обход
массива будет производится в обратном направлении.
max
integer
Нет
1
Максимальное количество итераций цикла.
show
boolean
Нет
true
Указывает, показывать или нет эту секцию
Note
Техническое Замечание
Note
{/section}
iteration=2 index=7 id=3007
iteration=3 index=9 id=3009
iteration=4 index=11 id=3011
iteration=5 index=13 id=3013
iteration=6 index=15 id=3015
{section name=co loop=$contacts}
{if $smarty.section.co.iteration % 5 == 1}
{/if}
Name> Home Cell Email
view
{$contacts.name}
{$contacts.home}
{$contacts.cell}
{$contacts.email}
{/section}
Что представляет трейт
{
private static $instance;
if (!(self::$instance instanceof Singleton)) {
self::$instance = new self;
}
return self::$instance;
}
}
{
use Singleton;
}
{
use Singleton;
}
$b = FileReader::getInstance();
var_dump($b); //object(FileReader)Использование нескольких трейтов
{
function sayHello() {
echo "Hello";
}
}
{
function sayWorld() {
echo "World";
}
}
{
use Hello, World;
}
echo $world->sayHello() . " " . $world->sayWorld(); //Hello World