CSSСелектор псевдоклассаа такжеСелектор псевдоэлементов, что делает CSS более мощным.
Псевдоклассы слышали много, а псевдоэлементы можно услышать не так часто, но CSS различает их.
Каждый раз, когда вы говорите о псевдоклассах, нужно упоминать об ошибке: иногда вы обнаружите, что элементы псевдоклассов используют два двоеточия (::) вместо одного двоеточия (:) Это часть спецификации CSS3. Цель состоит в том, чтобы отличить псевдоклассы от псевдоэлементов, большинство браузеров поддерживают следующие два представления.
Вообще говоря,
#id:after{
...
}
#id::after{
...
}
Для соответствия стандартам для псевдоклассов CSS3 используется одно двоеточие (:), а для псевдоэлементов CSS3 — двойное двоеточие (::).
Конечно, есть исключения.Для псевдоэлементов, которые уже есть в CSS2, таких как :before, запись с одним и двумя двоеточиями ::before имеет тот же эффект.
Поэтому, если ваш веб-сайт должен быть совместим только с webkit, firefox, Opera и другими браузерами или мобильными страницами, рекомендуется использовать двойное двоеточие для псевдоэлементов.Если вам нужна совместимость с более ранними версиями браузеров IE, используйте CSS2. одиночные двоеточия безопаснее.
Селектор псевдокласса:focus-within
Ближе к дому, о чем я собираюсь поговорить сегодня:focus-within
Селектор псевдокласса.
Он указывает, что элемент получает фокус или что потомки элемента получают фокус. фокус,он или его потомки получают фокус.
Это также означает,он или его потомки получают фокус, может вызвать:focus-within
.
:focus-within
Мокрота
Это свойство чем-то похоже на всплывающую подсказку событий в Javascript, начиная с фокусируемого элемента и продолжая до корневого элемента.html
, может получить триггер:focus-within
события, как этот простой пример:
<div class="g-father">
<div class="g-children">
<input type="button" value="Button">
</div>
</div>
html,
body,
.g-father,
.g-children {
padding: 30px;
border:1px solid #999;
}
input {
...
&:focus {
background: #00bcd4;
}
}
html:focus-within {
background: #e91e63;
}
body:focus-within {
background: #ff5722;
}
.g-father:focus-within {
background: #ffeb3b;
}
.g-children:focus-within {
background: #4caf50;
}
Вот и все:
CodePen Demo -- всплывающий триггер :focus-within
Существование этого селектора дает CSS дополнительную возможность сохранять элементы в новом состоянии.
Вот несколько примеров, см.:focus-within
Что мы можем предоставить возможность сделать что-то.
Зондирование области фокусировки пользователя
он или его потомки получают фокус, что увеличивает воспринимаемую область фокусировки, поэтому чаще всего используется:focus-within
Ощущение действия пользователя в области фокусировки, выделение напоминания.
Следующий эффект не имеет кода JS:
Что это значит здесь?:focus-within
что ты сделал?
- Нам не нужно устанавливать сфокусированный элемент
:focus
Псевдокласс, но может быть установлен на желаемый родительский элемент, так что, когда элемент находится в фокусе, я также могу управлять стилем его родительского элемента.
Основная идея, выраженная в коде CSS, вероятно, выглядит так:
<div class="g-container">
<div class="g-username">
<input type="text" placeholder="user name" class="g_input" >
</div>
<div class="g-username">
<input type="text" placeholder="code" class="g_input" >
</div>
</div>
.g-container:focus-within {
...
input {
....
}
}
DEMO -- CSS focus-within INPUT
Используя приведенные выше идеи, мы можем сделать эффект немного более ослепительным и создать некоторые эффекты для улучшения взаимодействия с пользователем в некоторых сценариях:
DEMO -- PURE CSS FOCUS By :focus-within
Переключатель навигации TAB
В предыдущей статье были представлены два метода переключения панели навигации TAB, реализованные на чистом CSS:
Схема переключения вкладок панели навигации на чистом CSS
Теперь есть другой способ, используя:focus-within
Вы можете получить фокус элемента на родительском узле и реализовать переключатель навигации TAB:
DEMO -- focus-within switch tab
Основная идея — управлять другими селекторами через сфокусированное состояние, а самое главное — использовать родительский:not(:focus-within)
чтобы установить стиль по умолчанию:
.nav-box:not(:focus-within) {
// 默认样式
}
.nav-A:focus-within ~ .content-box .content-A {
display: block;
}
.nav-B:focus-within ~ .content-box .content-B {
display: block;
}
Сотрудничать:placeholder-shown
Эффект формы реализации псевдо класса
:focus-within
Человек имеет ограниченные способности и обычно сотрудничает с другими псевдоклассами для достижения хороших результатов. Вот еще один интересный псевдокласс, чтобы кратко представить:placeholder-shown
.
:placeholder-shown
:Псевдокласс CSS :placeholder-show представляет любой<input>
or<textarea>
element that is currently displaying placeholder text.
Кроме того, следует отметить, что этот псевдокласс все еще находится в лаборатории. То есть не входит в стандарт, естественно наша цель найти интересный CSS.
Вероятно, это означает, что когдаinput
Теги типа используют атрибут заполнителя с текстом заполнителя по умолчанию, который запускает этот стиль псевдокласса. Сотрудничать:not()
Псевдокласс, вы можете изменить стиль, когда текст по умолчанию исчезнет, и сотрудничать с главным героем этой статьи, мы можем добиться ряда эффектов формы.
Код CSS может выглядеть так:
.g-container {
width: 500px;
height: 60px;
input {
height: 100%;
width: 100%;
&:not(:placeholder-shown) {
...
}
&:placeholder-shown {
...
}
}
&:focus-within {
...
}
}
Фактический эффект выглядит следующим образом:
Как видите, приведенный выше эффект не использует JS и может быть достигнут:
- Сфокусированное и не сфокусированное управление стилем всего ввода (включая область, в которой расположен родительский элемент)
- Элемент управления стилем после появления и исчезновения текста, заданного атрибутом заполнителя
CodePen Demo -- :placeholder-shown && :focus-within
Реализовать внеэкранную навигацию
Это функция, которая упоминалась во многих других статьях с использованиемfocus-within
Удобная реализация внеэкранной навигации, можно сказать, что функция этого свойства приведена в полную силу, здесь я прямо вставляю codepenDannie VintherРеализация этого эффекта:
CodePen Demo -- Off-screen nav with :focus-within [PURE CSS]
Реализовать динамическое переключение входа в Nuggets.
juejin.imЭто блог-сайт, который мне очень нравится. В его логине есть небольшое пасхальное яйцо. Панда вверху будет иметь разные состояния, когда вы вводите пароль учетной записи. Эффект следующий:
с использованиемfocus-within
, вы можете добиться этой анимации без Javascript:
Если вы заинтересованы, вы можете нажать здесь, чтобы увидеть полный демо-код:
Демонстрация CodePen — реализация эффекта входа Nuggets на чистом CSS
совместимость
Ну примеры почти одинаковые.Теперь наступает момент совместимости убийства и убийства сердец.Условно этот атрибут имеет большую вероятность быть красным.Посмотрите на CANIUSE,дата скриншота(2018/08/02),на самом деле , это не очень мрачно.
наконец
Спасибо за ваше терпение, чтобы прочитать. Эта статья является всего лишь руководством, с нетерпением жду открытияfocus-within
Более осмысленное использование.
Другие замечательные технические статьи по CSS собраны в моемGithub -- iCSS, продолжайте обновлять, добро пожаловать, нажмите звездочку, чтобы подписаться на коллекцию.
Ну вот и конец этой статьи, надеюсь она вам поможет :)
Если у вас есть какие-либо вопросы или предложения, вы можете общаться больше.Оригинальные статьи ограничены в написании и знаниях.Если в статье есть какие-либо неточности, пожалуйста, дайте мне знать.