автор:JowayYoung
склад:Github,CodePen
Блог:Официальный сайт,Наггетс,думаю нет,Знай почти
Нет публики:Интерфейс IQ
Специальное заявление: Нелегко быть оригинальным, и перепечатка или плагиат не допускаются без разрешения.Если вам нужно перепечатать, вы можете связаться с автором для получения разрешения.
предисловие
CSS-переменныеон жеПользовательские свойства CSSПочему вы вдруг упомяну об этом очень мало, чтобы использовать? Потому что недавно реконструировав личный официальный сайт, я не знаю, почему я вдруг люблю его.CSS-переменные, может быть, его собственное скрытое очарование заставляет автора восхищаться им.
Когда дело доходит до того, почему переменные используются в CSS, давайте возьмем каштан, и предполагается, что все поймут с первого взгляда.
/* 不使用CSS变量 */
.title {
background-color: red;
}
.desc {
background-color: red;
}
/* 使用CSS变量 */
:root {
--bg-color: red;
}
.title {
background-color: var(--bg-color);
}
.desc {
background-color: var(--bg-color);
}
После прочтения может возникнуть желание использоватьCSS-переменныеОбъем кода немного больше, но вы когда-нибудь думали, что однажды злобный планировщик и дизайнер сказали, что хотят сделать функцию скина. В соответствии с обычным образом мышления предполагается, что некоторые студенты будут следовать默认颜色主题
добавить элемент управления新颜色主题
CSS-файл. Очень сложно поддерживать несколько наборов цветов темы одновременно каждый раз, когда добавляется новое требование.
В настоящее времяCSS-переменныеЭто удобно Я заранее стандартизирую различные цвета, которые необходимо изменить, с дизайнером и передамCSS-переменныеОпределите и обработайте их в пакетном режиме через JSCSS-переменныеВот и все. Это тожеИзменить цвета темыПреимущество одного из решений заключается в том, что вам нужно написать только один набор кода CSS.
["red", "blue", "green"].forEach(v => {
const btn = document.getElementById(`${v}-theme-btn`);
btn.addEventListener("click", () => document.body.style.setProperty("--bg-color", v));
});
Вот краткое изложение преимуществ использования переменных в CSS:
- Уменьшите дублирование кода стиля
- Увеличьте расширяемость кода стиля
- Повышение гибкости кода стилей
- Добавьте метод связи между CSS и JS.
- Изменение стиля без глубокого обхода DOM
Некоторые студенты могут спросить, Sass и Less уже реализовали функцию переменных, так зачем беспокоиться. Но подумайте об этом,CSS-переменныеСравнивая переменные Sass и Less, у него есть свои преимущества.
- Собственные функции браузера, можно запускать напрямую без перевода
- Член объекта DOM, что значительно облегчает связь между CSS и JS.
знать
Я собирался рассказать о половине этогоCSS-переменныеСпецификация и использование , но после долгих поисков в Интернете я почувствовал, что это не нужно, поэтому я опубликовал руководство, написанное г-ном Руаном Ифэном.«Учебник по CSS-переменным». В то же время автор такжеCSS-переменныеДетали организованы в месте, чтобы каждый помнил.
- утверждение:
--变量名
- Читать:
var(--变量名, 默认值)
- Типы
- Обычный: может использоваться только как
属性值
нельзя использовать как属性名
- Персонажи: строковое конкатенация
"Hello, "var(--name)
- Значение: использовать
calc()
Используется с числовыми единицамиvar(--width) * 10px
- Обычный: может использоваться только как
- объем
- Область применения: в
当前元素块作用域
а также子元素块作用域
действителен в соответствии с - Приоритет:
内联样式 > ID选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器
- Область применения: в
Затем используйте несколько специальных сцен, чтобы показатьCSS-переменныеОчарование. Опять таки,У вещи есть сцена использования, она, естественно, будет иметь свою ценность., тогда все больше и больше людей будут его использовать.
сцены, которые будут использоваться
фактическиCSS-переменныеСуществует особенно полезный сценарий, то есть он используется в сочетании со сбором элементов списка. Если вы не понимаете, что это, читайте.
以下所有演示代码基于vue文件,但HTML、CSS和JS分开书写,为了简化CSS的书写而使用Sass进行预处理,方便代码演示
бар загрузки бар
Полоса загрузки в виде полосы обычно состоит из нескольких строк, и каждая строка соответствует одной и той же анимации с разными задержками, и одна и та же анимация запускается через разницу во времени для создания эффекта загрузки. Подсчитано, что большинство учащихся могут написать код CSS следующим образом.
<ul class="strip-loading flex-ct-x">
<li v-for="v in 6" :key="v"></li>
</ul>
.loading {
width: 200px;
height: 200px;
li {
border-radius: 3px;
width: 6px;
height: 30px;
background-color: #f66;
animation: beat 1s ease-in-out infinite;
& + li {
margin-left: 5px;
}
&:nth-child(2) {
animation-delay: 200ms;
}
&:nth-child(3) {
animation-delay: 400ms;
}
&:nth-child(4) {
animation-delay: 600ms;
}
&:nth-child(5) {
animation-delay: 800ms;
}
&:nth-child(6) {
animation-delay: 1s;
}
}
}
Анализ кода показал, что каждый<li>
просто существуюanimation-delay
Другой, и остальная часть кода точно такая же, если вы замените его другими аналогичными сценариями сбора элементов списка, не будет ли 10<li>
просто напиши 10:nth-child
.
Очевидно, что этот метод негибок и его непросто инкапсулировать в компоненты, а еще лучше, если бы его можно было инкапсулировать в функцию типа JS и выводить разные стилевые эффекты в зависимости от параметров. Говоря об этом, очевидно, что это проложить путьCSS-переменныенавыки развития.
Для модификации раздела HTML пусть каждый<li>
имеет свою область примененияCSS-переменные. Для модификации части CSS необходимо проанализировать, какие свойстваindex
Происходят инкрементные и регулярные изменения, используйте регулярные измененияCSS-переменныевыражение вместо этого.
<ul class="strip-loading flex-ct-x">
<li v-for="v in 6" :key="v" :style="`--line-index: ${v}`"></li>
</ul>
.strip-loading {
width: 200px;
height: 200px;
li {
--time: calc((var(--line-index) - 1) * 200ms);
border-radius: 3px;
width: 6px;
height: 30px;
background-color: #f66;
animation: beat 1.5s ease-in-out var(--time) infinite;
& + li {
margin-left: 5px;
}
}
}
源码链接可在文章结尾处获取
переменные в коде--line-index
а также--time
Сделать каждый<li>
Имейте область, принадлежащую вашей собственной. Например, второй<li>
,--line-index
имеет значение 2,--time
рассчитывается как200ms
, заменен на третий<li>
Последние два значения снова будут разными.
ЭтоCSS-переменныепо размаху действия (在当前元素块作用域及其子元素块作用域下有效
), Таким образом, в.strip-loading
вызывается в области блока--line-index
это недействительно.
/* flex属性无效 */
.loading {
display: flex;
align-items: center;
flex: var(--line-index);
}
по волшебствуCSS-переменныеа также поместите код CSS из29行
сокращено до15行
, для тех сцен с большим количеством наборов элементов списка эффект более заметен. Кроме того, это красивее и проще в обслуживании.Однажды было сказано, что разница во времени эффекта загрузки не очевидна, поэтому я прямо поставилcalc((var(--line-index) - 1) * 200ms)
внутренний200ms
приспособиться к400ms
Вот и все. нет необходимости в каждом:nth-child(n)
Изменено.
полоса загрузки сердца
Я видел Наггетс некоторое время назад陈大鱼头兄
Полоса загрузки в форме сердца очень красивая и вызывает чувство.
При анализе анимации было обнаружено, что цвет фона каждой строки не соответствует задержке анимации, а высота анимации также не соответствует. Если вы будете внимательны, вы также можете обнаружить, что высоты статей 1 и 9 одинаковы, высоты статей 2 и 8 одинаковы и так далее, чтобы получить高度变换相同类
Формула:对称index = 总数 + 1 - index
.
Цвет фона использует поворот оттенка фильтра.hue-rotate
Функция, цель которой сделать переход цвета более естественным; настройка задержки анимации и т.п.条形加载条
настройки одинаковые. использовать нижеCSS-переменныеСделайте это в соответствии с анимацией, которую вы видите.
<div class="heart-loading flex-ct-x">
<ul style="--line-count: 9;">
<li v-for="v in 9" :key="v" :class="`line-${v}`" :style="`--line-index: ${v}`"></li>
</ul>
</div>
.heart-loading {
width: 200px;
height: 200px;
ul {
display: flex;
justify-content: space-between;
width: 150px;
height: 10px;
}
li {
--Θ: calc(var(--line-index) / var(--line-count) * .5turn);
--time: calc((var(--line-index) - 1) * 40ms);
border-radius: 5px;
width: 10px;
height: 10px;
background-color: #3c9;
filter: hue-rotate(var(--Θ));
animation-duration: 1s;
animation-delay: var(--time);
animation-iteration-count: infinite;
}
.line-1,
.line-9 {
animation-name: line-move-1;
}
.line-2,
.line-8 {
animation-name: line-move-2;
}
.line-3,
.line-7 {
animation-name: line-move-3;
}
.line-4,
.line-6 {
animation-name: line-move-4;
}
.line-5 {
animation-name: line-move-5;
}
}
源码链接可在文章结尾处获取
После волны эксплуатации будет получен следующий эффект. а также陈大鱼头兄
По сравнению с загрузочной полосой в форме сердца цвет, кривая волны и частота биения немного отличаются.Под распространением теплых тонов и всплеском адреналина это ощущение сердцебиения. Напоминает мне стихотворение, которое я когда-то написал:我见犹怜,爱不释手,雅俗共赏,君子好逑
.
Панель навигации с вкладками
Вышесказанное демонстрирует две панели загрузкиCSS-переменныеИспользование CSS и некоторые фокусы теперь демонстрируются через панель навигации с вкладками.CSS-переменныеИспользовать в JS.
В JS есть три основные операцииCSS-переменныеAPI выглядит простым и легко запоминающимся:
- Чтение переменной:
elem.style.getPropertyValue()
- Установить переменные:
elem.style.setProperty()
- Удалить переменные:
elem.style.removeProperty()
Сначала на карте эффекта в основном используется эффектCSS-переменныеОтметьте цвет фона каждой вкладки и переключите состояние отображения вкладки.
<div class="tab-navbar">
<nav>
<a v-for="(v, i) in list" :key="v" :class="{ active: index === i }" @click="select(i)">标题{{i + 1}}</a>
</nav>
<div>
<ul ref="tabs" :style="`--tab-count: ${list.length}`">
<li v-for="(v, i) in list" :key="v" :style="`--bg-color: ${v}`">内容{{i + 1}}</li>
</ul>
</div>
</div>
.tab-navbar {
display: flex;
overflow: hidden;
flex-direction: column-reverse;
border-radius: 10px;
width: 300px;
height: 400px;
nav {
display: flex;
height: 40px;
background-color: #f0f0f0;
line-height: 40px;
text-align: center;
a {
flex: 1;
cursor: pointer;
transition: all 300ms;
&.active {
background-color: #66f;
font-weight: bold;
color: #fff;
}
}
}
div {
flex: 1;
ul {
--tab-index: 0;
--tab-width: calc(var(--tab-count) * 100%);
--tab-move: calc(var(--tab-index) / var(--tab-count) * -100%);
display: flex;
flex-wrap: nowrap;
width: var(--tab-width);
height: 100%;
transform: translate3d(var(--tab-move), 0, 0);
transition: all 300ms;
}
li {
display: flex;
justify-content: center;
align-items: center;
flex: 1;
background-color: var(--bg-color);
font-weight: bold;
font-size: 20px;
color: #fff;
}
}
}
export default {
data() {
return {
index: 0,
list: ["#f66", "#09f", "#3c9"]
};
},
methods: {
select(i) {
this.index = i;
this.$refs.tabs.style.setProperty("--tab-index", i);
}
}
};
源码链接可在文章结尾处获取
существует<ul>
определено выше--tab-index
Указывает текущий индекс вкладки, сбрасывается при нажатии кнопки--tab-index
значение, вы можете перемещать, не манипулируя DOM<ul>
Указанная вкладка отображается в позиции. Перемещаемый без манипулирования DOM<ul>
потому что это определяет--tab-move
,пройти черезcalc()
рассчитать--tab-index
а также--tab-move
отношения, тем самым контролируяtransform: translate3d()
двигаться<ul>
.
Также в<li>
определено выше--bg-color
Указывает цвет фона вкладки, что также является относительно кратким методом назначения шаблона, который лучше, чем запись<li :style="backgroundColor: ${color}">
Будьте милы. Если несколько свойств CSS зависят от назначения переменной, используйтеCSS-переменныеУдобнее назначать значения стилям.Эти свойства CSS можно рассчитать и назначить в файлах CSS, что может помочь JS разделить часть работы по вычислению атрибутов.
Конечно, эту панель навигации по вкладкам можно реализовать и с помощью чистого CSS.Заинтересованные студенты могут прочитать статью в предыдущей статье автора.Панель навигации с вкладками на чистом CSS.
Плавающая кнопка отслеживания
Практикуется через несколько каштановCSS-переменныеЯ считаю, что в применении CSS и JS все освоили их использование и навыки. Я видел классный эффект наведения мыши на веб-сайте раньше, и, похоже, он используетCSS-переменныеосуществленный. Автор также использует по памятиCSS-переменныеСделай это.
На самом деле идея относительно проста, сначала разметьте и раскрасьте кнопки, а затем используйте псевдоэлементы, чтобы отметить положение мыши, определить--x
а также--y
Представляет координаты псевдоэлемента в кнопке и получает мышь на кнопке через JSoffsetLeft
а такжеoffsetLeft
назначить на--x
а также--y
, а затем добавьте фоновый цвет радиального градиента к псевдоэлементу, и все готово.Родится классный эффект отслеживания наведения мыши.
<a class="track-btn pr tac" @mousemove="move">
<span>妙用CSS变量,让你的CSS变得更心动</span>
</a>
.track-btn {
display: block;
overflow: hidden;
border-radius: 100px;
width: 400px;
height: 50px;
background-color: #66f;
line-height: 50px;
cursor: pointer;
font-weight: bold;
font-size: 18px;
color: #fff;
span {
position: relative;
}
&::before {
--size: 0;
position: absolute;
left: var(--x);
top: var(--y);
width: var(--size);
height: var(--size);
background-image: radial-gradient(circle closest-side, #09f, transparent);
content: "";
transform: translate3d(-50%, -50%, 0);
transition: all 200ms ease;
}
&:hover::before {
--size: 400px;
}
}
export default {
name: "track-btn",
methods: {
move(e) {
const x = e.pageX - e.target.offsetLeft;
const y = e.pageY - e.target.offsetTop;
e.target.style.setProperty("--x", `${x}px`);
e.target.style.setProperty("--y", `${y}px`);
}
}
};
源码链接可在文章结尾处获取
На самом деле, его можно комбинировать с событиями мыши для получения более крутых эффектов, таких как动画关联
,事件响应
и так далее. Не невозможно, просто подумайте, наслаждайтесь своим воображением, друзья.
Я также видел очень хороший каштан на CodePen раньше,Плавающая кнопка параллакса, конкретный код включает в себя некоторые знания о трехмерном преобразовании. Прочитав исходный код, я буду реализовывать его сам по его идеям, кстати, я немного улучшу код и инкапсулирую его в компонент Vue, который будет храниться в примере кода этого курса. Я чувствую, что записанный GIF-файл немного неудобен, а эффект отображения не очень хорош Заинтересованные студенты могут загрузить пример кода этого учебного программного обеспечения и запустить его, чтобы увидеть эффект.
совместимый
Для современных браузеровCSS-переменныеСовместимость на самом деле неплохая, поэтому каждый может с уверенностью ее использовать. В конце концов, сейчас для крупных производителей браузеров настало время быстрых итераций, и на продукты приходится большая часть пользовательского опыта, поэтому, если позволяют условия, по-прежнему смело пробовать что-то новое и не ограничиваться чем-то таким. -называемые нормами в прошлом.
Сколько людей по-прежнему готовы поддерживать совместимость IE6~IE9, если пользовательский опыт продукта ограничен подавлением старых браузеров (可能政务Web应用和金融Web应用除外吧
), я считаю, что этот продукт не пойдет очень далеко.
В процессе завершения продукта мы должны не только выполнить рабочую задачу, если мы можем подумать об украшении, обеспечивая при этом прогресс, могут быть неожиданные выгоды.Написание каждого фрагмента кода с душой — вот истинное значение получения удовольствия от написания кода..
Суммировать
Эта статья рассматривается в пошаговой манереCSS-переменныеКонечно, нельзя отказываться от такой полезной функции. На самом деле, если подумать, можноCSS-переменныеИспользуется во многих сценариях. Автор объединил примеры, упомянутые в этой статье, в демоверсию, что также удобно для заинтересованных студентов, чтобы изучить пример кода курсовой и подумать над некоторыми деталями, которые, возможно, не были замечены при чтении этой статьи.
- Демонстрационный пример:
条形加载条
,心形加载条
,标签导航栏
,悬浮跟踪按钮
,悬浮视差按钮
- Демонстрационный адрес: следовать
IQ前端
,сканирование文章底部二维码
, фоновый ответ变量
,ПолучатьВесь набор примеров кода курсовой работы - Демо-беги: внутри
readme.html
Подробное описание, не забудьте увидеть 喔
В конце сочинения я подарю вам большое пасхальное яйцо, радужного цвета согревающего душу 🌈 с кнопочкой любви. Если вы считаете, что эта статья хорошо написана, пожалуйста, поставьте автору лайк, как показано ниже. Конечно, исходный код пасхального яйца также находится в образце кода учебного курса. Если вы хотите узнать больше о навыках разработки CSS, вы можете перейти к статье, написанной автором в 2019 году.9.2万阅读量
горячая статья«Гибкое использование навыков разработки CSS (66 кейсов Sao)», гарантированно удовлетворит ваши глазные яблоки.
Эпилог
❤️Подписаться + Нравится + Избранное + Комментарий + Переслать ❤️, оригинальность это не просто, поощряйте автора к созданию более качественных статей
Обратите внимание на публичный аккаунтIQ前端
, внешний общедоступный аккаунт, ориентированный на навыки разработки CSS / JS, вас ждут другие галантереи переднего плана
- Ответить после подписки
资料
Получите бесплатные учебные материалы - Ответить после подписки
进群
Втяните вас в группу технического обмена - Добро пожаловать, чтобы следовать
IQ前端
,БолееНавыки разработки на CSS/JSНажимайте только на публичный аккаунт