Стили⚓︎
Livewire позволяет включать стили, специфичные для компонента, прямо в ваши однофайловые и многофайловые компоненты. Эти стили автоматически ограничиваются областью видимости вашего компонента, предотвращая их влияние на другие части приложения.
Этот подход аналогичен тому, как работают теги <script> в компонентах Livewire, предоставляя единый способ держать PHP, HTML, JavaScript и CSS компонента в одном месте.
Локальные стили⚓︎
По умолчанию стили, определённые в вашем компоненте, ограничиваются только этим компонентом. Это означает, что ваши CSS-селекторы будут воздействовать только на элементы внутри вашего компонента, даже если такие же селекторы существуют в других местах страницы.
Однофайловые компоненты⚓︎
Добавьте тег <style> на корневом уровне вашего однофайлового компонента:
<?php
use Livewire\Component;
new class extends Component {
public $count = 0;
public function increment()
{
$this->count++;
}
};
?>
<div>
<h1 class="title">Счётчик: {{ $count }}</h1>
<button class="btn" wire:click="increment">+</button>
</div>
<style>
.title {
color: blue;
font-size: 2rem;
}
.btn {
background: indigo;
color: white;
padding: 0.5rem 1rem;
border-radius: 0.25rem;
}
</style>
Стили .title и .btn будут применяться только к элементам внутри этого компонента, а не к любым другим элементам на странице с такими же классами.
Многофайловые компоненты⚓︎
Для многофайловых компонентов создайте CSS-файл с тем же именем, что и у вашего компонента:
resources/views/components/counter/
├── counter.php
├── counter.blade.php
└── counter.css # Локальные стили
.title {
color: blue;
font-size: 2rem;
}
.btn {
background: indigo;
color: white;
padding: 0.5rem 1rem;
border-radius: 0.25rem;
}
Как работает ограничение области видимости⚓︎
Livewire автоматически оборачивает ваши стили в селектор, который нацелен на корневой элемент вашего компонента. За кулисами ваш CSS преобразуется с использованием вложенности CSS:
/* Что вы пишете */
.btn { background: blue; }
/* Что отправляется браузеру */
[wire\:name="counter"] {
.btn { background: blue; }
}
Это использует атрибут wire:name, который Livewire добавляет к корневому элементу каждого компонента, гарантируя, что стили применяются только внутри этого компонента.
Прицеливание на корневой элемент компонента⚓︎
Вы можете использовать селектор &, чтобы нацелиться непосредственно на сам корневой элемент компонента:
Это добавит рамку и отступы к самому внешнему элементу компонента.
Глобальные стили⚓︎
Иногда вам нужны стили, которые применяются глобально, а не ограничиваются одним компонентом. Добавьте атрибут global к вашему тегу style:
Однофайловые компоненты⚓︎
<style global>
body {
font-family: system-ui, sans-serif;
}
.prose {
max-width: 65ch;
line-height: 1.6;
}
</style>
Многофайловые компоненты⚓︎
Создайте файл с расширением .global.css:
resources/views/components/counter/
├── counter.php
├── counter.blade.php
├── counter.css # Локальные стили
└── counter.global.css # Глобальные стили
Комбинирование локальных и глобальных стилей⚓︎
Вы можете использовать одновременно локальные и глобальные стили в одном компоненте:
<?php
use Livewire\Component;
new class extends Component {
// ...
};
?>
<div class="counter">
<h1 class="title">Мой счётчик</h1>
</div>
<style>
.title {
color: blue;
}
</style>
<style global>
.counter-page-layout {
display: grid;
place-items: center;
}
</style>
Дедупликация стилей⚓︎
Livewire автоматически удаляет дубликаты стилей, когда на странице появляется несколько экземпляров одного и того же компонента. Стили загружаются только один раз, независимо от того, сколько экземпляров компонента существует.
Когда использовать стили компонента⚓︎
Используйте локальные стили, когда:
- Стили относятся только к одному компоненту
- Вы хотите избежать конфликтов имён CSS-классов
- Вы создаёте переиспользуемые, самодостаточные компоненты
Используйте глобальные стили, когда:
- Вам нужно стилизовать элементы за пределами вашего компонента
- Вы определяете вспомогательные классы, используемые в нескольких компонентах
- Вы переопределяете стили сторонних библиотек
Используйте @assets для внешних таблиц стилей:
- При загрузке CSS из CDN
- При подключении стилей сторонних библиотек
Поддержка браузеров⚓︎
Локальные стили используют вложенность CSS, которая поддерживается во всех современных браузерах (Chrome 120+, Firefox 117+, Safari 17.2+). Для поддержки старых браузеров рассмотрите использование CSS-препроцессора или директивы @assets с предварительно скомпилированными таблицами стилей.
Смотрите также⚓︎
- JavaScript — Использование JavaScript в компонентах
- Компоненты — Форматы и организация компонентов
- Alpine — Интерактивность на стороне клиента с Alpine.js