Css приоритет стиля – Приоритеты в Css и их повышение за счет Important, комбинация и группировка селекторов, пользовательские и авторские стили

» Наследование, каскадирование и специфичность CSS

 

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

Но для начала разберемся, что означает само понятие Cascading Style Sheets, данный вопрос кстати могут задать на собеседование, разбираемся…

Cascading Style Sheets переводиться как «каскадная таблица стилей». Расшифровывать данное понятие будем с конца.

Что такое стиль?

Стиль это  набор правил оформления и форматирования, который может быть применен к различным элементам страницы или «по бытовому» это селектор с набором свойств и их значений, пример стиля

h2 {color:red; font-size: 50px;}

h2 {color:red;

   font-size: 50px;}

Что такое таблица стилей?

Это набор стилей, пример

h2 {color:red; font-size: 50px;} p {color:green;}

h2 {color:red;

     font-size: 50px;}

p  {color:green;}

Почему каскадная таблица стилей?

Каскадная это потому, что css использует принцип каскадирования

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

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

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

Все элементы наследники body, будут иметь текст красного цвета.

 

Разберемся с приоритетами

 

Перечислим таблицы стилей по возрастанию приоритетов

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

3.1. таблицы подключаемые через тэг <link>, располагаются во внешнем файле css и имеют наименьший приоритет среди других таблиц web документа

3.2. таблицы помещенные в сам html документ, между тэгами <style> … </style>, имеют более высокий приоритет чем таблицы в 3.1

3.3. таблицы стилей которые располагаются в атрибуте style=» … «, более приоритетны чем таблицы 3.2 

3.4. самый высоки приоритет у стилей с меткой на конце «!important»

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

3.4>3.3>3.2>3.1>3>2>1 

 Пример, есть три стиля на web странице

  1. первый стиль расположен в файле main.css с содержимым
  2. второй стиль объявлен между тэгами <style>…</style> в заголовке страницы

    <style>p {color:red;}</style>

    <style>p {color:red;}</style>

  3. и наконец последний объявлен в самом тэге p через атрибут style, таким образом

    <p></p>

    <p></p>


    Результирующий стиль для p будет color:green, так как он имеет наибольший приоритет.

Каскад строился таким образом: стиль в main.css заменил стиль для p, который располагается в браузере в качестве «по умолчанию», т.к. он имеет приоритет выше; далее стиль в <style></style> «победил» стиль для p указанным main.css; у нас есть еще стиль в атрибуте самого тэга p, т.к. он по приоритету выше чем стиль color:red указанный в <style></style>, то он заменяет его, в итоге результирующий стиль будет color:green.

 

 

А что такое специфичность?

 

С приоритетами стилей из разных таблиц все понятно, но может возникнуть вопрос, а что если к одному html тэгу обращается несколько стилей из одной таблицы? Например к заголовку h2, в файле main.css будет прописано

h2 {color:red;} article h2 {color:blue;}

h2 {color:red;}

article h2 {color:blue;}

h2 в html документе будете расположен так:

<article> <h2>Заголовок</h2> <p>абзац</p> </article>

<article>

<h2>Заголовок</h2>

<p>абзац</p>

</article>

Какого цвета будет заголовок h2? Ответ: голубого

Оказывается стили в одной таблицы не всегда равны по приоритету между собой, важность стиля определяет такое понятие как специфичность. Это означает что чем специфичные селектор, тем более приоритетный стиль, в нашем случае селектор «article  h2″ более специфичный чем «h2».

Определить специфичность  приоритетом можно по следующему правилу:

