Верстка / Классы

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

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

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

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

Класс – это именованный набор атрибутов. Который можно привязать к тегу через атрибут class.

Буду использовать такой файлик, а ты стало быть используй свой

<div style="background:#cceb92 ;text-align: center;font-weight: bold; padding: 8px 16px ;border: 2px solid rgb(230, 139, 21)"">
    Однажды весною, в час небывало <span style="background: yellow;">жаркого </span> заката, в <span style="display: inline-block; padding: 8px; background: red;">Москве,</span>  
    на Патриарших прудах, появились два гражданина. 
    Первый из них, одетый в <span style="background: yellow;">летнюю серенькую </span>  пару, 
    был <span style="background: yellow;">маленького</span> роста, упитан, лыс, свою <span style="background: yellow;">приличную</span> шляпу 
    пирожком нес в руке, а на хорошо выбритом лице его помещались 
    <span style="background: yellow;">сверхъестественных</span> размеров очки в <span style="background: yellow;">черной роговой</span> оправе. 
    Второй – <span style="background: yellow;">плечистый, рыжеватый, вихрастый молодой</span> человек в
        <span style="background: yellow;">заломленной на затылок клетчатой</span> кепке – был в ковбойке, 
    <span style="background: yellow;"> жеваных белых</span> брюках и в <span style="background: yellow;">черных</span> тапочках.
</div>
<br>
<div style="text-align: right; width: 500px; background:linear-gradient(90deg, #9bd8f5, #e97f84 ); padding: 8px 16px; border: 4px solid rgb(17, 0, 255);">
    Первый был не кто иной , как <span style="display:inline-block; padding: 6px; background: linear-gradient(80deg, yellow , red); ">Михаил Александрович Берлиоз</span>,
    председательно правления одной из <span style="background: yellow;">курпнейших московских литературных</span> ассоциаций, сокращенно именуемой МАССОЛИТ, и редактор <span style="background: yellow;">толстого художественного</span>
    журнала, а <span style="background: yellow;"> молодой спутник его поэт </span>
    <span style="display: inline-block; padding: 8px; background: wheat;"> Иван Николаевич Понырев </span>, пишущий под 
    псевдонимом <span style="display: inline-block; padding: 5px; background: yellow;">Бездомный</span>
</div>
<br>
<div style="text-align: left; width: 50%; background: linear-gradient(50deg, white, red); padding: 8px 16px; border: 10px solid green;">
    Попав в тень чуть <span style="background: yellow; border: 1px solid black;">зеленеющих</span> лип, писатели
    первым долгом бросились к <span style="background: yellow;">пестро раскрашенной </span>
    будочке с надписью "Пиво и воды"

</div>

все прилагательные выделены у нас следующим образом, у всех (почти) одинаковый атрибут style

<span style="background: yellow;">пестро раскрашенной </span>

чтобы добавить класс, надо вставить в разметку кода специальный парный тег <style>, например, прям после всех дивов

<div style="background:#cceb92 ;text-align: center;font-weight: bold; padding: 8px 16px ;border: 2px solid rgb(230, 139, 21)"">
  <!-- ... -->
    будочке с надписью "Пиво и воды"
</div>

<style>
    /* коментарии внутри style пишутся вот так */
   /* щас мы тут класс создадим */
</style>

добавляем внутрь style класс. Имя класса внутри стайл тега, надо писать с точечки, вот так

<style>
    .adjective {
        
    }
</style>

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

<style>
    .adjective {
        background: yellow;
    }
</style>

теперь у всех прилагательных уберем атрибут style и добавил атрибут class, то есть

<span style="background: yellow;">пестро раскрашенной </span>

заменяем на

<span class="adjective">пестро раскрашенной </span>

обрати внимание что в атрибут мы пишем название без точечки.

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

Для этого выделяем один style со стилем, вот так

а затем начинаем тыкать Ctrl+D пока не будут выделены все элементы с таким же содержимым:

и пишем сразу во всех местах

визуально ничего не должно поменяться

просто теперь все прилагательные привязаны к классу adjective.

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

<style>
    .adjective {
        background: yellowgreen;
    }
</style>

можем рамочку добавить

.adjective {
    background: yellowgreen;
    border: 2px dashed black;
}

добавим несколько прикольных стилей:

.adjective {
    background: yellowgreen;
    border: 2px dashed black;
    display: inline-block; /* это мы уже знаем, просто чтобы прилагательные были как блоки */
    margin: 2px; /* отступы со всех сторон */
    padding: 0 4px; /* отступы внутри границы */
    border-radius: 8px; /* закруглим границы */
    box-shadow: 0 0 8px grey; /* добавим тень, 0 0 это ее сдвиг относительно блока, 8px радиус тени ну и цает */
}

выглядит уже интереснее:

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

на самом деле мы можем подцепить его к классу, и тем не менее оставить стиль. То есть добавим класс в

<span style="background: yellow; border: 1px solid black;">зеленеющих</span>

получится так

<span class="adjective" style="background: yellow; border: 1px solid black;">зеленеющих</span>

а выглядит так

на самом деле тут произошли некоторые очень важные штуковины. А именно стили из style переписали те что были в классе adjective. То есть для фона используется желтый цвет, вместо зеленого из adjective и рамка тоненькая и без разрывов. Это стандартное поведение. То есть стиль всегда важнее того что в классе.

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

.adjective {
    background: yellowgreen;
    border: 2px dashed black !important; /* добавил в конец !important */
    /* ... */
}

тыдыщь:

в качестве особых извращений мы в принципе можем запихать !important внутрь стиля и тогда он станет важнее того что в классе:

<span class="adjective" style="background: yellow; border: 1px solid black !important;">

вернулись к началу

Но вообще людей использующих !important очень не любят и могут даже побить. Так что никогда не используй !important.

Добавляем реакцию на мышку

Еще один функционал, которые добавляют классы — это возможность реагировать на наведение мышки. Для этого используются так называемые псевдоклассы.

Когда ты наводишь мышь на тег, то ему неявно добавляется класс :hover, и мы можем изменить то как будет отображаться блок добавив новый класс, вот так

<style>
.adjective {
    /* … */
}

.adjective:hover {
    /* сейчас сюда чего-нибудь добавим */
}
</style>

например, добавим смену фона, например:

.adjective:hover {
    background: skyblue;
}

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

.adjective:hover {
    background: skyblue;
    cursor: pointer;
}

во как

кстати “зеленеющих” не реагирует на смену цвета, потому что там в атрибует !important.

Возможно ты заметила что смена цвета происходит сильно резко.

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

.adjective {
    /* ... */
    transition: all 0.3s; /* all означает что сглаживаем все преобразования, 0.3s -- это скорость перехода в секундах */
}

/* это не трогаем */
.adjective:hover {
    background: skyblue;
    cursor: pointer;
}

теперь все очень гладенько меняется

если поиграть со стилями можно очень необычных эффектов

.adjective:hover {
    background: skyblue;
    cursor: pointer;
    border-width: 4px; /* меняю ширину границы, да можно только ширину указать */
    padding: 6px; /* меняю отступы от границы */
    box-shadow: 0 0 30px white; /* делаю тень белой и побольше, получается иллюзия свечения */
}

Но лучше конечно не злоупотреблять особенно размерами и отступами.

Все можно теперь задание пилить =)

3

Заменить стили на классы, чтобы проще было разбираться со следующим заданием

  • для первого параграфа назвать класс paragraph1
  • для второго параграфа назвать класс paragraph2
  • для третьего параграфа назвать класс paragraph3
  • для имен собственных использовать класс name
  • для имен собственных вынести в класс только общие стили, а специфические, типа цвета фона оставить в тегах.

добавить реакцию на наведение мышки, по вкусу