Css hover after: css — How can I write a ‘:hover’ condition for ‘a:before’ and ‘a:after’?
01.05.2023 Разное
Псевдокласс :hover | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS | |
6.0+ | 8.0+ | 1.0+ | 4.0+ | 1.0+ | 1.0+ |
Краткая информация
Применяется | Не определено |
---|---|
Ссылка на спецификацию | http://www.w3.org/TR/CSS21/selector.html#dynamic-pseudo-classes |
Версии CSS
CSS 1 | CSS 2 | CSS 2.1 | CSS 3 |
---|---|---|---|
Описание
Определяет стиль элемента при наведении на него курсора мыши, но при этом элемент еще не активирован, иными словами кнопка мыши не нажата.
Синтаксис
элемент:hover { … }
Значения
Нет.
Пример 1
HTML5CSS2.1IECrOpSaFx
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>hover</title> <style> a:link { color: #0000d0; /* Цвет ссылок */ padding: 2px; /* Поля вокруг текста */ } a:hover { background: #786b59; /* Цвет фона под ссылкой */ color: #ffe; /* Цвет ссылки */ } </style> </head> <body> <p><a href="1. html">Ссылка 1</a></p> <p><a href="2.html">Ссылка 2</a></p> <p><a href="3.html">Ссылка 3</a></p> </body> </html>
В данном примере псевдокласс :hover применяется к ссылке (тегу <a>), при этом меняется цвет ссылки и фона под ней. Результат примера показан на рис. 1.
Рис. 1. Результат использования псевдокласса :hover для ссылок
Пример 2
HTML5CSS2.1IECrOpSaFx
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>hover</title> <style> ul { width: 180px; /* Ширина меню */ list-style: none; /* Для списка убираем маркеры */ margin: 0; /* Нет отступов вокруг */ padding: 0; /* Убираем поля вокруг текста */ font-family: Arial, sans-serif; /* Рубленый шрифт для текста меню */ font-size: 10pt; /* Размер названий в пункте меню */ } li ul { position: absolute; /* Подменю позиционируются абсолютно */ display: none; /* Скрываем подменю */ margin-left: 165px; /* Сдвигаем подменю вправо */ margin-top: -2em; /* Сдвигаем подменю вверх */ } li a { display: block; /* Ссылка как блочный элемент */ padding: 5px; /* Поля вокруг надписи */ text-decoration: none; /* Подчеркивание у ссылок убираем */ color: #666; /* Цвет текста */ border: 1px solid #ccc;/* Рамка вокруг пунктов меню */ background-color: #f0f0f0; /* Цвет фона */ border-bottom: none; /* Границу снизу не проводим */ } li a:hover { color: #ffe; /* Цвет текста активного пункта */ background-color: #5488af; /* Цвет фона активного пункта */ } li:hover ul { display: block; /* При выделении пункта курсором мыши отображается подменю */ } . brd { border-bottom: 1px solid #ccc; /* Линия снизу */ } </style> </head> <body> <ul> <li><a href="russian.html">Русская кухня</a> <ul> <li><a href="linkr1.html">Бефстроганов</a></li> <li><a href="linkr2.html">Гусь с яблоками</a></li> <li><a href="linkr3.html">Крупеник новгородский</a></li> <li><a href="linkr4.html">Раки по-русски</a></li> </ul> </li> <li><a href="ukrainian.html">Украинская кухня</a> <ul> <li><a href="linku1.html">Вареники</a></li> <li><a href="linku2.html">Жаркое по-харьковски</a></li> <li><a href="linku3.html">Капустняк черниговский</a></li> <li><a href="linku4.html">Потапцы с помидорами</a></li> </ul> </li> <li><a href="caucasus. html">Кавказская кухня</a> <ul> <li><a href="linkc1.html">Суп-харчо</a></li> <li><a href="linkc2.html">Лилибдж</a></li> <li><a href="linkc3.html">Чихиртма</a></li> <li><a href="linkc4.html">Шашлык</a></li> </ul> </li> <li><a href="asia.html">Кухня Средней Азии</a></li> </ul> </body> </html>
В данном примере псевдокласс :hover добавляется к элементу списка (тег <li>) для создания двухуровневого меню. Результат примера показан на рис. 2.
Рис. 2. Использование :hover для создания меню
Браузеры
В браузере Internet Explorer до версии 6.0 включительно псевдокласс :hover работает только для ссылок.
Псевдоклассы
CSS по теме
- Псевдокласс :hover
Статьи по теме
- Атрибут data-*
- Всплывающая подсказка на CSS
- Наложение и порядок слоёв
- Полоски при наведении
- Псевдоклассы
- Рамки и границы
- Свойства ссылок
- Цвет ссылок
Рецепты CSS
- Как изменить вид ссылки при наведении на нее курсора мыши?
- Как сделать, чтобы цвет рамки вокруг изображения-ссылки менялся при наведении на него курсора мыши?
- Как сделать, чтобы картинка менялась при наведении на нее курсора мыши?
- Как сделать, чтобы строка таблицы меняла цвет при наведении на нее курсора мыши?
CSS-селектор :not.
Полезные примерыВ спецификации и блогах про селектор :not
обычно приводят какие-то искусственные примеры, которые хоть и объясняют синтаксис и принцип действия, но не несут никакой идеи о том, как получить пользу от нового селектора.
Например:
p:not(.classy) { color: red; }
Ну окей, думаю я, в моей практике не встречались такие ситуации. Обходились мы ведь как-то раньше без :not
. Приходилось немного переписать структуру селекторов или обнулить пару значений.
Пример 1. Элемент без класса
Селектор :not
может быть крайне полезен, когда нам нужно застилить контент сгенерированный пользователем (нет возможности расставить в нем классы), или когда у нас контента очень много и расставлять в нем классы слишком трудоёмко.
Например, мы хотим на сайте сделать красивые буллиты для ненумерованных списков ul li
. Мы пишем код:
ul li { /* наши красивые стили */ }
В результате, наши красивые буллиты появляются не только в контенте, но и, например, в навигации, где тоже используются ul li
.
Мы ограничиваем область действия селектора:
.content ul li { /* красота */ }
Навигацию мы спасли, но ненужные буллиты всё еще вылазят на слайдерах, списках новостей и других конструкциях внутри .content
, где тоже используются ul li
.
Далее у нас варианты:
1) обнулить мешающие стили в слайдерах и других местах. Но это противоречит «DRY» и является одним из признаков «вонючего» кода. К тому же не решает проблему раз и навсегда: добавите, например, аккордеон и списки в нем снова придется обнулять.
2) пойти от обратного и ставить класс всем спискам, которые нужно стилизовать:
.textlist li { /* красота */ }
Это добавляет лишней работы по расстановке классов в контенте. Иногда имеет смысл, но лишнюю работу никто не любит.
3) стилизовать только те ul li
, у которых нет никаких классов вообще:
ul:not([class]) li { /* красота */ }
Победа! Нам не нужно делать дополнительную работу по расстановке классов в контенте. А на слайдерах, аккордеонах и прочих конструкциях, которые не должны выглядеть как списки, но используют их в своей разметке, в 99% случаев уже будут свои классы, и наши стили их не затронут.
Этот прием — «выбирать только элементы без класса» — очень полезен для оформления пользовательского контента и его можно применять не только к спискам, но и для других случаев.
Пример 2. Изменение внешнего вида всех элементов, кроме наведенного
Пример
Такой эффект можно реализовать без :not
путем перезаписи значений. И это будет работать в бо́льшем количестве браузеров.
/* с перезаписью свойств */ ul:hover li { opacity:0.5; } ul:hover li:hover { opacity:1; }
Но если придется обнулять слишком много свойств, то есть смысл использовать :not
.
/* используя :not() */ ul:hover li:not(:hover) { opacity:0.5; }
Пример 3. Меню с разделителями между элементами
Пример
Как и в предыдущем примере, желаемого можно добиться несколькими способами.
Через перезапись свойств. Но тут два правила вместо одного, что не есть «DRY».
.menu-item:after { content: ' | '; } .menu-item:last-child:after { content: none; }
Через :nth-last-child()
. Одно правило, но тяжело читается.
.menu-item:nth-last-child(n+2):after { content: ' | '; }
Через :not()
— самая короткая и понятная запись.
.menu-item:not(:last-child):after { content: ' | '; }
Пример 4. Debug css
Удобно для отладки и самоконтроля искать/подсвечивать картинки без alt, label без for и другие ошибки.
/* подсвечиваем теги без необходимых атрибутов */ img:not([alt]), label:not([for]), input[type=submit]:not([value]) { outline:2px solid red; } /* тревога, если первый child внутри списка не li и прочие похожие примеры */ ul > *:not(li), ol > *:not(li), dl > *:not(dt):not(dd) { outline:2px solid red; }
Пример 5.
Поля формРаньше текстовых полей форм было не много. Достаточно было написать:
select, textarea, [type="text"], [type="password"] { /* стили для текстовых полей ввода */ }
С появлением новых типов полей в HTML5 этот список увеличился:
select, textarea, [type="text"], [type="password"], [type="color"], [type="date"], [type="datetime"], [type="datetime-local"], [type="email"], [type="number"], [type="search"], [type="tel"], [type="time"], [type="url"], [type="month"], [type="week"] { /* стили для текстовых полей ввода */ }
Вместо перечисления 14 типов инпутов можно исключить 8 из них:
select, textarea, [type]:not([type="checkbox"]):not([type="radio"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="range"]):not([type="file"]):not([type="image"]) { /* стили для текстовых полей ввода */ }
Ладно, этот пример не очень красив, и я рекомендую всё же первый вариант с перечислением, он работает с IE8+, а второй вариант с IE9+.
Поддержка
Следует заметить, что согласно спецификации в скобках селектора :not()
может стоять только простой селектор и в скобках нельзя использовать сам селектор :not()
. Если нужно исключить несколько элементов, :not()
можно повторить несолько раз, как в примере 5.
Поддержка браузерами
Если очень нужны CSS3-селекторы в браузерах, которые их не поддерживают, можно использовать полифил selectivizr.
html — Что такое :hover::after?
спросил
Изменено 1 год, 1 месяц назад
Просмотрено 1к раз
Я следил за учебным пособием на YouTube, в котором использовался эффект наведения CSS, поэтому, когда вы наводите курсор на элементы панели навигации, линия постепенно появлялась из центра. Как работает :hover::after?
Это код CSS, который они показали в видео:
nav{ дисплей: гибкий; набивка: 2% 6%; выравнивание содержимого: пробел между; выравнивание элементов: по центру; положение: липкое; } навигационное изображение { ширина: 150 пикселей; } .nav-ссылки{ гибкий: 1; выравнивание текста: вправо; зазор: 2рем; } .nav-ссылки ул ли { стиль списка: нет; отображение: встроенный блок; отступ: 8px 12px; положение: родственник; } .nav-ссылки на ли { цвет: #ffffff; размер шрифта: 13px; текстовое оформление: нет; } .nav-links ul li a::after{ содержание: ''; ширина: 0%; высота: 2 пикселя; фон: #f44336; дисплей: блок; маржа: авто; переход: 0,5 с; } .nav-links ul li a:hover::after{ ширина: 100%; }```
- html
- css
- css-переходы
2
::after и :hover являются псевдоэлементами. Если у вас есть: hover, следующие стили будут применяться к элементу при наведении на него курсора. Но когда у вас есть: hover:: after, следующие стили будут применяться к псевдоэлементу :: after при наведении курсора на элемент. В этом случае псевдоэлемент ::after представляет расширяющуюся строку. И кстати, чтобы было понятно, что такое ::after, в CSS с помощью content , вы также можете определить HTML-контент, который будет отображаться в псевдоэлементе ::after, но в этом случае вам не нужно помещать туда какой-либо контент, это просто пустая форма.
0
При наведении курсора на элемент в теге case
вы применяете стиль к псевдоэлементу ::after. В примере кода я вижу, что вы даете псевдоэлементу значение 100%, и таким образом вы меняете начальное значение ширины, равное 0,9.0005
0
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Как написать условие :hover для:before и a:after в CSS?
Улучшить статью
Сохранить статью
- Уровень сложности: Легко
- Последнее обновление: 18 мая, 2022
Улучшить статью
Сохранить статью
Селекторы :before и :after в CSS используются для добавления содержимого до и после элемента. :hover — это псевдокласс, а :before и :after — псевдоэлементы. В CSS псевдоэлементы пишутся после псевдокласса.
Синтаксис:
a:hover::before { // Свойство CSS } а: наведение :: после { // Свойство CSS }
В CSS3 двойное двоеточие (::) используется для обозначения псевдоэлемента. Для IE8 или старше используется одно двоеточие (синтаксис CSS2).
Пример 1: В этом примере используется условие :hover для:before и:after в элементе.
html
|
Leave a Comment