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, продолжайте обновлять, добро пожаловать, нажмите звездочку, чтобы подписаться на коллекцию.
Ну вот и конец этой статьи, надеюсь она вам поможет :)
Если у вас есть какие-либо вопросы или предложения, вы можете общаться больше.Оригинальные статьи ограничены в написании и знаниях.Если в статье есть какие-либо неточности, пожалуйста, дайте мне знать.