Правила построения HTML-документов. Как сделать лучше


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

Все материалы по таблицам каскадных стилей, которые уже были опубликованы на этом блоге, вы сможете найти в . Сегодня же мы поговорим сначала про то, как можно комбинировать и группировать селекторы, а затем подробно рассмотрим правил, которые применяются для одного и того же элемента в Html коде (Important, подсчет селекторов и запись правил в атрибуте style).

Комбинации и группировка селекторов в CSS

Итак, в предыдущих статьях мы успели рассмотреть 7 типов:

Из этих семи возможных видов в языке CSS можно составлять комбинации. Все комбинации, которые мы будем составлять, имеют непосредственное отношение к (предки — потомки, родители — дети, братья — сестры).

Первый вид комбинации называется контекстный селектор . Он учитывает взаимоотношение элементов Html кода по принципу «Предок — Потомок»:

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

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

В приведенном коде только подчеркнутый фрагмент будет окрашен в зеленый цвет, т.к. в числе его предков имеется Div, а второй фрагмент кода, выделенный тегами B, останется того цвета, который выбран для него по умолчанию, ибо в числе его предков контейнера Div уже нет (только P и Body):

Такие комбинации работают в любых браузерах.

Следующим типом комбинаций будет дочерний селектор , который строится на принципах взаимоотношений элементов кода по типу «Родитель — Ребенок»:

Записываются они с разделяющим знаком больше (>) :

Данная запись будет трактоваться браузером так: для , «родителем» (ближайшим предком) которых является контейнер Div, будет использоваться выделение красным цветом.

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

Body > p {color:red}

То красным уже будет выделен только последний абзац, т.к. его родителем является тег Body, а два первых параграфа останутся того цвета, который был предусмотрен для них по умолчанию (Body для них предок, но не родитель, которым является Div). Дочерние селекторы не работают в браузере Ie 6 .

Как и для чего группируют селекторы в CSS коде

Последняя комбинация называется соседние селекторы и отвечает принципам отношений между элементами Html кода по типу «Сестры — Братья». В качестве разделителя у них может использоваться либо «+», либо «~»:

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

Если записать соседний селектор в Css коде в таком виде:

H1 ~ p {color:red}

То это будет означать, что все параграфы (P), у которых выше по коду расположен соседний элемент H1 (заголовок), будут окрашены в красный цвет. Имеются в виду именно соседние элементы (отношения вида «Сестры — Братья»). На приведенном ниже примере заданному селектору будут удовлетворять обведенные абзацы:

Комбинации соседних селекторов в браузере Ie 6 тоже, к сожалению, не поддерживаются. В Ie 6 поддерживается только первый вид комбинации, а в Ie 7 и выше поддерживаются все остальные. В остальных браузерах никаких проблем возникать не должно.

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

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

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

Приоритеты Css свойств (с important и без него)

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

Как вы можете видеть, сейчас произошло уже окончательное разделение Html и Css. Т.е. даже для чистого ХТМЛ кода браузер все равно будет использовать дефолтные свойства таблиц стилей. Так вот свойства, принятые по умолчанию, имеют самый низший приоритет .

Более высокий приоритет имеют свойства, которые назначит пользователь в настройках своего браузера. Эти стили будут применены к любым документам, которые он просматривает в этом обозревателе.

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

Например, в Ie для этого нужно выбрать из верхнего правого меню «Сервис» — «Свойства обозревателя», а затем на первой вкладке «Общие» щелкнуть по нижней кнопке «Оформление». В открывшемся окне вам нужно поставить галочку в поле «Оформлять, используя пользовательский стиль», и с помощью кнопки «Обзор» найти на своем компьютере нужный вам файл стилевой разметки CSS:

Т.е. у пользователя есть возможность заставить любой открываемый в браузере сайт выглядеть в соответствии с его требованиями, описанными в файле CSS. Это называется «пользовательские стили» и они имеют приоритет выше, чем стили, которые определены в спецификации по умолчанию. Но еще больший приоритет будут иметь так называемые авторские стили.

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

Пользователь будет вынужден смириться? Нет. Есть у него возможность повысить приоритет своих свойств CSS с помощью добавления Important в конце каждого из них. Пишется это слово через пробельный символ и перед ним ставится восклицательный знак:

P {color:red !important;}

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

