Directorio de artículos
Directorio de demostración de front-end
Efecto
Vista previa del efecto: https://codepen.io/karshey/pen/zYyBRWZ
Referencia:
Luces navideñas de CSS puro (codepen.io)
proceso
Implementación de brillo de bombilla (animación y sombra de caja)
Efecto:
Tomemos el ejemplo de una sola bombilla que parpadea. El principio de realización de la bombilla que brilla es la animación CSS animation
y la sombra box-shadow
.
Cuando es brillante, en realidad muestra la misma sombra que el color de fondo:
sombra-cuadro: sombra-h, sombra-v, desenfoque, extensión de color;
posición de la sombra horizontal | posición de la sombra vertical | distancia de desenfoque | tamaño de la sombra | color de la sombra | cambiar la sombra exterior (inicio) a la sombra interior
Aquí solo necesitas usar distancia de desenfoque | tamaño de sombra | color de sombra .
Solo necesitas tener una sombra al principio y al final de la animación, y cuando la sombra desaparezca en el medio, habrá el efecto de la bombilla parpadeando y apagándose.
@keyframes glow-red {
/* 开头和结尾都亮 */
0%,
100% {
/* 放大阴影相当于亮了 */
box-shadow: 0 0 20px 5px #fbc2eb;
}
50% {
box-shadow: none;
}
}
Aquí llamamos al efecto de animación de la bombilla rosa glow-red
y animation
lo usaremos en .
animation
subpropiedades de:
animation-name
: Especifica@keyframes
el nombre de un , la animación utilizará esta@keyframes
definición.animation-duration
: La duración de toda la animación.animation-timing-function
: Control de velocidad durante la animación, comoease
olinear
.animation-delay
: Tiempo de retardo de la animación.animation-direction
: La dirección del movimiento cuando se repite la animación.animation-iteration-count
: El número de veces que se ejecuta el bucle de animación.animation-fill-mode
: Establece el estado después de que se ejecuta la animación/antes de que comience a ejecutarse. Por ejemplo, puede hacer que la animación permanezca en la última escena después de que se ejecute la animación o volver al estado inicial.animation-play-state
: pausar/iniciar animación.
Aquí, solo necesitamos establecer el tiempo de la animación en 1 s ( animation-duration
) y ejecutarlo infinitamente ( animation-iteration-count
).
animation: glow-red 1s infinite;
En resumen, el código relacionado con una sola bombilla rosa:
.red {
background-image: linear-gradient(to top, #fbc2eb 0%, #a6c1ee 100%);
animation: glow-red 1s infinite;
}
@keyframes glow-red {
/* 开头和结尾都亮 */
0%,
100% {
/* 放大阴影相当于亮了 */
box-shadow: 0 0 20px 5px #fbc2eb;
}
50% {
box-shadow: none;
}
}
Controlar el tiempo de parpadeo y secuencia de las bombillas (animación-retraso)
En este momento, las bombillas parpadean al mismo tiempo.
Queremos que las bombillas parpadeen en orden: rosa primero, azul después y verde al final.
Método de implementación: establezca el momento en que comienza la animación de la bombilla, es decir, el tiempo de retrasoanimation-delay
.
Por ejemplo, deje que el rosa no tenga tiempo de retraso, el azul tenga un retraso de 0,3 segundos y el verde tenga un retraso de 0,6 segundos.
.red {
background-image: linear-gradient(to top, #fbc2eb 0%, #a6c1ee 100%);
animation: glow-red 1s infinite;
}
.blue {
background-image: linear-gradient(120deg, #89f7fe 0%, #66a6ff 100%);
animation: glow-blue 1s infinite;
animation-delay: 0.3s;
}
.green {
background-image: linear-gradient(120deg, #d4fc79 0%, #96e6a1 100%);
animation: glow-green 1s infinite;
animation-delay: 0.6s;
}
Efecto:
botón del interruptor de encendido
Quiere tener botones de ENCENDIDO y APAGADO, haga clic en ENCENDIDO para encender la luz, haga clic en APAGADO para apagar la luz.
Agregar botón y evento de clic correspondiente:
Evento del botón APAGADO: Obtenga el nodo y apague la luz.
const item = document.getElementsByClassName('item')
const len = item.length
function offLight() {
for (let i = 0; i < len; i++) {
item[i].style.animation = 'none'
item[i].style.background = '#9e9e9e'
}
}
Evento del botón ON: eliminar el estilo original y animationPlayState
comenzar.
También es posible no escribir item[i].style.animationPlayState = 'running' aquí.
function onLight() {
for (let i = 0; i < len; i++) {
item[i].removeAttribute('style')
//可以不写
item[i].style.animationPlayState = 'running'
}
}
Cuando se hace clic en APAGADO: Equivale a agregar una animación de parada y un estilo de color de fondo gris, cubriendo el estilo original.
Por lo tanto, cuando hace clic en ON: debe eliminar el estilo agregado por OFF. Se puede activar sin agregarlo aquí item[i].style.animationPlayState = 'running'
, porque el efecto de iluminación del CSS original se mostrará después de que no haya estilo.
el código
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>圣诞节灯泡</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 九个灯泡 -->
<div class="main">
<div class="items">
<div class="red item" id="red"></div>
<div class="blue item" id="blue"></div>
<div class="green item" id="green"></div>
<div class="red item" id="red"></div>
<div class="blue item" id="blue"></div>
<div class="green item" id="green"></div>
<div class="red item" id="red"></div>
<div class="blue item" id="blue"></div>
<div class="green item" id="green"></div>
</div>
<div class="title">
Christmas Lights
</div>
<div class="btn">
<div onclick="onLight()">ON</div>
<div onclick="offLight()">OFF</div>
</div>
</div>
</body>
</html>
<script src="index.js"></script>
CSS
body {
margin: 0;
padding: 0;
background-image: linear-gradient(to right, #6a11cb 0%, #2575fc 100%);
}
.red {
background-image: linear-gradient(to top, #fbc2eb 0%, #a6c1ee 100%);
animation: glow-red 1s infinite;
}
.blue {
background-image: linear-gradient(120deg, #89f7fe 0%, #66a6ff 100%);
animation: glow-blue 1s infinite;
animation-delay: 0.3s;
}
.green {
background-image: linear-gradient(120deg, #d4fc79 0%, #96e6a1 100%);
animation: glow-green 1s infinite;
animation-delay: 0.6s;
}
.main {
display: flex;
flex-direction: column;
margin-top: 100px;
justify-content: center;
align-items: center;
}
.items {
display: flex;
}
.title {
font-size: 38px;
font-weight: 700;
color: #fff;
text-shadow: 0 0 30px #fff;
}
.btn {
margin-top: 20px;
display: flex;
}
.btn div {
width: 50px;
height: 50px;
border-radius: 50%;
line-height: 50px;
text-align: center;
background-color: #9e9e9e;
color: #fff;
margin: 10px;
cursor: pointer;
}
.item {
height: 50px;
width: 50px;
border-radius: 50%;
display: inline-block;
margin: 20px;
}
@keyframes glow-red {
/* 开头和结尾都亮 */
0%,
100% {
/* 放大阴影相当于亮了 */
box-shadow: 0 0 20px 5px #fbc2eb;
}
50% {
box-shadow: none;
}
}
@keyframes glow-blue {
/* 开头和结尾都亮 */
0%,
100% {
/* 放大阴影相当于亮了 */
box-shadow: 0 0 20px 5px #89f7fe;
}
50% {
box-shadow: none;
}
}
@keyframes glow-green {
/* 开头和结尾都亮 */
0%,
100% {
/* 放大阴影相当于亮了 */
box-shadow: 0 0 20px 5px #96e6a1;
}
50% {
box-shadow: none;
}
}
js
const item = document.getElementsByClassName('item')
const len = item.length
function onLight() {
for (let i = 0; i < len; i++) {
item[i].removeAttribute('style')
// item[i].style.animationPlayState = 'running'
}
}
function offLight() {
for (let i = 0; i < len; i++) {
item[i].style.animation = 'none'
item[i].style.background = '#9e9e9e'
}
}
referencia
Luces navideñas CSS puro (codepen.io)
Introducción al uso de la animación en la tecnología de animación CSS – WEB hacker (webhek.com)
Herramienta SCSS a CSS en línea - UU Online Tools (uutool.cn)
Fondo degradado gratuito Estilo CSS3 | oulu.me
código 1
Luces navideñas CSS puro (codepen.io)
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="style.css">
</head>
<ul class="lightrope">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</html>
css: convierte el scss del enlace a css.
body {
background: #000;
}
.lightrope {
text-align: center;
white-space: nowrap;
overflow: hidden;
position: absolute;
z-index: 1;
margin: -15px 0 0 0;
padding: 0;
pointer-events: none;
width: 100%;
}
.lightrope li {
position: relative;
animation-fill-mode: both;
animation-iteration-count: infinite;
list-style: none;
margin: 0;
padding: 0;
display: block;
width: 12px;
height: 28px;
border-radius: 50%;
margin: 20px;
display: inline-block;
background: #00f7a5;
box-shadow: 0px 4.6666666667px 24px 3px #00f7a5;
animation-name: flash-1;
animation-duration: 2s;
}
.lightrope li:nth-child(2n+1) {
background: aqua;
box-shadow: 0px 4.6666666667px 24px 3px rgba(0, 255, 255, 0.5);
animation-name: flash-2;
animation-duration: 0.4s;
}
.lightrope li:nth-child(4n+2) {
background: #f70094;
box-shadow: 0px 4.6666666667px 24px 3px #f70094;
animation-name: flash-3;
animation-duration: 1.1s;
}
.lightrope li:nth-child(odd) {
animation-duration: 1.8s;
}
.lightrope li:nth-child(3n+1) {
animation-duration: 1.4s;
}
.lightrope li:before {
content: "";
position: absolute;
background: #222;
width: 10px;
height: 9.3333333333px;
border-radius: 3px;
top: -4.6666666667px;
left: 1px;
}
.lightrope li:after {
content: "";
top: -14px;
left: 9px;
position: absolute;
width: 52px;
height: 18.6666666667px;
border-bottom: solid #222 2px;
border-radius: 50%;
}
.lightrope li:last-child:after {
content: none;
}
.lightrope li:first-child {
margin-left: -40px;
}
@keyframes flash-1 {
0%,
100% {
background: #00f7a5;
box-shadow: 0px 4.6666666667px 24px 3px #00f7a5;
}
50% {
background: rgba(0, 247, 165, 0.4);
box-shadow: 0px 4.6666666667px 24px 3px rgba(0, 247, 165, 0.2);
}
}
@keyframes flash-2 {
0%,
100% {
background: aqua;
box-shadow: 0px 4.6666666667px 24px 3px aqua;
}
50% {
background: rgba(0, 255, 255, 0.4);
box-shadow: 0px 4.6666666667px 24px 3px rgba(0, 255, 255, 0.2);
}
}
@keyframes flash-3 {
0%,
100% {
background: #f70094;
box-shadow: 0px 4.6666666667px 24px 3px #f70094;
}
50% {
background: rgba(247, 0, 148, 0.4);
box-shadow: 0px 4.6666666667px 24px 3px rgba(247, 0, 148, 0.2);
}
}
código 2
Hay código en el enlace.