Тематический интервал, рассчитываемый на основе других тематических интервалов в CSS Tailwind

Макет моей страницы (фиксированная навигационная панель с относительным нижним колонтитулом и растущим разделом контента между ними) требует от меня выполнения некоторых расчетов высоты на основе высот других элементов.

Чтобы было немного понятнее, что происходит в моем проекте, я хочу использовать для этих элементов тематические интервалы.

то есть у меня есть сама панель навигации, волнистый SVG, действующий как граница нижней части панели навигации, и нижний колонтитул.

spacing: {
    nav: '6rem',
    wave: '4rem',
    footer: '6rem'
}

было бы неплохо, если бы я мог сделать что-то вроде min-h-[calc(100dvh-nav-wave-footer], чтобы установить высоту оболочки содержимого, или установить mt-[calc(nav+wave)].

Сейчас я вижу два способа добиться этого, но оба они кажутся сомнительными. Я мог бы добавить navwave в раздел тематических интервалов, равный «магическому» числу 10rem. Очевидно, это раздражает, когда вы пытаетесь обновить высоту одного из этих элементов и забыли изменить элемент navwave.

или я мог бы сделать это так: mt-[calc(theme('spacing.nav')+theme('spacing.wave'))] что довольно сложно, отрастить линию. Это значительно длиннее, чем любые другие директивы, которые я обычно использую, и поэтому работа с ними сильно отвлекает.

Итак, вместо того, чтобы проводить такие расчеты непосредственно в моем HTML, я хотел добавить в конфигурацию моей темы собственный интервал navwave, который выполняет эти вычисления автоматически.

spacing: {
   nav: '6rem',
   wave: '4rem',
   navwave: "calc(theme('spacing.nav')+theme('spacing.wave'))"
}

...Именно тогда я наткнулся на проблему, ради которой пишу этот пост. По какой-то причине, если я сделаю это таким образом, преобразуется только одна из директив темы, и это заставляет браузер сказать, что это недопустимое свойство. Обратитесь к этим скриншотам для получения дополнительной информации:

Я сделал что-то не так? Или то, что я делаю, не поддерживается Tailwind (пока)?

Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS
Справочный центр - это веб-сайт, где клиенты могут найти ответы на свои вопросы и решения своих проблем. Созданный для решения многих распространенных...
REACT и NEXT JS вместе с Tailwind CSS
REACT и NEXT JS вместе с Tailwind CSS
Наличие собственного или персонального сайта необходимо в современном мире, а сочетание React и Next JS позволяет разработчику сделать это за меньшее...
Современные подходы к организации и работе с CSS в проекте
Современные подходы к организации и работе с CSS в проекте
Любой, кто писал CSS в течение некоторого времени, знает о сложностях, которые с этим связаны, и о том, насколько это может быть болезненно.
Как использовать псевдокласс :hover в Tailwind только тогда, когда это действительно необходимо (при наличии курсора)
Как использовать псевдокласс :hover в Tailwind только тогда, когда это действительно необходимо (при наличии курсора)
Я люблю Tailwind. Раньше я относился к нему с подозрением, но как только я попробовал его использовать, я был поражен тем, сколько времени он мне...
0
0
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать интервалы в качестве переменной в конфигурации:

const mySpacings = {
   nav: '6rem',
   wave: '4rem',
};

// …

spacing: 
   ...mySpacings,
   navwave: `calc(${mySpacings.nav} + ${mySpacings.wave})`,
}

const mySpacings = {
  nav: '6rem',
  wave: '4rem',
};

tailwind.config = {
  theme: {
    extend: {
      spacing: {
         ...mySpacings,
         navwave: `calc(${mySpacings.nav} + ${mySpacings.wave})`,
      }
    },
  },
};
<script src = "https://cdn.tailwindcss.com/3.4.3"></script>

<div class = "mt-navwave h-10 bg-red-500"></div>

Это остановит магические числа, поскольку теперь мы используем именованные ссылки.


Кроме того, ваше решение тоже почти работает, вам нужно будет добавить пробелы вокруг операнда + для Tailwind (и браузера), чтобы правильно его интерпретировать:

navwave: "calc(theme('spacing.nav') + theme('spacing.wave'))"

tailwind.config = {
  theme: {
    extend: {
      spacing: {
         nav: '6rem',
         wave: '4rem',
         navwave: "calc(theme('spacing.nav') + theme('spacing.wave'))"
      }
    },
  },
};
<script src = "https://cdn.tailwindcss.com/3.4.3"></script>

<div class = "mt-navwave h-10 bg-red-500"></div>

Это дико, я никогда этого не понимал! Подробнее об этом я прочитал здесь

KamielDev 18.04.2024 23:03

Другие вопросы по теме