Специфичность селектору будем выражать в баллах, следующим образом:

  • селектор за каждый идентификатор получает — 100 баллов (пример идентификатора «#id«)
  • селектор за каждый класс, либо псевдо класс — 10 баллов (пример класса и псевдокласса «.my«, «:href«)
  • селектор за каждый тег получает— 1 балл (пример «h2«)

В нашем случае первый селектор «h2» имеет 1 балл, а второй селектор «article h2» имеет 2 балла, следовательно стиль color:blue важнее чем color:red, поэтому в результате цвет заголовка будет голубой.

Приведу пример специфичностей селекторов, в левом столбце селекторы, в правом «баллы специфичности

»

 

 #my p#id 201 балл
 #my #id 200 балл
 #my p 101 балл
 #id 100 балл
 .wrapper .content p 21 балл
 .content div p 12 балл
 .content p 11 балл
 p 1 балл

 

 

После всего сказанного …

 

Хочу отметить несколько моментов, на которые стоит обратить внимания

  1. Вопрос про приоритеты, специфичность стилей идет только тогда, когда к одному элементу применяется два и более стилей, т.е. когда возникает конфликт стилей.
  2. Конфликт стилей будет только тогда, когда стили указывают на один элемент непосредственно. Например, если мы обозначим для тэга article {color:blue;}
     что цвет текста должен быть голубым, а потом для его дочернего элемента h2 {color:green;} что цвет текста должен быть зеленым, то результат для h2 будет зеленый, никакого конфликта не возникает. Правило задающее стиль непосредственно элементу «не конкурент» правилу унаследованное от родительского элемента, он всегда важнее.
  3. Если два и более конфликтующих правила одинаковы по специфичности (одинаковые баллы), то  применяется тот который написан последним.

Вам будет интересно:


Буду признателен если вы поделитесь данным постом

CSS приоритет — CodeRoad

Моя веб-страница содержит:

<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
<style type="text/css">
td {
    padding-left:10px;
} 
</style>

Ссылочная таблица стилей содержит:

.rightColumn * {margin: 0; padding: 0;}

У меня есть таблица в rightcolumn ID, где я хочу, чтобы клетки были немного заполнены. Однако указанная таблица стилей имеет приоритет над встроенным стилем. Я вижу это визуально, а также через Firebug. Если я выключу инструкцию padding:0 в Firebug, то заполнение слева вступит в силу.

Как я могу заставить padding-left работать?

css

Поделиться Источник user80603     20 марта 2009 в 17:47

8 Ответов



41

Большинство ответов верны, когда говорят, что это проблема специфичности, но неверны или неполны в объяснении правил специфичности.

В основном в вашем случае

.rightColoumn * — это «more specific», чем td , и поэтому это правило выигрывает, даже если оно приходит раньше.

Правила CSS 2.1 находятся здесь . Эти правила таковы:

  • граф 1 Если объявление От является атрибутом ‘style’, а не правилом с селектором, 0 в противном случае (= a) (в HTML значения атрибута «style» элемента являются правилами таблицы стилей. Эти правила не имеют селекторов, поэтому a=1, b=0, c=0 и d=0.)
  • подсчитайте количество атрибутов ID в селекторе (= b)
  • подсчитайте количество других атрибутов и псевдоклассов в селекторе (= c)
  • подсчитайте количество имен элементов и псевдоэлементов в селекторе (= d)

Объединение четырех чисел a-b-c-d (в системе счисления с большой базой) дает специфику.

Так что в вашем случае у вас есть два правила:

.rightColumn * {} /* a = 0, b = 0; c = 1, d = 0 : Specificity = 0010*/
td {} /* a = 0, b = 0, c = 0, d = 1 : Specificity = 0001 */

0001 меньше, чем 0010, и поэтому первое правило выигрывает.

Есть два способа исправить это:

  1. Используйте !important , чтобы сделать правило более «important». Я бы этого не делал, потому что это сбивает с толку, когда у вас есть много правил, разбросанных по нескольким файлам.
  2. Используйте селектор с более высокой спецификацией для td, который вы хотите изменить. Вы можете добавить к нему имя класса или идентификатор, и это позволит вам заменить правило из связанного файла CSS.

Пример:

<style>
  .rightColomn * { padding: 0; } /* 0010 */
  td#myUnpaddedTable { padding: 10px; } /* 0101 */
  td.anUnpaddedTable { padding: 10px; } /* 0011 */ 
</style>

Edit: исправлены правила специфичности для *. Комментарий Дэвида побудил меня перечитывать спецификацию, которая действительно показывает, что селектор * не вносит никакого вклада в оценку специфичности.

Поделиться Mr. Shiny and New 安宇     20 марта 2009 в 19:21



19

Как уже упоминали другие, у вас есть проблема специфичности. При определении того, какое из двух правил должно иметь приоритет, механизм CSS подсчитывает количество #id С в каждом селекторе. Если у одного больше, чем у другого, он используется. В противном случае он продолжает сравнивать .class es и tag s таким же образом. Здесь у вас есть класс для Правила таблицы стилей, но не для встроенного правила, поэтому таблица стилей имеет приоритет.

Вы можете переопределить это с помощью !important, но это ужасно большой молоток, чтобы использовать его здесь. Вам лучше улучшить специфику вашего встроенного правила. Основываясь на вашем описании, похоже, что ваш элемент .rightColumn либо является, либо содержит table , и вы хотите, чтобы ячейки в этой таблице имели дополнительный интервал? Если это так, то вы ищете селектор «.rightColumn td«, который более специфичен, чем правило таблицы стилей, и будет иметь приоритет.

Поделиться Ben Blank     20 марта 2009 в 18:17



4

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

td {
    padding-left: 10px !important;
} 

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

Поделиться Daniel Lew     20 марта 2009 в 17:52



1

Попробуйте это вместо этого:

td.rightColumn * {margin: 0; padding: 0;}

td во внешней таблице стилей является более конкретным,поэтому он выигрывает. Если вы квалифицируете класс rightColumn с именем элемента, то будут применены стили уровня страницы.

Поделиться Andrew Hare     20 марта 2009 в 17:52



1

Вы могли бы попробовать добавить ! важный флаг для вашего встроенного css.

напр.

тд { padding-left:10px ! важный; }

Кроме того, для общих правил по упорядочению правил css, взгляните на это :

http://www.w3.org/TR/CSS2/cascade.html # специфика

Поделиться deanWombourne     20 марта 2009 в 17:53



1

Сделать это:

.rightColumn *,
td.rightColumn * {
  margin: 0;
  padding: 0;
}

Приоритет в CSS выглядит следующим образом:

  • Если какое-то правило имеет значение ID, то оно будет предшествовать всему остальному.
  • Если какое-то правило имеет атрибут класса, оно будет предшествовать правилам только для тегов.
  • Если два правила имеют оба IDs или метки, то число их развязывает «fight».

Пример:

<style type="text/css">
  #myid{
    padding: 10px;
  }

  .class{
    padding: 20px;
  }
