Раньше единственным свойством псевдоэлемента, которое можно было изменить с помощью JavaScript, было content
. Теперь, с помощью пользовательских переменных CSS (также называемых пользовательскими свойствами CSS) и JavaScript, мы теперь можем легко изменить свойства в :after
и :before
. Давайте посмотрим, как мы можем это сделать.
Если вы не знаете, что такое пользовательская переменная CSS, MDN очень хорошо объясняет это здесь.
Самым большим преимуществом пользовательских переменных CSS по сравнению с переменными SCSS является то, что мы можем получить доступ к пользовательским переменным CSS с помощью JavaScript. Почему это полезно? Это полезно, потому что теперь мы можем создать пользовательскую переменную CSS в родительском элементе и связать ее с его псевдоэлементом.
Давайте посмотрим на пример ниже.
.element { --dynamic-width: 0%; width: 200px; height: 200px; background-color: #ccc; margin: 0 auto; &:after { content: ""; display: block; background-color: #000; height: 2px; width: var(--dynamic-width); position:relative; left: 100%; top: 50%; transition: width 0.2s ease; } }
Видите, как я связываю width
из .element:after
с --dynamic-width
?
Во-первых, мы определяем переменную CSS --dynamic-width
внутри .element
, затем присваиваем ей начальное значение 0%.
Во-вторых, внутри псевдоэлемента .element
мы возвращаем значение --dynamic-width
в ширину, поэтому значение --dynamic-width
можно передать в свойство псевдоэлемента width
.
Поскольку мы можем использовать JavaScript для доступа к пользовательским переменным CSS, мы можем изменить ширину .element:after
через его родительский элемент.
Теперь вы можете использовать переменные JavaScript и CSS для изменения свойств псевдоэлементов!
let element = document.getElementsByClassName("element")[0]; element.style.setProperty("--dynamic-width", '50%');
Я собрал все вместе в этом Codepen для демонстрации. Просто измените значение --dynamic-width
в JavaScript, чтобы увидеть эффект.
Первоначально опубликовано на сайте web-tricks 14 ноября 2018 г.