В прошлых уроках мы познакомились с разметкой элементов с помощью HTML. Многие из этих элементов уже имеют какое-то свое визуальное оформление: параграфы имеют отступы, ссылки выделяются подчеркиванием и цветом, заголовкам устанавливаются другие значения размера шрифта. Обычно этого недостаточно для создания полноценных современных сайтов. Какие-то стили нам просто не подходят, а какие-то элементы мы хотим стилизовать отдельно.
Для визуального оформления WEB-страницы создан язык CSS. CSS переводится как каскадные таблицы стилей (Cascading Style Sheets). Именно этот язык отвечает за то, как наши HTML-элементы будут выведены пользователю в браузере.
В этом уроке мы разберем ту часть аббревиатуры, которая относится к таблицам стилей. Что такое каскадность и как это работает, вы сможете прочитать в следующем уроке.
Любые стили CSS, будь то цвет текста или целая анимация, записываются по одной и той же формуле: название свойства: значение;
.
Чтобы добавить стиль к элементу, необходимо использовать селектор. Он указывает, к какому именно элементу или элементам нужно добавить наши стили. Для примера возьмем следующую HTML-разметку:
<p>
Хекслет — практические курсы по программированию. Мы помогаем новичкам стать
профессиональными программистами, а опытным разработчикам получать новые
знания и расти профессионально.
</p>
Изменим размер и цвет шрифта в этом предложении. Это можно сделать следующей CSS-записью:
p {
color: red;
font-size: 20px;
}
Что означает эта таинственная запись выше? Ее можно условно разбить на три основные составляющие:
p
— это селектор. Здесь мы говорим, чтобы браузер выбрал все параграфы на странице. О том, какие бывают селекторы, мы поговорим чуть позже.{ }
. Они отделяют селектор от правил. Все правила записываются уже внутри этих фигурных скобок.Разберем некоторые свойства, которые помогут вам оформлять текст:
font-size
. Это свойство позволяет задать размер шрифта. Со временем вы узнаете множество различных единиц, в которых можно записать значение. На начальном этапе используйте значения в пикселях. Это достаточно простая и понятная единица измерения, которая не зависит от того, какие еще стили указаны у текста.color
. Это свойство поможет вам установить новое значение цвета для выбранного текста. Цвет может записываться разными способами. Помимо этого есть большой набор цветов, которые можно записать словами. Это отличный способ познакомиться со свойством color
. Посмотреть на все такие записи можно здесь.text-align
. Свойство, устанавливающее выравнивание текста. Оно может принимать одно из следующих значений: left
, right
, center
, justify
.Использовать CSS на странице можно с помощью нескольких способов:
<style>
внутри HTML-разметкиРазберемся с каждым способом отдельно.
Данный способ один из самых удобных в реальной разработке. Так как стилей в проекте обычно много, то держать их в HTML-файле не очень удобно. Связано это с тем, что HTML-файл становится очень большим и ориентироваться в нем становится невозможно. Чтобы этого избежать, можно создать отдельный CSS-файл. Этот файл будет иметь расширение .css, имя же может быть произвольным.
Представим, что на компьютере создана отдельная директория с проектом. Она может выглядеть следующим образом:
site/
├── css/
│ ├── main.css
├── html/
│ ├── index.html
Добавим основную информацию в файл index.html:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Основной файл index.html</title>
</head>
<body></body>
</html>
Теперь необходимо подключить файл main.css в наш файл index.html. Для этого используется специальный тег <link>
. У данного тега необходимо указать атрибут href
, значением которого будет путь до файла main.css. Тег <link>
указывается в секции <head>
.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Основной файл index.html</title>
<link rel="stylesheet" href="../css/main.css">
</head>
<body></body>
</html>
Дополнительно разберем эту запись: ../css/main.css
. Ее можно условно разбить на три составляющие:
Если бы наши файлы index.html и main.css находились в одной директории, то подключение выглядело бы следующим образом: href="main.css"
.
После подключения файла мы можем записывать все нужные стили именно в файле main.css. Они автоматически подключатся на наш сайт.
Вторым способом использования CSS является использование стилей в специальном теге <style>
. Для этого нет необходимости создавать отдельный файл и подключать его к HTML. В этом случае тег <style>
обычно указывается внутри секции <head>
. Хоть это и не обязательное правило, но желательно придерживаться именно такой структуры.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Основной файл index.html</title>
<style>
p {
color: red;
font-size: 20px;
}
</style>
</head>
<body>
<p>Параграф с размером шрифта 20 пикселей. Текст написан красным цветом.</p>
</body>
</html>
Данный способ не является основным, хотя и рекомендуется для некоторых стилей. Это позволит отобразить некоторые стили еще до того, как загрузится CSS-файл. Какие стили рекомендовано так выносить, вы сможете узнать в процессе становления вас как профессионала.
Последним вариантом использования CSS являются инлайн-стили. Они подключаются с помощью атрибута style
у любого тега в разметке. Это наименее предпочтительный способ. Его тяжело читать, особенно если у тега десяток стилей. К тому же вы не сможете записать стили для всех одинаковых тегов. Придется для каждого указывать отдельно. Это приведет к постоянному копированию стилей.
Возьмем прошлый пример и добавим inline стили:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Основной файл index.html</title>
</head>
<body>
<p style="color: red; font-size: 20px;">
Параграф с размером шрифта 20 пикселей. Текст написан красным цветом.
</p>
</body>
</html>
При создании разметки разработчикам удобно отделять одинаковые теги друг от друга с помощью имён. Например, на странице есть два заголовка:
<h2>Как стать программистом</h2>
<!-- Тут много текста -->
<h2>Какими навыками обладает программист</h2>
<!-- Тут много текста -->
Оба заголовка второго уровня, но в дизайне они могут иметь разные CSS стили. Вы уже познакомились с селектором по тегу и он не поможет дать каждому из заголовков уникальные стили.
Дать имена тегам позволяют атрибуты class
и id
. Эти атрибуты принимают произвольные имена, с помощью которых можно обратиться к элементу в CSS.
Различие класса и идентификатора в количестве использований:
class
— значение атрибута может устанавливаться сколько угодно раз в рамках одной страницыid
— значение атрибута устанавливается у одного элемента на странице. Не может быть двух одинаковых идентификаторов на страницеЕсли значений у атрибута несколько, то они указываются через пробел, например:
<h2 class="title title-big">Как стать программистом</h2>
<!-- Тут много текста -->
<h2 class="another-title title-big">Какими навыками обладает программист</h2>
<!-- Тут много текста -->
<div id="help">Второго элемента с идентификатором help быть не должно</div>
<div id="another-help">Второго элемента с идентификатором another-help быть не должно</div>
Чтобы обратиться к элементам по их классу или идентификатору, используются специальные селекторы, которые мы сейчас и рассмотрим.
Селекторы — краеугольный камень всего CSS.
«Не так важны стили, как то, к чему они применяются» © Народная мудрость
Селекторы позволяют выбирать элементы, к которым будут применяться стили. Это очень мощный и многогранный инструмент, который позволяет выбирать не только по тегу, но и по классу, идентификатору, наведению мыши, разным атрибутам, выбирать только четные или нечетные элементы и так далее.
Разбор каждого селектора — это тема для целого курса. Сейчас нас интересуют три основных селектора, которые можно назвать базовыми:
.название-класса
, добавить стили.#имя-идентификатора
.Рассмотрим все три селектора на реальном примере:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Основной файл index.html</title>
<link rel="stylesheet" href="../css/main.css">
</head>
<body>
<main class="content">
<h1 id="main-title">Заголовок с идентификатором</h1>
<p>Просто параграф без класса или идентификатора</p>
</main>
</body>
</html>
#main-title {
color: white;
font-size: 20px;
text-align: center;
}
.content {
background-color: black;
}
p {
color: white;
}
После применения этих стилей получится следующая картина:
<main>
. Для этого использовали класс content
и селектор .content
;main-title
, поэтому для добавления стилей мы смогли использовать селектор по идентификатору #main-title
;В реальной разработке не всегда удается пользоваться только этими тремя видами селекторов в том виде, в котором вы их только что изучили. Зачастую нам необходимо ограничить область, для которой будут применяться стили. Разберем на примере:
<section class="news">
<h2>Новости</h2>
<article>
<h2>Новость 1</h2>
<p>Текст новости</p>
</article>
<article>
<h2>Новость 2</h2>
<p>Текст новости</p>
</article>
</section>
<section class="stories">
<h2>Интересные истории</h2>
<article>
<h2>История 1</h2>
<p>Текст истории</p>
</article>
<article>
<h2>История 2</h2>
<p>Текст истории</p>
</article>
</section>
Как добиться того, чтобы заголовки новостей были больше? Можно для каждого заголовка в новости добавить свой класс. Это хорошее решение, если новостей немного или нет необходимости для каждой такой секции вводить новые стили для заголовков.
Более простым решением станет использование вложенности селекторов. Вначале посмотрим, как решить нашу задачу:
.news article h2 {
font-size: 32px;
}
Этот селектор комбинирует два уже известных типа:
.news
article
и h2
Разделив их пробелом, мы сказали браузеру: «Возьми все заголовки <h2>
из <article>
, который лежит внутри элемента с классом news
». В примере это элемент <section class="news">
.
Читать селекторы стоит именно таким образом — справа налево. Такой подход называется вложенностью селекторов. Можно комбинировать что угодно и с какой угодно глубиной.
Важно: для удобной работы не стоит использовать очень большую вложенность. Старайтесь использовать комбинацию не более 2 или 3 селекторов
Важно понимать, что такая запись .news article h2
выберет все заголовки второго уровня во всех <article>
, которые лежат внутри блока с классом news
. Давайте немного видоизменим верстку, чтобы это проверить.
<section class="news">
<h2>Новости</h2>
<article>
<h2>Новость 1</h2>
<p>Текст новости</p>
</article>
<article>
<h2>Новость 2</h2>
<p>Текст новости</p>
<section>
<h2>Похожие новости</h2>
<article>
<h2>Похожая новость 1</h2>
<p>Текст новости</p>
</article>
</section>
</article>
</section>
Ко второй новости мы добавили блок «Похожие новости». Самое интересное, что наше правило font-size: 32px;
применится и к заголовку «Похожие новости», и к заголовку «Похожая новость 1». Так как оба заголовка так или иначе лежат внутри <article>
, которые находятся в блоке с классом .news
.
Такой тип селекторов называется контекстным или селектор потомков. С его помощью мы выбираем всех потомков, которые встречаются внутри самого левого селектора.
Как же нам выбрать только те заголовки, которые относятся непосредственно к новостям, а не к похожим новостям или заголовкам других секций? Здесь нам на помощь придет дочерний селектор. Его суть в выборе только тех элементов, которые непосредственно лежат внутри нужного нам блока. Без учета всех остальных вложенностей. Чтобы указать такой селектор, используется символ >
. Укажем, что нам нужны только те <article>
, которые лежат внутри .news
. И нам нужны заголовки, которые находятся внутри этих <article>
. Это делается следующим образом:
.news > article > h2 {
font-size: 24px;
}
Теперь размер шрифта для заголовков «Похожие новости» и «Похожая новость 1» не будет увеличен, так как мы указали более конкретный селектор для заголовков.
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт