Изменение наведения в Tailwindcss

Я заметил, что :hover в Tailwindcss использует селектор наведения по умолчанию, который вызывает «зависание» состояний наведения на мобильных устройствах. Есть ли способ изменить функцию :hover, чтобы вместо этого выполнялось @media(hover:hover)?

Сенсорные устройства не имеют состояния наведения. Я предполагаю, что вместо этого вы смотрите на состояния :focus или :active. Tailwind также позволяет применять классы к этим псевдоселекторам, например. focus:bg-blue-500.

Seth Warburton 11.09.2019 11:52

@SethWarburton, в этом проблема, мобильные устройства не имеют состояния наведения, поэтому такой класс, как :hover, приведет к зависанию эффекта, когда пользователь нажимает кнопку и т. д. Я пытаюсь найти способ для Tailwind для реализации наведения с использованием @media(hover:hover) вместо обычного :hover, который вызывает указанную ошибку.

Kelvin Zhao 12.09.2019 13:30

Я думаю, вы меня неправильно поняли. Я считаю, что эффект «зависания», который вы видите, связан с тем, что вы не установили подходящее состояние (например: фокус) для сенсорных устройств. Попробуйте применить нужные стили, используя правильный селектор.

Seth Warburton 12.09.2019 15:58
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
14
3
6 291
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Адаптивные атрибуты, такие как sm: md: lg:, сделают эту работу за вас. См. пример в файле документы. Если вы не хотите использовать состояние наведения на мобильном устройстве. укажите, например: - sm:hover:no-underline

Проблема с этим подходом заключается в том, что для больших планшетов в горизонтальном представлении это те же точки останова, что и для рабочего стола, поэтому, если мне нужно наведение для рабочего стола, планшеты будут зависать в состояниях наведения, если я использую md или lg для их нацеливания. На данный момент @media( hover: hover ) кажется лучшим способом ориентироваться на устройства без мыши.

Kelvin Zhao 29.06.2019 17:11

Ссылаясь на CSS-трюки css-tricks.com/touch-devices-not-juged-size, я думаю, что @media(hover: hover) — это решение.

KPK 01.07.2019 09:41

Да, @KPK, вот почему мне интересно, есть ли у Tailwind @media(hover:hover) вместо обычного :hover для атрибута hover.

Kelvin Zhao 12.09.2019 13:31

Я думаю, мы можем создать RFC для этой функции в GitHub.

KPK 13.09.2019 17:43
Ответ принят как подходящий

Безусловно, самый простой способ — добавить собственное правило @media в класс правил @отзывчивый в попутном ветре. Как это сделать, описано в официальной документации попутного ветра в теме пользовательские медиа-запросы.

Просто добавьте это в свой конфиг:

// tailwind.config.js
module.exports = {
    theme: {
        extend: {
          screens: {
            'hover-hover': {'raw': '(hover: hover)'},
      }
    }
  }
}

Это переводится как @media (hover: hover) { ... } в css. И вуаля, вы можете использовать hover-hover:text-red для отображения красного текста только для устройств, которые имеют возможность наведения.

Чтобы сделать свой собственный, оставьте «сырой» как есть и измените два других атрибута на любой медиа-запрос, который вы хотите. Первый атрибут hover-hover — это то, что вы используете при попутном ветре. Второй (hover: hover) — это то, как выглядит ваш фактический запрос css @media. Например: hover: none или pointer: coarse.

Теперь продолжайте и используйте hover-hover:hover:text-red для изменения состояния наведения.

Я обнаружил, что raw: '(hover: hover)' недостаточно, и в итоге использовал raw: '(hover: hover) and (pointer: fine)'

Félix Paradis 02.12.2021 00:07

Вы можете легко создай свой собственный ховер, как показано ниже:

// styles.css

@variants hover {
  .banana {
    color: yellow;
  }
}

Тогда используйте его как class='hover:banana'

это как бы делает вашу конфигурацию стиля распределенной по разным файлам, а это не то, что вы обычно хотите

RomanistHere 20.02.2022 16:17

Да, просто сгенерируйте вариант наведения с помощью плагина, который, помимо добавления псевдо-селектора :hover, также заключает все правила в правило @media(hover:hover):

// tailwind.config.js

const plugin = require('tailwindcss/plugin');

const hoverPlugin = plugin(function({ addVariant, e, postcss }) {
    addVariant('hover', ({ container, separator }) => {
        const hoverRule = postcss.atRule({ name: 'media', params: '(hover: hover)' });
        hoverRule.append(container.nodes);
        container.append(hoverRule);
        hoverRule.walkRules(rule => {
            rule.selector = `.${e(`hover${separator}${rule.selector.slice(1)}`)}:hover`
        });
    });
});

module.exports = {
  plugins: [ hoverPlugin ],
}
(pointer: fine) тоже должен быть там
RomanistHere 20.02.2022 16:15
const hoverRule = postcss.atRule({ name: 'media', params: '(hover: hover) and (pointer: fine)' }); - это работает
RomanistHere 20.02.2022 16:18

Спасибо за это! Единственная проблема, которую я обнаружил, - это когда селектор содержит символ точки или произвольные значения. Например: hover:translate-x-0.5 . часть неправильно закодирована. Вы знаете, как решить эту проблему? :)

Michael Gallego 20.03.2022 11:33

Точка @MichaelGallego не допускается в именах идентификаторов CSS. Экранирование 0,5 как 0\2E5 должно работать, но я не пробовал и лично просто выбрал бы схему именования, которая больше соответствует действительным идентификаторам CSS...

vbraun 21.03.2022 18:30

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