</style>
<div></div>

Хотя ваш div имеет как ID, так и класс, правило ID будет переопределять правило .class.

Чтобы узнать больше о приоритетах CSS правил, я бы рекомендовал http://www.w3.org/TR/CSS2/cascade.html#специфичность .

Поделиться Seb     20 марта 2009 в 17:53



1

хорошо, я признаю, что немного опоздал на игру здесь.. но через 3 года я думаю, что все еще могу стрелять за этот ответ на первое место..

дополнительный соус в моем ответе — это то, что есть exmaple css с 2 уровнями имени класса..

в приведенном ниже примере вы можете увидеть, что ‘td’ без класса получает стиль «.interval td», а td с классом «indragover» получает стиль» table.interval td.indragover»..

(этот код поставляется для перетаскивания html, поэтому есть некоторые javascript, применяющие класс ‘indragover’ к td в dragenter, dragleave events)

// put this in a css file
.interval {
    height: 100%;
    width: 100%;
    background: #FFFFCC;
    border: 2px solid #000000;
    border-collapse: collapse;
}

table.interval tr td {
    border: 2px solid black;
    color:#112ABB;
    background: #FFFFCC;
    height: 20px;
}

table.interval td.indragover {
    background: #AAAA00;
}

// put this in a html file
<table>
<tr><td>blah</td><td>blah</td></tr>
<tr><td>blah</td><td>blah</td></tr>
</table>

Поделиться dancl     01 марта 2012 в 20:26



-1

1.div p.bio {font-size: 14px}
#sidebar p {font-size: 12px}

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

id более специфичен, чем class , который более специфичен, чем элемент.

2.p {font-size: 12px}
p.bio {font-size: 14px}

Вторая строка CSS ( p.bio) более конкретна, чем первая, когда речь заходит о вашем class="bio" абзаце.

уровень приоритета class выше, чем элемент p .

Поделиться asim muhammad     29 сентября 2015 в 19:54



Приоритет правил CSS

Я видел: CSS 2, приоритет таблиц стилей, импортированных с помощью элемента link В каком порядке переопределяются таблицы стилей CSS? таблица стилей-может ли один файл CSS иметь приоритет над другим…


CSS Приоритет Стиля

Я только начал изучать курс по основному HTML & CSS. Я изучал приоритет, когда речь заходит о CSS селекторах сегодня. Теперь у нас есть следующее упражнение, которое мы ходили, и мне было…


Могу ли я изменить приоритет стиля css в Javascript?

Я кодирую онлайн-редактор css. Если я изменяю css элемента, используя как jQuery(selector).css() или element.style= , все они изменяют встроенный стиль элемента. Как вы знаете, встроенный стиль…


CSS приоритет стилей

Существует следующее HTML: <li class=tabs__item tabs__item_with_new_orders>123</li> Я хочу сделать следующие шаги: Чтобы задать свойства tabs_item CSS Установить свойство background из…


Bootstrap и grocery_CRUD css приоритет

Я нахожусь в веб-проекте, использующем стиль bootstrap, затем я включил структуру grocery_CRUD, и у меня начались проблемы с css. Кажется, grocery_CRUD имеет приоритет над файлами css, когда он…


css-не селектор-ломает приоритет?

