
Основные концепции
Использование адаптивных вариантов утилит для создания адаптивных пользовательских интерфейсов.
Каждый служебный класс в Tailwind можно условно применять в разных контрольных точках, что упрощает создание сложных адаптивных интерфейсов, не покидая своего HTML.
Сначала убедитесь, что вы добавили метатег области просмотра в <head> вашего документа:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Затем, чтобы добавить утилиту, но чтобы она вступила в силу только в определенной контрольной точке, все, что вам нужно сделать, это поставить перед утилитой имя контрольной точки, за которым следует символ ::
<!-- Ширина по умолчанию 16, 32 на средних экранах и 48 на больших экранах -->
<img class="w-16 md:w-32 lg:w-48" src="...">
По умолчанию существует пять контрольных точек, основанных на распространенных разрешениях устройств:
| Префикс контрольной точки | Минимальная ширина | CSS |
|---|---|---|
sm | 640px | @media (min-width: 640px) { ... } |
md | 768px | @media (min-width: 768px) { ... } |
lg | 1024px | @media (min-width: 1024px) { ... } |
xl | 1280px | @media (min-width: 1280px) { ... } |
2xl | 1536px | @media (min-width: 1536px) { ... } |
Это работает для каждого служебного класса в фреймворке, а это означает, что вы можете изменить буквально что угодно в данной контрольной точке — даже такие вещи, как расстояние между буквами или стили курсора.
Вот простой пример компонента маркетинговой страницы, который использует многоуровневую компоновку на маленьких экранах и параллельную компоновку на больших экранах:
<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-2xl">
<div class="md:flex">
<div class="md:shrink-0">
<img class="h-48 w-full object-cover md:h-full md:w-48" src="/img/building.jpg" alt="Modern building architecture">
</div>
<div class="p-8">
<div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">Отступления компании</div>
<a href="#" class="block mt-1 text-lg leading-tight font-medium text-black hover:underline">Невероятные условия для вашей команды</a>
<p class="mt-2 text-slate-500">Хотите взять свою команду на уединение, чтобы насладиться вкусной едой и понежиться на солнышке? У нас есть список мест, где это можно сделать.</p>
</div>
</div>
</div>
Вот как работает приведенный выше пример:
div - это display: block, но при добавлении утилиты md:flex он становится display: flex на средних и больших экранах.md:shrink-0, чтобы предотвратить сжатие на средних и больших экранах. Технически мы могли бы просто использовать shrink-0, так как он ничего не сделает на экранах меньшего размера, но поскольку это имеет значение только на экранах md, неплохо было бы четко указать это в имени класса.md:h-full md:w-48.В этом примере мы использовали только одну контрольную точку, но вы можете легко настроить этот компонент для других размеров, используя префиксы реагирования sm, lg, xl или 2xl.
По умолчанию Tailwind использует систему контрольных точек для мобильных устройств, аналогичную той, к которой вы могли привыкнуть в других фреймворках, таких как Bootstrap.
Это означает, что служебные программы без префиксов (например, uppercase) действуют на всех размерах экрана, в то время как служебные программы с префиксом (например, md:uppercase) действуют только в указанной контрольной точке и выше.
Чаще всего этот подход удивляет людей тем, что для стилизации чего-либо для мобильных устройств вам нужно использовать версию утилиты без префикса, а не версию с префиксом sm:. Не думайте, что sm: означает «на маленьких экранах», думайте об этом как «в маленькой контрольной точке».
Не используйте sm: для таргетинга мобильных устройств
<!-- Это будет центрировать текст только на экранах 640 пикселей и шире, но не на маленьких экранах -->
<div class="sm:text-center"></div>
Используйте утилиты без префиксов для таргетинга мобильных устройств и переопределяйте их при больших контрольных точках
<!-- Это позволит центрировать текст на мобильном устройстве и выровнять его по левому краю на экранах 640 пикселей и шире -->
<div class="text-center sm:text-left"></div>
По этой причине часто бывает хорошей идеей сначала реализовать мобильный макет для дизайна, а затем наслоить любые изменения, которые имеют смысл для экранов sm, затем экранов md и т.д.
По умолчанию стили, применяемые с помощью таких правил, как md:flex, будут применяться в этой контрольной точке и останутся примененными в более крупных контрольных точках.
Если вы хотите применить утилиту только, когда активен определенный диапазон контрольных точек, сложите модификатор отзывчивости, такой как md , с модификатором max-*, чтобы ограничить этот стиль определенным диапазоном:
<div class="md:max-xl:flex">
<!-- ... -->
</div>
Tailwind генерирует соответствующий модификатор max-* для каждой контрольной точки, поэтому из коробки доступны следующие модификаторы:
| Модификатор | Медиа-запрос |
|---|---|
max-sm | @media not all and (min-width: 640px) { ... } |
max-md | @media not all and (min-width: 768px) { ... } |
max-lg | @media not all and (min-width: 1024px) { ... } |
max-xl | @media not all and (min-width: 1280px) { ... } |
max-2xl | @media not all and (min-width: 1536px) { ... } |
Чтобы настроить таргетинг на одну контрольную точку, выберите диапазон для этой контрольной точки, объединив адаптивный модификатор, такой как md, с модификатором max-* для следующей контрольной точки:
<div class="md:max-lg:flex">
<!-- ... -->
</div>
Прочтите о нацеливании на диапазоны контрольных точек, чтобы узнать больше.
Вы можете полностью настроить контрольные точки в файле tailwind.config.js:
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
screens: {
'tablet': '640px',
// => @media (min-width: 640px) { ... }
'laptop': '1024px',
// => @media (min-width: 1024px) { ... }
'desktop': '1280px',
// => @media (min-width: 1280px) { ... }
},
}
}Узнайте больше в документации по настройке контрольных точек.
Если вам нужно использовать одноразовую контрольную точку, которую не имеет смысла включать в вашу тему, используйте модификаторы min или max, чтобы сгенерировать пользовательскую контрольную точку на лету, используя любое произвольное значение.
<div class="min-[320px]:text-center max-[600px]:bg-sky-300">
<!-- ... -->
</div>
Узнайте больше о поддержке произвольных значений в документации по произвольным значениям.