В предыдущей версии существовала директива <code>@screen</code>, которая позволяла легко задавать стили, например, так: <br/> <br/> <pre><code>@screen(xl) { стили }</code></pre> <br/> <br/> В актуальной версии данной директивы больше нет. <br/> <br/> У меня возникла проблема: <br/> <br/> Предположим, есть блок, в котором нужно изменить размеры нескольких элементов. При традиционном подходе я бы создал переменные и изменял их в медиазапросах, как показано ниже: <br/> <br/> <pre><code>.block { --width1: 1em; --width2: 2em; .block-inner1 { width: var(--width1); } .block-inner2 { width: var(--width2); } @screen(xl) { --width1: 3em; --width2: 5em; } }</code></pre> <br/> <br/> Однако в текущей версии я могу использовать только такой подход: <br/> <pre><code>.block { --width1-sm: 1em; --width2-sm: 2em; --width1-xl: 3em; --width2-xl: 5em; .block-inner1 { @apply w-[--width1-sm] xl:w-[--width1-xl] ; } .block-inner2 { @apply w-[--width2-sm] xl:w-[--width2-xl] ; } }</code></pre> <br/> Либо использовать глобальные переменные с директивой <code>@theme</code> для создания утилитарных классов через <code>@utility</code>, что также приводит к обширному коду. <br/> <br/> Безусловно, существует возможность писать обычные медиазапросы с указанием конкретных значений: <br/> <br/> <code>@media (width > 768px) { --width1: 3em; }</code> <br/> <br/> Однако в этом случае возникает неудобство с использованием значений для точек переключения вместо более удобных мнемоник (sm, xl и т. д.). <br/> <br/> <b>Могу ли я узнать возможные способы использования медиазапросов в своем CSS-коде, или, возможно, есть вариант изменения значений непосредственно для CSS-переменных?</b> <br/> Например, тип такого подхода: <br/> <br/> <pre><code>.block { --width: 1em; @apply xl:--width-[4em]; }</code></pre>
В Tailwind CSS версии 4 действительно произошли изменения, касающиеся работы с медиазапросами и пользовательскими CSS-переменными. К сожалению, директива `@screen`, как вы заметили, больше не поддерживается для использования в пользовательских стилях напрямую. Однако есть несколько способов решить вашу задачу, хотя они могут потребовать немного другого подхода. 1. **Использование медиазапросов с классами Tailwind**: Вместо применения переменных в медиазапросах, вы можете использовать утилитарные классы Tailwind для установки ширины. Например: ```css .block-inner1 { @apply w-[1em] lg:w-[3em]; } .block-inner2 { @apply w-[2em] lg:w-[5em]; } ``` Это позволяет вам управлять изменениями размеры в зависимости от точек прерывания без использования переменных. 2. **Создание пользовательских классов с помощью `@apply`**: Если вам нужно изменить несколько свойств для различных точек прерывания, вы можете создать свои классы с помощью `@apply` и Mediquery: ```css @media (min-width: 768px) { .block-inner1 { width: 3em; } .block-inner2 { width: 5em; } } .block-inner1 { width: 1em; } .block-inner2 { width: 2em; } ``` Это простое решение, которое будет работать для обычных случаев. 3. **Именованные CSS-переменные**: Вы можете создать CSS-переменные для ширины и использовать медиазапросы традиционным способом: ```css .block { --width1: 1em; --width2: 2em; .block-inner1 { width: var(--width1); } .block-inner2 { width: var(--width2); } } @media (min-width: 1024px) { .block { --width1: 3em; --width2: 5em; } } ``` Это позволяет вам легко изменять значения переменных по мере необходимости. 4. **Глобальные CSS-переменные в `@theme`**: Если вы хотите использовать импортируемые значения, вы можете создать глобальные CSS-переменные через `@theme`, как вы упомянули. Это подходит для создания утилитарных классов. На данный момент использование переменных непосредственно в `@apply` с Tailwind не поддерживается, так как они привязаны к процессу компиляции стилей Tailwind. Но вышеуказанные методы позволяют гибко управлять стилями и адаптировать их под различные размеры экранов.
кажется, можно сделать примерно так:
https://play.tailwindcss.com/RTZm0EbTI9