Решили, что пользовательские стили с Important будут иметь по-любому более высокий приоритет, чем авторские стили, что с Important, что без него.

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

  • Пользовательские с Important
  • Авторские с Important
  • Авторские
  • Пользовательские
  • Стили, принятые для Html элементов в спецификации по умолчанию (когда ни автор, ни пользователь ничего другого не задали)
  • Т.е. без Important авторские стили важнее, а с них уже пользовательские стили самые важные и приоритетные. Ну, а теперь давайте разбираться именно с авторскими таблицами, ибо про то, что делает пользователь, нам не ведомо и покрыто мраком.

    Как повышают приоритеты Css свойств в авторских стилях

    Именно сейчас мы с вами и переходим к вопросу каскадности таблиц стилей CSS . Давайте рассмотрим это на примере, чтобы было нагляднее. Допустим, что у нас имеется фрагмент кода со следующими Html элементами (параграф внутри контейнера Div):

    Содержимое контейнера

    Давайте сначала пропишем такие свойства:

    P {color:red} .sbox {background:#f0f0f0}

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

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

    P {color:red} .sbox {background:#f0f0f0;color:blue}

    В результате цвет текста параграфа станет синим вместо красного.

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

    Кроме этого сами селекторы имеют градацию по приоритетам . Самый высокий приоритет у ID. В этом примере цвет текста будет синим именно потому, что приоритет Id (#out) будет выше, чем у селектора тега (p):

    P {color:red} #out {color:blue}

    Дальше по лесенке приоритетов, направленной вниз, следуют селекторы классов, псевдоклассов и атрибутов. В следующем примере опять проиграет тег (p) и цвет текста абзаца будет синим, ибо тягается он с селектором более высокого приоритета (класса):

    P {color:red} .sbox {color:blue}

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

    Div p {color:red} p {color:blue}

    Какого цвета в результате получится текст параграфа? Правильно, именно красного, т.к. у этого свойства больше селекторов тегов (два против одного). О как. Т.е. сначала считаются Id. Если победитель не выявлен, то считаются классы, псевдоклассы и атрибуты. Ну, а если и там ничего не решилось или таких не было найдено, то считаются селекторы тегов и псевдоэлементов.

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

    Содержимое контейнера

    Вполне можно будет написать такой кусок Css кода:

    Div.box #out{color:red} #in p.sbox{color:blue}

    И какого же цвета должен быть текст параграфа? Обе комбинации описывают именно наш параграф. Первую следует, как и водится, читать справа налево: применить данные свойства (color:red) для элемента с Id #out, который стоит где-то внутри (иметь его среди «предков») контейнера Div с классом.box (div.box). Полностью подходит к нашему абзацу.

    Вторая комбинация: применить данные свойства (color:blue) для элемента параграфа с классом sbox (p.sbox), который стоит внутри любого элемента с Id #in. Опять же, она полностью описывает именно наш параграф. Давайте считать селекторы.

    С ID в обоих комбинациях встречаются по одному разу, тоже самое можно сказать и о классах. Остается только посчитать селекторы тегов, но их тоже в обоих комбинациях используется одинаковое число раз (один). Засада.

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

    Тут будет действовать правило — кто последний , тот и прав. Поэтому в моем примере цвет текста параграфа будет синим, ибо это свойство (color:blue) расположено ниже в коде. Если эти правила поменять местами:

    #in p.sbox{color:blue} div.box #out{color:red}

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

    Body #in p.sbox{color:blue} div.box #out{color:red}

    В этом случае цвет параграфа измениться на синий. Универсальный селектор «*» вообще никакого влияния на подсчет приоритетов не оказывает. Кстати, чуть выше мы рассмотрели способ повышения приоритета Css правил с помощью добавления Important. В нашем примере это может выглядеть так:

    P {color:green !important} #in p.sbox{color:blue} div.box #out{color:red}

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

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

    Т.е. прописываете внутри того же многострадального тега P атрибут Style с заданием любого цвета:

    Содержимое контейнера

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

    Но вот свойства с Important он перебить не сможет. Т.е. в последнем примере, где мы добавили правило «p {color:green !important}», цвет текста по-прежнему будет зеленым, даже несмотря на style="color:yellow".

    На самом деле приоритет двух правил (с Important во внешнем файле таблицы стилей и в атрибуте style) равный, а значит нужно переходить к подсчету селекторов. А разве они могут быть внутри атрибута style?

    Да никаких не может быть, а это значит, что правило, прописанное в атрибуте style, всегда проиграет правилу с Important только за счет меньшего числа селекторов (ноль будет меньше любого числа).

    Ну, а что же тогда даст наибольший приоритет Css свойству ? Правильно, его оно будет прописано в атрибуте style да еще с Important:

    p {color:green !important} #in p.sbox{color:blue} div.box #out{color:red}

    Содержимое контейнера

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

    Итак, давайте попробует составить список факторов, влияющих на приоритет свойства в авторских стилях по мере их убывания:

  • Прописывание свойства в атрибуте style нужного тега вместе с Important
  • Добавление Important к свойству во внешнем файле таблиц стилей или же в теге style прямо в Html коде
  • Простое прописывание этого свойства в атрибуте style нужно элемента
  • Использование бОльшего числа Id для данного свойства
  • Использование большего числа селекторов классов, псевдоклассов или атрибутов
  • Использование большего числа селекторов тегов и псевдоэлементов
  • Более низкое расположение свойства в Css коде, при прочих равных условиях
  • На самом деле правила в атрибуте style используются крайне редко (представьте себе, как трудно будет в этом случае вносить изменения во всем коде сайта, а не в отдельном файле CSS).

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

    А зачем и как вставлять свой код на чужие страницы? Нам может и незачем, а Яндекс и Гугл это делают, когда или на чужих площадках (наших с вами сайтах).

    Добавив во все элементы кода рекламных блоков атрибут style, с прописанными в нем свойствами и добавленным Important, можно уже не беспокоиться о том, что код объявлений будет изменен каким-либо образом (хотя объявления Яндекса все же можно менять за счет CSS и Important, видимо они не использовали этот метод).

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

    посмотреть еще ролики можно перейдя на ");">

    Вам может быть интересно

    Селекторы тега, класса (class), Id и универсальные, а так же селекторы атрибутов в современном CSS
    Селекторы псевдоклассов и псевдоэлементов в CSS (hover, first-child, first-line и другие), отношения между тегами Html кода
    List style (type, image, position) - Css правила для настройки внешнего вида списков в Html коде
    Для чего нужен CSS, как подключить каскадные таблицы стилей к Html документу и основы синтаксиса этого языка

    What does

    do? Was used to specify the display of internal borders between rows and colums. This attribute has been deprecated. Use CSS to style table borders instead.

    The Rules Attribute has been Deprecated This attribute has been deprecated and should not be used. Browser support for this attribute is limited and using it may produce unexpected results. Instead, use CSS to style tables.

    The RULES Attribute

    RULES , an HTML 4.0 attribute, indicates if there should be internal borders in the table. We"ll go over each of the values of RULES and demonstrate how they are used. RULES and FRAME have an annoying way of changing each other"s defaults. To simplify your life, here"s a rule of thumb: if you use RULES also use FRAME and BORDER . It"s easier to avoid getting confused.

    The NONE Value for the RULES Attribute

    RULES=NONE means that there are no inside borders. RULES=NONE is the default if you don"t use BORDER or set it to zero, but otherwise must be explicitly stated to have no inside borders. Note that currently Netscape does not recognize RULES .

    Name Food
    Starflower stir fied tofu
    Miko vegetable rice soup
    Andy hummus
    Ping french toast
    The ALL Value for the RULES Attribute

    RULES=ALL indicates that all the internal borders should be visible. RULES=ALL is usually used in conjunction with FRAME=VOID so that there are outer borders but no inner borders.

    When applied to a table, that value gives us this result:

    Name Food
    Starflower stir fied tofu
    Miko vegetable rice soup
    Andy hummus
    Ping french toast
    The COLS Value for the RULES Attribute

    COLS indicates that there should be borders between the columns but not between rows.

    When applied to a table, that value gives us this result:

    Name Food
    Starflower stir fied tofu
    Miko vegetable rice soup
    Andy hummus
    Ping french toast
    The ROWS Value for the RULES Attribute

    RULES=ROWS indicates that there should be borders between rows but not between columns.

    When applied to a table, that value gives us this result:

    Name Food
    Starflower stir fied tofu
    Miko vegetable rice soup
    Andy hummus
    Ping french toast
    The GROUPS Value for the RULES Attribute

    RULES=GROUPS allows you to put borders between groups of table cells. There are two ways cells can be grouped: by row and by column. Let"s go over each of them. Note that currently Netscape does not recognize RULES .

    Grouping By Row

    To group by row use the , , tags. indicates the header rows of the table, indicates the main body of the table, and indicates the bottom rows. So, for example, this code creates a table with three groups. Borders appear just between groups:

    NameFoodPriceTotal
    Starflowerstir fied tofu5.95
    Mikovegetable rice soup4.95
    Andyhummus3.95
    Pingfrench toast5.95
    20.80

    Here"s how that table renders:

    Name Food Price Total
    Starflower stir fied tofu 5.95
    Miko vegetable rice soup 4.95
    Andy hummus 3.95
    Ping french toast 5.95
    20.80
    Grouping By Column

    To group by column use the tag and its SPAN attribute. takes a little getting used to because it doesn"t actually go around any table cells. It goes at the top of the table code where it sets rules about the table columns including which are grouped together. to indicates how many columns are in each group. If you leave SPAN out then it is assumed the group has just one column. So, for example, the following code says that the first column is in a group by itself and the three after that are together in a group. Notice that requires an end tag. Borders will go only between the groups.

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

    Пример 2.2.1

    Ниже приведён так называемый «подробный CSS», в котором представлена модель вложенности одних селекторов в другие селекторы.

    .global-header { background-color : #f5f5f5 ; color : #443d3d ; border-bottom : 1px solid #ddd ; } .global-header h1 { margin-top : 0 ; margin-bottom : 0 ; font-size : 4rem ; } .global-header h1 small { font-size : 2rem ; } .global-header .header-actions { background-color : #fff ; padding-top : 10px ; padding-bottom : 10px ; text-align : center; } Решение проблем

    Все это хорошо, но ровно до тех пор, пока имена классов короткие, глубина вложенности не велика, а ваши глаза в состоянии уследить за этой структурой. Лично я, до тех пор, пока не стал пользоваться CSS-препроцессорами, писал код именно так, попутно разделяя CSS-файл на логические блоки и пытаясь уследить за его чистотой. Это удобно и практично, но мне быстро надоедало сортировать код по вложенности, и моя таблица стилей иногда была похожа на мешанину из букв и цифр. Разумеется, что перед финальной сборкой проекта все это исправлялось, но это не тот случай, на который хочется тратить время.

    Представьте себе оглавление простейшей книги, например, такое:

    1. Глава 1. Это моя первая глава книги 1.1. Это мой первый рассказ о том, что я сделал 1.1.1. Немного подробнее о том, что я сделал 1.2. Это мой второй рассказ о том, что я сделал 1.Х. ...

    Здесь довольно легко понять, что пункт 1.1 — это следствие первого пункта. Но тем не менее, если переписать это в более читабельном формате, можно сэкономить время на обработке цифр в голове. Абстрактно, можно представить следующий формат:

    Это моя первая глава книги Это мой первый рассказ о том, что я сделал Немного подробнее о том, что я сделал Это мой второй рассказ о том, что я сделал

    Именно такая модель вложенности присутствует в Less, когда один селектор, в прямом смысле слова, вкладывается в другой селектор. Таким образом получается легко поддерживаемая, читаемая и приятная глазу структура. Если же попытаться спроецировать такую модель на CSS-код, то она будет иметь вид:

    .class-1 { property : value; .class-2 { property : value; } .class-3 { property : value; } }

    Для большей наглядности я предлагаю обратиться к конкретному примеру, в котором я постараюсь сопоставить классический CSS и Less код.

    Пример 2.2.2

    Здесь я переписал код из примера 2.2.1 , заменяя классический синтаксис на препроцессорный.

    .global-header { background-color : #f5f5f5 ; color : #443d3d ; border-bottom : 1px solid #ddd ; h1 { margin-top : 0 ; margin-bottom : 0 ; font-size : 4rem ; small { font-size : 2rem ; } } .header-actions { background-color : #fff ; padding-top : 10px ; padding-bottom : 10px ; text-align : center; } }

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

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

    Предостережение!

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

    Основы HTML содержат основные правила языка HTML, описание структуры HTML-страницы, отношения в структуре HTML-документа между HTML-элементами.

    HTML-документ - это обычный текстовый документ, может быть создан как в обычном текстовом редакторе (Блокнот) , так и в специализированном, с подсветкой кода (Notepad++, Visual Studio Code и т.п.) . HTML-документ имеет расширение.html .

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

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

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

    Теги могут вкладываться друг в друга, например,

    Текст

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

    Текст

    .

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

    Каждому элементу можно присвоить несколько значений class и только одно значение id . Множественные значения class записываются через пробел, . Значения class и id должны состоять только из букв, цифр, дефисов и нижних подчеркиваний и должны начинаться только с букв или цифр.

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

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

    HTML-документ состоит из двух разделов - заголовка — между тегами … и содержательной части — между тегами … .

    Структура веб-страницы 1. Структура HTML-документа

    Язык HTML следует правилам, которые содержатся в файле объявления типа документа (Document Type Definition, или DTD) . DTD представляет собой XML-документ, определяющий, какие теги, атрибуты и их значения действительны для конкретного типа HTML. Для каждой версии HTML есть свой DTD.

    DOCTYPE отвечает за корректное отображение веб-страницы браузером. DOCTYPE определяет не только версию HTML (например, html), но и соответствующий DTD-файл в Интернете.

    ...

    Элементы, находящиеся внутри тега , образуют дерево документа, так называемую объектную модель документа, DOM (document object model) . При этом элемент является корневым элементом.


    Рис. 1. Простейшая структура веб-страницы

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

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

    , , и т.д.

    Потомок - элемент, расположенный внутри одного или более типов элементов. Например, является потомком , а элемент

    Является потомком одновременно для и .

    Родительский элемент - элемент, связанный с другими элементами более низкого уровня, и находящийся на дереве выше их. На рисунке 1 и . Тег

    Является родительским только для .

    Дочерний элемент - элемент, непосредственно подчиненный другому элементу более высокого уровня. На рисунке 1 только элементы , ,

    И являются дочерними по отношению к .

    Сестринский элемент - элемент, имеющий общий родительский элемент с рассматриваемым, так называемые элементы одного уровня. На рисунке 1 и — элементы одного уровня, так же как и элементы , и

    Являются между собой сестринскими.

    1.1. Элемент 1.2. Элемент

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

    1.2.1. Элемент

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

    1.2.2. Элемент

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

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

    С помощью тега можно запретить или разрешить индексацию веб-страницы поисковыми машинами:

    Для автоматической перезагрузки страницы через заданный промежуток времени нужно воспользоваться значением refresh:

    Страница будет перезагружена через 30 секунд. Чтобы перебросить посетителя на другую страницу, нужно указать URL-адрес в параметре url:

    Таблица 2. Атрибуты тега Атрибут
    charset Указывает кодировку символов для текущего HTML-документа:
    content Содержит произвольный текст, который определяет значение, ассоциируемое с атрибутом http-equiv или name , в зависимости от их значения.
    http-equiv Контролирует действия браузера на данной веб-странице (эквивалент HTTP заголовков). При отображении страницы браузер будет следовать инструкциям, заданным в атрибуте:
    default-style указывает предпочтительный стиль для использования на странице. Атрибут content должен содержать идентификатор элемента , который ссылается на таблицу стилей CSS, или идентификатор элемента , содержащего таблицу стилей.
    refresh указывает время в секундах до перезагрузки страницы или время до перенаправления на другую страницу, если в атрибуте content после указания времени идет строка "url=адрес_страницы" .
    Автоматическая перезагрузка страницы через заданный промежуток времени, в данном примере, через 30 секунд:

    Если необходимо сразу перебросить посетителя на другую страницу, то можно указать URL-адрес в параметре url:
    name Ассоциируется со значением, содержащемся в атрибуте content . Не должен использоваться в случае, если для элемента уже заданы атрибуты http-equiv , charset или itemprop .
    application-name указывает название веб-приложения, используемого на странице.
    author указывает имя автора документа в свободном формате.
    description определяет краткое описание к содержимому страницы, например:

    generator указывает один из пакетов программного обеспечения, используемого для создания документа, например:
    .
    keywords содержит список ключевых слов, разделенных запятыми, соответствующих содержимому страницы, например:
    .
    Также атрибут name может принимать следующие значения из расширенной спецификации, такие как creator , googlebot , publisher , robots , slurp , viewport , хотя ни одно из них еще не было официально принято.
    1.2.3. Элемент

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

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

    .paper { width: 200px; height: 300px; background-color: #ef4444; color: #666666; }

    Чтобы подключить к элементу заданный стиль, необходимо через атрибут class (или id) присвоить элементу соответствующее название:

    ...

    CSS-код можно встраивать непосредственно в элемент разметки в виде значение атрибута style , например:

    1.2.4. Элемент

    Задать стили для документа можно также при помощи другого способа - записать их в отдельный файл с расширением.css , например, style.css .

    Подключить файл со стилями к веб-странице можно двумя способами:
    через директиву @import url

    @import url(style.css);

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

    Таблица 4. Атрибуты тега Атрибут Описание, принимаемое значение
    crossorigin Указывает, должен ли использоваться CORS (технология браузеров, которая позволяет предоставить веб-странице доступ к ресурсам другого домена) при извлечении изображения с сайта.
    anonymous — в кросс-доменный запрос браузер автоматически добавляет заголовок Origin, содержащий имя домена, с которого осуществлён запрос. Если сервер не ответит CORS-заголовком Access-Control-Allow-Origin: * (или имя домена вместо звёздочки), то загрузка изображения будет заблокирована.
    use-credentials — если сервер не предоставляет учётные данные с помощью Access-Control-Allow-Credentials: true , то загрузка изображения будет заблокирована.
    href Основной атрибут тега, в качестве значения выступает путь к файлу со стилями.
    hreflang Определяет язык текста в документе, на который идет ссылка.
    media Определяет тип устройства, к которым должен быть применен ресурс ссылки.
    nonce Генерируемая случайным образом на сервере строковая переменная, которая устанавливает правила использования встроенных стилей с целью защиты контента. Значение атрибута — строка текста.
    rel Атрибут определяет отношения между текущим документом и документом, на который идет ссылка.
    alternate — ссылка на тот же документ, но в другом формате (например, страницы для печати, перевод, зеркало, лента в формате RSS или Atom),
    .


    archives — указывает на то, что документ по ссылке представляет исторический интерес. Ссылка может указывать на коллекцию записей, документов и других материалов.
    author ссылка на страницу об авторе документа или на страницу с контактными данными автора.
    bookmark ссылка на ближайшего предка статьи, являющегося связующим звеном, или на раздел статьи, наиболее тесно связанных с элементом, если нет предка.
    external используется для указания того, что страница на которую ведет ссылка не являются частью данного сайта.
    first указывает ссылку, ведущую на первый документ из последовательности документов.
    help ссылка на документ со справкой.
    icon определяет путь к иконке, которая будет использована для текущего документа.
    last указывает ссылку, ведущую на последний документ в последовательности документов.
    license ссылка на сведения об авторских правах для документа.
    next указывает, что этот документ является частью серии, и что ссылка ведет на следующий документ в этой серии.

    nofollow указывает на то, что ссылка не одобрена автором страницы или что ссылка носит коммерческий характер.
    noreferrer указывает на то, что заголовок запроса клиента, содержащий url источника запроса, не должен передаваться при переходе по ссылке.
    pingback указывает адрес пингбэк-сервера, что дает возможность для блога автоматически оповещать сайты, ссылающиеся на него.
    prefetch указывает, что следует заранее кэшировать файл, на который ведет ссылка.
    prev указывает, что этот документ является частью серии, и что ссылка ведет на предыдущий документ в этой серии.

    search указывает, что ссылаемый документ содержит интерфейс поиска и связанных с ним ресурсов.
    sidebar указывает, что ссылаемый документ, если это возможно, будет показан в дополнительном контексте браузера, и некоторые браузеры при щелчке по гиперссылке открывают окно для добавления ссылки в панель закладок.
    stylesheet ссылка на внешний файл, который будет использоваться в качестве таблицы стилей для данного документа.
    tag указывает на то, что метка, на которую ведет гиперссылка, относится к данному документу.
    up указывает, что страница является частью иерархической структуры, и что гиперссылка ведет на более высокий уровень ресурса в структуре.
    sizes Указывает размер иконок для визуального отображения. Атрибут sizes используется только совместно с rel="icon" , и может принимать следующий значения:
    ширинах высота - определяет список размеров, разделенных пробелами, каждый размер должен быть в формате - ширинах высота (размеры иконки задаются в пикселях), например:
    ;
    any - иконка может масштабироваться до любого размера.
    title Определяет заголовок ссылки или название набора альтернативных таблиц стилей. Значение атрибута — текст.
    type Определяет MIME-тип документа, на который идет ссылка. В данном случае он принимает значение "text/css" .
    1.2.5. Элемент Таблица 5. Атрибуты тега Атрибут Описание, принимаемое значение
    async Атрибут указывает на то, что сценарий будет выполняться асинхронно с остальной частью страницы (сценарий начнет выполняться одновременно с загрузкой страницы).
    charset Определяет кодировку символов
    crossorigin Определяет, будет ли использоваться CORS при загрузке внешних скриптов (с использованием атрибута src).
    anonymous — перед загрузкой скрипта в кросс-доменный запрос браузер автоматически добавляет заголовок Origin, при этом не передаются параметры доступа (cookie, сертификат X.509, логин/пароль для базовой аутентификации по HTTP). Если в ответе сервера отсутствует заголовок Access-Control-Allow-Origin: имя домена, скрипт не будет загружен.
    use-credentials — перед загрузкой скрипта в кросс-доменный запрос браузер автоматически добавляет заголовок Origin с указанием параметров доступа (cookie, SSL-сертификат или пары логин/пароль). Если в ответе сервера отсутствует заголовок Access-Control-Allow-Credentials: true , скрипт не будет загружен.
    defer Интерпретация сценариев откладывается до окончания отображения документа на устройстве пользователя.
    nonce Обеспечивает безопасность, защищая от атак с внедрением межсайтового скриптинга (XSS, cross site scripting). Устанавливает правила использования встроенных скриптов с помощью nonce-значений и хэшей. Во время рендеринга страницы браузер для каждого инлайн-скрипта вычисляет хэши и сравнивает с перечисленными в CSP. Загрузка с ресурсов, не входящих в «белый список», блокируется.
    src Указывает на месторасположение файла со сценарием, значение атрибута - это url файла, содержащего JavaScript-программу.
    type Используются для объявления языка сценария, использованного при составлении содержимого тега.
    1.3. Элемент

    В этом разделе располагается все содержимое документа. Для элемента доступны .

    Таблица 5. Атрибуты тега Атрибут Описание, принимаемое значение
    onafterprint Событие, срабатывающее после отправки страницы на печать или после закрытия окна печати.
    onbeforeprint Событие, срабатывающее перед отправкой страницы на печать.
    onbeforeunload Событие срабатывает, когда посетитель инициировал переход на другую страницу или нажал «закрыть окно». Позволяет отображать сообщение в диалоговом окне подтверждения, чтобы сообщить пользователю, хочет ли он остаться или покинуть текущую страницу.
    onhashchange Событие срабатывает, когда меняется hash-часть URL, например, когда пользователь перейдет с адреса example.domain/test.aspx#page1 на example.domain/test.aspx#page2 .
    onmessage Событие происходит, когда сообщение получено через источник события.
    onoffline Событие вызывается браузером в том случае, когда браузер определит, что соединение с интернет пропало.
    ononline Событие вызывается браузером в том случае, когда соединение с интернет возобновилось.
    onpagehide Событие происходит, когда пользователь покидает страницу посредством навигации, например, нажав на ссылку, обновив страницу, заполнив форму и т.д.
    onpageshow Событие происходит, когда пользователь переходит на веб-страницу, после события onload.
    onunload Событие срабатывает если страница не загрузилась по каким-либо причинам, либо при закрытии окна браузера.

    Статья не совсем актуальна
    В 10.2 и выше, добавлена возможность для переименования страницы с правилами сайта прямо в админпанели движка, при непосредственном редактировании текста правил. Тем не менее, страница с правилами сайта в осталась. Она существует и находится на любом сайте DLE по адресу http://мой_сайт/rules.html
    Как выжать из этого адреса все соки - читаем дальше

    Страница с правилами сайта в CMS DLE

    Страница с правилами сайта в - это системная статическая страница. Она обрабатываются движком и генерируется точно также, как и обычная стат.страница. Только удалить её невозможно - не предусмотрено разработчиком движка. Даже, если сами правила сайта выключены для показа при регистрации, то - страница с правилами сайта всегда доступна по адресу http://мой_сайт/rules.html Первый-же поисковик, который там её найдёт - начнёт блевать и плеваться на текст и название. Оно и не мудрено. Ведь на всех сайтах DLE - одно и тоже.

    Когда страница с правилами сайта попадает в карту сайта, то она расценивается поисковиком как «мусорная» и не берётся в поисковый индекс, поскольку правила сайта, практически везде - одинаковы. Поэтому, страница с правилами сайта в DLE, по-умолчанию - запрещена (закрыта) от поисковой индексации в файле (строка Disallow: /rules.html ).

    Уникальность «Правил сайта»

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

    Нет, ну кто-то видел на фейсбуке или в твиттере какие-нибудь грозные или особые правила при регистрации? Или, может быть - на Вконтакте и в Одноклассниках они есть? То-то-же!

    А какой-то сайтец, с посещалкой в 1000 уников -
    начинает писать свои уникальные правила для юзеров.
    Как на меня, так лучшие правила на сайте - это полное их отсутствие.
    Если пользователь нормальный и адекватный, он и так всё понимает.

    Нет страницы - нет проблем

    Ни для кого не секрет, что блокировка страниц и каталогов от поисковой индексации - не панацея. Так или иначе, любая страница сайта рано или поздно будет «пережёвана» поисковиком. Например, взять тот-же Яндекс. Его поисковые роботы выкачают из сайта абсолютно всё, что только найдут и лишь потом - начнут сортировать и думать - выдавать страницы в поиск или нет. Это, совершенно очевидно, несмотря на умилительные заверения Яндекса, что он и его роботы лишнего материала из сайта не качают. Мол, если веб-страница закрыта от индексации, то Яндекс сохраняет только её адрес с пометкой , или (кто как закроет).

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

    Открываем правила сайта для поисковиков

    Делаем смелый шаг и открываем поисковикам доступ к странице с правилами сайта. Для этого, в своём файле находим строку Disallow: /rules.html и удаляем её нафик. Дело сделано! Теперь, любой поисковый робот сможет официально залезть в открытые «Правила сайта» и конечно-же - сказать «Фe-e!» и «Бe-e!». Чтобы этого не произошло, переделываем страницу «Правила сайта» - вставляем свой уникальный текст на любую тему, картинки и меняем наименование (тайтл) страницы.

    Редактирование страницы «Правила на сайте»

    Редактирование страницы с правилами сайта доступно в админпанели движка DLE, в разделе «Список всех разделов» - «Правила на сайте». Редактирование страницы «Правила на сайте» выполняется, как для любой другой статической страницы - в штатном режиме работы визуального текстового редактора. Здесь проблемы могут быть только с написанием уникального текста да подбором уникальных картинок. Чуть выше, есть специальное окошко для введения заголовка (тайтла) для обновляемой страницы. Но, такое новшество появилось в , начиная с версии 10.2.

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

    Переименование страницы «Правила на сайте»
    (для CMS DLE 10.1 и ниже)

    Непосредственно переименование самой страницы «Правила на сайте» производится в файле adminpanel.lng, который находится в папке language/Russian/adminpanel.lng. Файл adminpanel.lng - это системный файл движка DLE. Для его редактирования, заходим на свой сервер (иначе - никак).

    Открываем файл adminpanel.lng.
    Ищем строку
    "rules_edit" => "Общие правила на сайте"
    Меняем слова «Общие правила на сайте» на своё новое название. Закрываем. Сохраняем. (Менять можно только кириллицу, которая находится между кавычек. Иначе, вообще перестанет работать.)

    Чистим кэш движка и браузера . После правки и сохранения файла adminlogs.lng нужно обязательно почистить кэш движка и кэш браузера, чтобы заставить движок по-новой сгенерировать страницу с новым наименованием, а браузер - её скачать. Если это не помогает и продолжает отображаться старое название - нужно зайти в админпанель движка, отредактировать и пересохранить страницу «Правила на сайте» каким-нить незначительным знаком. Например - поставить точку в тексте (потом можно будет все исправить назад). Подобные издевательства и зверства обязательно прочистят движку и серверу мозги и заставят их сгенерировать и отобразить новое название.

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





    

    2024 © gtavrl.ru.