В файле css последний определенный стиль имеет приоритет над предыдущими определенными стилями. Но при использовании not selector приоритет нарушается, и класс с not selector получает приоритет,…


Приоритет CSS селекторов

Вот мой HTML: <input type=’submit’> Этот CSS делает границу blue для этого входа: Demo input{ border: 1px solid red; } .clsname{ border: 1px solid blue; } Но это делает границу…


CSS !важно не брать приоритет?

У меня есть следующая структура dom: <div class=ui-tabs> <ul> <li class=ui-state-default ui-tabs-selected ui-state-active> <a href=#>Text</a> </li> </ul> И…


CSS приоритет textbox больше MVC3

CSS по умолчанию соответствует стилю input[type=text]. Как я могу сделать это .wideTextBox имеет приоритет? @Html.TextBoxFor(model => model.ConsumerBatchInVM.OptInSmsMessage, new { @class =…


CSS приоритет селектора

Почему селектор css select, textarea, input[type=text], input[type=password],input[type=datetime], input[type=datetime-local], input[type=date], input[type=month], input[type=time],…


CSS приоритет селектора из разных файлов таблиц стилей

У меня есть страница с формой с вводом и элементами textarea. Я использую bootstrap вместе с моим собственным site.css. site.css находится перед boostrap.css в markup. У меня есть правило css на сайте css, которое выглядит следующим образом:

.formcontainer input, textarea {
    background-color: lightgray;
}

Элементы формы также имеют класс form-control из bootstrap, примененный к ним. Проблема заключается в том, что входные элементы приоритезируют правило из my site css и правильно применяют цвет фона. Однако для элементов textarea класс bootstrap имеет приоритет над правилом из my site.css. Все элементы формы завернуты в одинаковые контейнеры div с одинаковыми применяемыми классами. Я не могу понять, почему элементы получают правила с другим приоритетом.

Вот пример markup, где входной сигнал получает цвет фона, а textarea-нет:

<div>
    <div>
        <label>Email</label>
        <div>
            <input type="text" fieldrequired>
        </div>
    </div>
    <div>
        <label>Contact Instructions</label>
        <div>
            <textarea type="text" rows="10" cols="15" fieldrequired></textarea>
        </div>
    </div>
</div>
css twitter-bootstrap

Поделиться Источник HisDivineShadow     24 октября 2016 в 16:28

3 Ответа



2

site.css находится перед boostrap.css в markup.

Вот в чем твоя проблема. Как и в случае с CSS, правила, которые появляются позже (либо в пределах одного листа, либо в терминах нескольких включенных листов), будут перезаписывать правила, которые появляются перед ними. Переключите свой markup так, чтобы ваши пользовательские стили были последними — т. е. включите bootstrap.css перед site.css .

(Кроме того, имейте в виду, что textarea -довольно общий селектор. Вы имели в виду .formcontainer textarea ?)

Поделиться jack     24 октября 2016 в 16:31



2

Движок css всегда ставит приоритет .class и #id над tag-name . Проблема с вашим стилем заключается в том, что вы используете имя тега textarea , которое имеет класс form-control для стиля. Таким образом, движок css будет отдавать приоритет .form-control над tag-name . Смотрите следующие примеры.

Не получится

.formcontainer input,
textarea {
  background-color: lightgray;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div>
  <div>
    <label>Email</label>
    <div>
      <input type="text" fieldrequired>
    </div>
  </div>
  <div>
    <label>Contact Instructions</label>
    <div>
      <textarea type="text" rows="10" cols="15" fieldrequired></textarea>
    </div>
  </div>
</div>

будет работать

input.form-control,
textarea.form-control {
  background-color: lightgray;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div>
  <div>
    <label>Email</label>
    <div>
      <input type="text" fieldrequired>
    </div>
  </div>
  <div>
    <label>Contact Instructions</label>
    <div>
      <textarea type="text" rows="10" cols="15" fieldrequired></textarea>
    </div>
  </div>
</div>

Надеюсь, это поможет!

Поделиться Pranesh Ravi     24 октября 2016 в 16:57



1

В Bootstrap вы можете найти правило, которое начинается примерно так:

.formcontainer input, 
.formcontainer textarea {
    /* whatever */
}

В своей попытке переписать это, вы забыли контекст для textarea:

.formcontainer input, 
textarea {
    background-color: lightgray;
}

Это делает ваши правила для textarea менее специфичными, чем правило Bootstraps, поэтому даже если вы загружаете файлы css в правильном порядке, ваш стиль textarea не будет перезаписывать стиль textarea Bootstrap (предполагая, что вы находитесь в контексте .formcontainer ).

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

Поделиться connexo     24 октября 2016 в 16:54



css конфликты специфичности селектора из-за нескольких таблиц стилей

Хорошо, я читал через StackOverflow css селекторы. в потоке здесь каковы различия в этом синтаксисе? Что означает^=? Что он выбирает? все? [class^=’Rating’] и div.Rating0_5 Кроме того, здесь есть…


Приоритет правил CSS

Я видел: CSS 2, приоритет таблиц стилей, импортированных с помощью элемента link В каком порядке переопределяются таблицы стилей CSS? таблица стилей-может ли один файл CSS иметь приоритет над другим…


CSS 2, приоритет таблиц стилей, импортированных с помощью элемента link

Дано <link rel=STYLESHEET href=/css/t.cake.css type=text/css/> <link rel=STYLESHEET href=/css/f.css type=text/css/> <link rel=STYLESHEET href=/css/t.generic.css type=text/css/>…


dynamic CSS-несколько таблиц стилей против одного dynamic css (производительность рендеринга)

Я пишу сайт, поддерживающий plugins как внешний displays (пользовательский полноэкранный контент HTML, управляемый движком веб-сайта и драйвером js, предоставленным клиентом, который использует…


TinyMCE: ручная загрузка таблиц стилей с помощью link-tag

Я начинаю использовать TinyMCE в существующем проекте. К сожалению, проект использует таблицу стилей, которая объявляет правила CSS для селектора #content td , что было плохим решением дизайнера….


Массив таблиц стилей для оптимизации доставки CSS

В настоящее время я использую этот код для оптимизации доставки css, но это только для одной таблицы стилей . Как я могу изменить это, чтобы принять массив таблиц стилей ? Этот код был взят из…


Что определяет порядок CSS is «specified» между двумя элементами при загрузке из разных файлов?

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


Shadow Dom:: content css приоритет селектора?

У меня есть тень dom элемент, как это: <style> ::content div{ padding-left:130px; } </style> <div class=shadow> foo <content select=div></content> </div> Из…


CSS инструменты таблиц стилей

Каковы некоторые известные инструменты для разработки таблиц стилей css, которые будут производить кроссбраузерные css ? Есть ли что-то, что я могу запустить свой css, хотя к продукту cross browser…


Перекрытие таблиц стилей сторонних производителей

Я использую пакет css google в своем приложении Google script: <link rel=stylesheet href=https://ssl.gstatic.com/docs/script/css/add-ons1.css> Однако я хотел бы использовать свой собственный…


Приоритет стилей при включении двух внешних CSS файлов в HTML

В HTML-документ включены два внешних источника с описанием стилей (с помощью link href=file.css).

Ккакой из файлов будет приоритетным при определении стлиевого офоррмления заданного элемента, если стили заданы в обеих сайтах.

Приоритет можно установить:

  1. Указанием !important . Игнорируется IE.
  2. Более детальным описанием элемента (li .link перекроет .link).
  3. Порядком описания. Кто позже, тот и перекроет.

Более сложная формула, чтобы определить приоритет стилей.

Если к одному элементу одновременно применяются противоречивые стилевые правила, то более высокий приоритет имеет правило, у которого значение специфичности селектора больше. Специфичность это некоторая условная величина, вычисляемая следующим образом. За каждый идентификатор (в дальнейшем будем обозначать их количество через a) начисляется 100, за каждый класс и псевдокласс (b) начисляется 10, за каждый селектор тега и псевдоэлемент (c) начисляется 1. Складывая указанные значения в определенном порядке, получим значение специфичности для данного селектора.

* {} /* a=0 b=0 c=0 -> специфичность = 0 */ li {} /* a=0 b=0 c=1 -> специфичность = 1 */ li:first-line {} /* a=0 b=0 c=2 -> специфичность = 2 */ ul li {} /* a=0 b=0 c=2 -> специфичность = 2 */ ul ol+li {} /* a=0 b=0 c=3 -> специфичность = 3 */ ul li.red {} /* a=0 b=1 c=2 -> специфичность = 12 */ li.red.level {} /* a=0 b=2 c=1 -> специфичность = 21 */ #t34 {} /* a=1 b=0 c=0 -> специфичность = 100 */ #content #wrap {} /* a=2 b=0 c=0 -> специфичность = 200 */

Встроенный стиль, добавляемый к тегу через атрибут style, имеет специфичность 1000, поэтому всегда перекрывает связанные и глобальные стили. Однако добавление !important перекрывает в том числе и встроенные стили.

Если два селектора имеют одинаковую специфичность, то применяться будет тот стиль, что определен в коде ниже.

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

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