Анимация эффекта выглядит следующим образом:
Ссылка для предварительного просмотра и код в моей кодовой ручке:код спрей.IO/ о-монга...Предварительный просмотр точки знаний
этой статьименьше навыков + css трюкиК пунктам знаний относятся:
- Как less пишет цикл
- Как использовать js-выражения в less
- Свойства CSS3: как box-shadow генерирует сотни звезд
- Свойства CSS3: фон: радиальный градиент радиальный градиент, как создать цвет фона градиента
Структура HTML-документа
Во-первых, структура файла html очень проста:
<div>
<div id="start1"></div>
<div id="start2"></div>
<div id="start3"></div>
</div>
Первый шаг: радиальный градиент создает градиентный фон
Установите теги html и body
* {
padding: 0;
margin: 0;
}
html, body {
background: radial-gradient(ellipse at bottom, #1B2735 0%, #090A0F 100%);
overflow: hidden;
height: 100%;
}
Эффект следующий:
Для сравнения фонового изображения, которое я не нарисовал с чисто черным фоном, я поставил чисто черное изображение для сравнения, видно, что изображение выше не такое уж черное, а немного серое.Вот введение радиально-градиентных параметров
- эллипс Указывает, что я использую градиент эллипса. Вы можете увидеть, как его использовать, посмотрев на картинку ниже.
// 上图的参数是
radial-gradient(ellipse,#ffffff, #6a6a6a)
То есть цвет представляет собой градиент эллипса от белого #ffffff до серого #6a6a6a.
- на дне Это показывает, что центр градиента эллипса находится внизу, см. конкретный эффект на следующем рисунке:
// 上图的参数是
radial-gradient(ellipse at bottom,#ffffff, #6a6a6a)
Итак, мы закончили с градиентом.
Шаг 2: Как box-shadow генерирует сотни звезд
Прежде всего, мы должны решить 3 проблемы, во-первых, как написать цикл с меньшим количеством кода, см. следующий код меньшего размера (подробное объяснение находится ниже кода)
2.1 Как less реализует зацикливание
Примеры следующие:
.loop(@counter) when(@counter > 0) {
.h@{counter} {
padding: (10px*@counter);
}
.loop((@counter - 1)); //递归调用自身
}
div{
.loop(5);
}
//编译输出
div .h5 {
padding: 50px;
}
div .h4 {
padding: 40px;
}
div .h3 {
padding: 30px;
}
div .h2 {
padding: 20px;
}
div .h1 {
padding: 10px;
}
- .loop(@counter) when(@counter > 0) — это функция в less, что означает, что функция цикла определена
- @counter — это переменная, переданная в функцию
- when(@counter > 0) означает, что когда значение переменной @counter > 0, функция будет выполнена
- .loop((@counter - 1)) это рекурсивный вызов
Итак, мы пришли к выводу, что способ реализации цикла less заключается в рекурсивном вызове определенной функции.
Затем решите вторую проблему, а именно, как писать выражения JS с меньшими затратами.
2.2 Как писать выражения JS меньше
.loop(@counter) when(@counter > 0) {
padding: ~`@{counter} + Math.round(2.4)`;
.loop(@counter - 1); //递归调用自身
}
div{
.loop(2);
}
// 生成代码如下
div {
padding: 4;
padding: 3;
}
Итак, мы пришли к выводу, что способ использования js-выражений в less состоит в том, чтобы начать с ~, а затем обернуть выражение ``
Затем решите третью задачу: как использовать свойство box-shadow для создания сотен звезд.
2.3 Как использовать цикл less для создания сотен звездочек свойства box-shadow
Эти звезды на самом деле квадратные точки, мы сначала создаем 4 квадратных точки
//
div
{
width:10px;
height:10px;
box-shadow: 10px 0px #9bcded, 50px 0px #9bcded, 10px 40px #9bcded, 50px 40px #9bcded;
}
Эффект следующий
Здесь несколько значений box-shadow используются для генерации квадратов// 比如以下属性10px 0px #9bcded 表示,在相对于div元素x轴10px,y轴0px处有一个#9bcded颜色的小点
// 因为div本身是width 10px height 10px 是一个正方形,所以它的box-shadow也是正方形
box-shadow: 10px 0px #9bcded,
width:10px;
height:10px;
Затем нам нужно объединить цикл less, чтобы создать больше квадратов (звезд) на тени блока:
// 首先定义个mixin函数,参数是@n, 条件是只有@n > 0的时候才执行函数里的代码
.mixin(@n) when(@n > 0) {
box-shadow+ : ~`Math.round(Math.random() * 2000) + 'px' + ' ' +Math.round(Math.random() * 2000) + 'px #FFF' `;
.mixin((@n - 1));
}
Вышеупомянутая функция в основном находится в box-shadow, которая в основном включает 3 параметра.
- Сгенерированные значения для оси X — это случайные числа 0-2000 (Math.round(Math.random() * 2000) + 'px')
- Сгенерированные значения оси Y, которые являются случайными числами от 0 до 2000 (Math.round(Math.random() * 2000) + 'px #FFF' `)
- Цвет #FFF
Если мы вызовем mixin(100), он сгенерирует 100 белых квадратов (звезд) на фоне 2000 * 2000
Шаг 3: Объедините HTML для создания звезд
之前html结构如下
<div>
<div id="start1"></div>
<div id="start2"></div>
<div id="start3"></div>
</div>
меньше выглядит следующим образом:
// start1生成了长1px,宽1px的星星700个,这是小星星
// 小星星代表距离远的星星,大星星代表距离近的,这样就有了空间感
#start1 {
.mixin(700);
width: 1px;
height: 1px;
animation: animStar 50s linear infinite;
animation-delay:-10s;
}
// start2生成了长2px,宽2px的星星200个
#start2 {
.mixin(200);
width: 2px;
height: 2px;
animation: animStar 100s linear infinite;
animation-delay:-8s;
}
// start3生成了长3px,宽3px的星星100个
#start3 {
.mixin(100);
width: 3px;
height: 3px;
animation : animStar 150s linear infinite;
animation-delay:-5s;
}
// 动画效果如下
@keyframes animStar {
from { transform: translateY(0px) }
to { transform: translateY(-2000px) }
}
В конце этой статьи вы можете пойти в codepen, чтобы попробовать эффект, хе-хе