css Flashcards
Какие способы применения стилей существуют
Различают четыре способа применения стилей:
- Inline Styles: Инлайновые стили добавляются в атрибут style непосредственно внутрь конкретного тега
- Global Styles: Размещение стилей в head документа в элементе style. Недостаток этого способа в том, что CSS код применяется только к одной странице сайта, а не ко многим. Этот способ обычно применяется тогда, когда нужно написать CSS на конкретной странице сайта, не затрагивая остальных, и, в общем случае, к употреблению не рекомендуется.
- External Styled: Размещение ссылки на css документ через элемент link.
- Import inside css: Импорт описания стиля в документ.
Подключение стилей при помощи CSS-файла, в котором директивы @import подключают другие файлы, может значительно увеличить время отрисовки страницы. Браузер узнает о существовании других CSS-файлов слишком поздно, а если и в них окажутся импорты, то всё будет ещё хуже.
Какие css селекторы вы знаете?
- Селекторы тега
tag-name
- Селекторы класса
.class-name
- Селекторы идентификатора (id)
#id-name
- Селекторы атрибута
[attr]
[attr=value]
a[href="https://example.com"]
- Псевдоклассы & Псевдоэлементы
::before
::after
::selection
::first-line
::first-letter
:hover
:active
:invalid
:nth-child()
:first-child
:last-child
:only-child
- Комбинированные селекторы:
- селектор потомка
body p
- дочерний селектор
article > p
При этом будут выбраны только те элементы, соответствующие второму селектору, которые являются прямыми потомками элементов, соответствующих первому селектору. - Cоседний родственный комбинатор
p + img
Выберет элемент, который непосредственно следует за другим элементом и находится на одном с ним уровне иерархии. - Общий родственный комбинатор
p ~ img
Выберет все родственные элементы, которые находятся в любом месте после элементов.
- Универсальный селектор *
Как работает каскад в CSS?
- Сначала браузер анализирует и фильтрует значения, чтобы получить список объявленных значений.
- Затем включается алгоритм каскада, и в результате для каждого свойства остаётся только одно каскадированное значение.
- Если какое-то значение не было объявлено, оно получается с помощью наследования или начальных значений. Таким образом каждый элемент получает полный набор определённых значений.
- Затем наступает первый этап вычислений, и браузер преобразует определённые значения в вычисленные. Именно они передаются по наследству потомкам элемента.
- На втором этапе вычислений браузер разрешает те значения, которые зависят от устройства пользователя и относительного расположения элементов на странице, а также отбрасывает те значения, которые не нужны для отрисовки. В результате получаются используемые значения.
- В конце концов к веб-странице применяются некоторые ограничения, и используемые значения становятся действительными.
Как вычислить вес селектора?
- Приоритет.
У инлайн-стилей наивысший приоритет, их нельзя переопределить с помощью селекторов по идентификатору, классу или тегу во внешнем CSS. Единственный способ это сделать — добавить!important
к значению свойства. Но этот приём считается плохой практикой.
Вес селекторов:
1. Стили указанные в элементе разметки – 1000
- Селекторы по идентификатору #id-name – 0100
- Селекторы по классу, селекторы по атрибуту и селекторы с псевдоклассами – 0010
- Селекторы по тегу, селекторы с псевдоэлементами – 0001
- Комбинаторы +, >, ~, универсальный селектор * и псевдокласс :where() веса не имеют.
- Псевдоклассы :is(), :has() и :not() принимают вес наиболее специфичного селектора внутри скобок.
Вес записывается в виде a, b, c, d, где:
- a — встроенные стили,
- b — селектор по идентификатору,
- c — селектор классов, псевдоклассов и атрибутов,
- d — селектор по тегу и псевдоэлементу.
Если в цепочке есть один из этих селекторов, то на его место в строке a, b, c, d ставится единица. Если нет — нуль.
Посчитаем на примере ul .list-item.list-active
Встроенных стилей нет. Ставим нуль — 0, b, c, d.
Идентификатора тоже нет, добавляем на его место нуль — 0, 0, c, d.
Есть два класса, каждый весит единицу. Складываем их и подставляем в формулу: 0, 0, 2, d.
Тег один, ставим 1.
Получается, вес ul .list-item.list-active
0021
Наследование в CSS
Некоторые значения свойства CSS, установленные для родительских элементов наследуются их дочерними элементами, а некоторые нет. Например свойства color
и font-family
наследуются, а width
и padding
нет. Какие свойства наследуются по умолчанию, а какие нет, чаще всего определяется здравым смыслом.
Какие способы контроля наследования в CSS вы знаете?
CSS предоставляет четыре специальных универсальных значения свойства для контроля наследования. Каждое свойство CSS принимает эти значения.
inherit
Устанавливает значение свойства, применённого к элементу, таким же, как у его родительского элемента. Фактически, это “включает наследование”.
initial
Устанавливает значение свойства, применённого к выбранному элементу, равным initial value
этого свойства (в соответствии с настройками браузера по умолчанию. Если в таблице стилей браузера отсутствует значение этого свойства, оно наследуется естественным образом.)
unset
Возвращает свойству его естественное значение. По своему поведению unset чем-то похож на initial + inherit — если это свойство ненаследуемое от родителя — оно сбросится до начального значения, наследуемое — получит значение родителя.
revert
Это менее строгий режим сброса — он отменяет все установленные разработчиком значения для данного свойства до значения, которое считается браузером «значением по умолчанию».
all
Свойство принимает одно из четырёх значений (inherit, initial, unset, или revert). Это удобный способ для отмены изменений, внесённых в стили, для того, чтобы вы могли вернуться к стартовой точке перед внесением новых изменений.
Все наследуемые свойства для .widget и его потомков будут сброшены
.widget { all: revert; }
Значения свойства display
Свойство display
определяет тип отображения (display type) элемента, имеющий два основных свойства, определяющих генерацию боксов — внешний тип отображения определяет расположение бокса в схеме потока (flow layout) и внутренний тип отображения определяет расположение дочерних элементов бокса (бокс - это прямоугольная область, являющаяся изображением элемента).
Часто встречающиеся значения:
-
block
: Элемент отображается как блочный элемент и занимает всю доступную горизонтальную ширину. Новые элементы начинаются с новой строки. -
inline
: Элемент отображается как строчный элемент и не прерывает текущую строку текста. Он занимает только необходимое для своего содержимого пространство. -
inline-block
(legacy): Элемент отображается как строчный блок. Он занимает только необходимое пространство для своего содержимого, при этом его можно стилизовать, как блочный элемент. -
none
: Элемент не отображается на странице. Он полностью скрывается и не занимает места в макете страницы. -
flex
: Элемент отображается как флекс-контейнер, который позволяет управлять распределением элементов внутри него. Он позволяет использовать мощные функции построения адаптивных макетов. -
grid
: Элемент отображается как грид-контейнер. С помощью этого значения можно создавать сложные макеты с разделением на строки и столбцы.
Что такое Box Model?
Блочная модель, она же box model — это алгоритм расчёта размеров каждого отдельного элемента на странице, которым браузеры пользуются при отрисовке.
Box model включает в себя четыре основных компонента, которые определяют размер и расположение элемента:
- Размер содержимого определяется свойствами
width
(ширина) иheight
(высота). - Padding (внутренний отступ):
- Внутренний отступ является пространством между содержимым элемента и его границей. Он создает отступ вокруг содержимого.
- Величина внутреннего отступа определяется свойствами
padding-top
,padding-right
,padding-bottom
иpadding-left
.
- Border (граница):
- Граница представляет собой линию, окружающую содержимое и внутренний отступ элемента. Она разделяет элемент от соседних элементов.
- Свойство
border
используется для задания ширины, стиля и цвета границы.
- Margin (внешний отступ):
- Внешний отступ представляет собой пространство вокруг элемента, разделяющее его с другими элементами на странице.
- Размер внешнего отступа определяется свойствами
margin-top
,margin-right
,margin-bottom
иmargin-left
.
Свойство box-sizing
По умолчанию браузеры рассчитывают размеры элемента ровно так, как описано выше, прибавляя внутренние отступы и рамки к ширине и высоте. С этим могут быть связаны неприятные сюрпризы, когда элемент в вёрстке занимает больше места, чем вы ожидаете.
Мы можем поменять стандартное поведение и указать браузеру, что ширина и высота, заданные в CSS, должны включать в себя в том числе внутренние отступы и рамки. Делается это при помощи свойства box-sizing: border-box
. Значение по умолчанию content-box
Какие есть способы “прибить футер” к низу страницы?
- Flexbox
.page { display: flex; flex-direction: column; min-height: 100vh; } .footer { margin-top: auto; }
- Grid
.page { display: grid; grid-template-rows: auto 1fr auto; }
Какие относительные величины вы знаете?
Относительные величины в CSS позволяют задавать размеры и расстояния элементов относительно других элементов или контекста страницы. Использование относительных величин способствует созданию более гибкого и адаптивного дизайна, который может легко масштабироваться на разных устройствах.
Ниже перечислены некоторые распространенные относительные величины:
- em:
- Значение
em
определяет размеры элемента относительно размера шрифта его родителя. - Например, если размер шрифта родительского элемента равен 16 пикселям, и у дочернего элемента задан размер
2em
, то размер дочернего элемента будет равен 32 пикселям (2 * 16).
- Значение
- rem:
- Значение
rem
задает размеры элемента относительно размера шрифта корневого элемента (<html>
). - Например, если размер шрифта корневого элемента равен 16 пикселям, и у элемента задан размер
2rem
, то размер элемента будет равен 32 пикселям (2 * 16).
- Значение
- %:
- Значение
%
позволяет задавать размер элемента в процентах от размеров родительского элемента.
Ширина width - относительно ширины родительного элемента
Высота height - относительно высоты родительного элемента, но только если у него задана высота либо это флекс или грид элемент.
При относительном позиционировании (position: relative; + top left bottom right) нужны те же условия.
Для абсолютно позиционированных объектов - относительно высоты родительского элемента. При этом, задавать высоту родителю не обязательно.
Отступы padding \ margin - относительно ширины родительного элемента, даже если задаются вертикальные отступы.
transform: translate(x, y) - относительно ширины \ высоты самого объекта к которому применено свойство.
font-size и line-height - относительно размера свойства font-size
- Значение
- vw и vh:
- Значения
vw
иvh
определяют размер элемента в процентах от размеров видимой области окна браузера. - Значение
1vw
равно 1% ширины видимой области, а1vh
равно 1% высоты видимой области.
- Значения
- vmin и vmax:
- Значения
vmin
иvmax
позволяют задавать размеры элемента в процентах от наименьшей или наибольшей размерности видимой области окна браузера. -
vmin
берет во внимание наименьшую размерность (ширину или высоту), аvmax
- наибольшую.
- Значения
Разница между блочным и строчным элементом
Если элемент определён как блочный, то он будет вести себя следующим образом:
- Начнётся с новой строки.
- Будет расширяться вдоль строки таким образом, чтобы заполнить всё пространство, доступное в её контейнере. В большинстве случаев это означает, что блок станет такой же ширины, как и его контейнер, заполняя 100% доступного пространства.
- Будут применяться свойства width и height.
- Внешние и внутренние отступы, рамка будут отодвигать от него другие элементы.
Если элемент имеет тип отображения inline (строчный), то:
- Он не будет начинаться с новой строки.
- Свойства width и height не будут применяться.
- Вертикальные внешние и внутренние отступы, рамки будут применяться, но не будут отодвигать другие строчные элементы.
- Горизонтальные внешние и внутренние отступы, рамки будут применяться и будут отодвигать другие строчные элементы.
Разница между псевдоклассом и псевдоэлементом
подсказка!!! псевдо-классы определяют поведение, а псевдо-элементы - внешность,
- Псевдоклассы - это ключевые слова, добавляемые к селекторам, чтобы указать определенное состояние элемента или его позицию в документе. Например, :hover указывает на элемент, когда курсор наводится на него. Примеры псевдоклассов: :hover, :active, :focus и :nth-child.
- Псевдоэлементы - это части элементов, которые могут быть выбраны и стилизованы независимо от содержимого элемента. Они указываются с помощью двойного двоеточия (::). Примеры псевдоэлементов: ::before, ::after, ::first-letter и ::first-line.
Псевдоклассы:
1. :hover - Применяет стили, когда курсор находится над элементом.
2. :active - Применяет стили, когда элемент активен (нажатие кнопки мыши).
3. :focus - Применяет стили, когда элемент получает фокус (например, при нажатии на поле ввода).
4. :visited - Применяет стили к посещенным ссылкам.
5. :first-child - Применяет стили к первому дочернему элементу родителя.
6. :last-child - Применяет стили к последнему дочернему элементу родителя.
7. :nth-child(n) - Применяет стили к элементу, который является n-м дочерним элементом родителя (можно использовать различные формулы, например, :nth-child(2n) для выбора каждого второго элемента).
8. :nth-of-type(n) - Применяет стили к элементу, который является n-м элементом выбранного типа (например, :nth-of-type(3) выберет третий элемент типа).
9. :checked
10. :disabled, :enabled
11. :first-of-type — первый;
12. :nth-of-type(n-число) — каждый n-й элемент;
13. :last-of-type — последний;
14. :nth-last-of-type(n-число) — каждый n-й элемент с отсчётом «с конца».
Псевдоэлементы:
1. ::before - Вставляет псевдоэлемент перед содержимым выбранного элемента.
2. ::after - Вставляет псевдоэлемент после содержимого выбранного элемента.
3. ::first-letter - Применяет стили к первой букве содержимого элемента.
4. ::first-line - Применяет стили к первой строке содержимого элемента.
5. ::selection - Применяет стили к выделенному пользователем тексту.
Основные концепции и свойства Flexbox
- Flex-контейнер (Flex Container):
- Это родительский элемент,
display
со значениемflex
илиinline-flex
- Это родительский элемент,
- Flex-элементы (Flex Items):
- Это дочерние элементы,
- Основные свойства Flexbox:
-
flex-direction
: Определяет, будет ли контейнер располагать элементы в строку или в столбец. -
justify-content
: Определяет выравнивание элементов вдоль основной оси. -
align-items
: Определяет выравнивание элементов вдоль поперечной оси (cross axis). -
flex-wrap
: Определяет, должны ли элементы переноситься на новую строку или оставаться в одной строке при нехватке места. -
align-content
: Определяет выравнивание строк Flex-элементов вдоль поперечной оси, если они занимают несколько строк.
-
- Дополнительные свойства Flexbox:
-
flex-grow
: Определяет, насколько элемент может растягиваться внутри контейнера, если есть свободное пространство. -
flex-shrink
: Определяет, насколько элемент может сжиматься внутри контейнера, если места недостаточно. -
flex-basis
: Определяет исходный размер элемента до распределения свободного пространства или сжатия. -
order
: Определяет порядок отображения Flex-элементов внутри контейнера.
-
Основные концепции и свойства Grid
- Grid-контейнер (Grid Container):
- Это родительский элемент,
display
со значениемgrid
илиinline-grid
.
- Это родительский элемент,
- Grid-ячейки (Grid Items):
- Это дочерние элементы,
- Основные свойства Grid:
-
grid-template-rows
иgrid-template-columns
: Определяют размеры и количество ячеек в строках и столбцах сетки. -
grid-gap
илиgap
: Устанавливают промежутки между ячейками. -
justify-items
: Определяет горизонтальное выравнивание Grid-ячеек внутри их ячейки. -
align-items
: Определяет вертикальное выравнивание Grid-ячеек внутри их ячейки. -
justify-content
: Определяет горизонтальное выравнивание Grid-ячеек внутри Grid-контейнера. -
align-content
: Определяет вертикальное выравнивание Grid-ячеек внутри Grid-контейнера.
-
- Дополнительные свойства Grid:
-
grid-template-areas
: Определяет расположение и имена областей сетки, позволяя группировать ячейки внутри них. -
grid-auto-rows
иgrid-auto-columns
: Определяют размеры и количество ячеек, которые будут созданы автоматически, если их не хватает в явно определенной сетке. -
grid-auto-flow
: Определяет порядок автоматического размещения Grid-ячеек, когда они не помещаются в явно определенную сетку.
-
Позиционироварие элемента в CSS
Позиционирование в CSS позволяет контролировать расположение элементов на веб-странице. С помощью свойства position
и связанных с ним свойств можно задавать различные способы позиционирования элементов. Вот некоторые из них:
- Поток документа (static):
- Это значение по умолчанию для свойства
position
. Элементы позиционируются в соответствии с обычным потоком документа, их расположение определяется в порядке их появления в HTML-коде. - Для элементов с
position: static
игнорируются свойстваtop
,right
,bottom
иleft
.
- Это значение по умолчанию для свойства
- Относительное позиционирование (relative):
- Элементы с
position: relative
позиционируются относительно своего нормального местоположения. - Можно использовать свойства
top
,right
,bottom
иleft
, чтобы сдвигать элемент относительно его исходной позиции.
- Элементы с
- Абсолютное позиционирование (absolute):
- Элементы с
position: absolute
позиционируются относительно ближайшего родительского элемента с позиционированием, отличным отposition: static
. - Можно использовать свойства
top
,right
,bottom
иleft
, чтобы точно указать позицию элемента.
- Элементы с
- Фиксированное позиционирование (fixed):
- Элементы с
position: fixed
позиционируются относительно окна браузера и остаются на своем месте при прокрутке страницы. - Можно использовать свойства
top
,right
,bottom
иleft
, чтобы задать фиксированную позицию элемента.
- Элементы с
- Закрепленное позиционирование (sticky):
- Элементы с
position: sticky
позиционируются относительно своего ближайшего контейнера прокрутки или родительского элемента с прокруткой. - Элемент будет прилипать к определенной позиции, когда пользователь прокручивает страницу.
- Элементы с