Я хочу использовать чистый css для реализации эффекта волновой анимации в тексте, высоту волны можно контролировать, а изображение волны не используется.
body{
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
span {
font-size: 10em;
-webkit-text-fill-color: rgba(0, 0, 0, .1);
position: relative;
}
span::before{
content: '';
position: absolute;
width: 100%;
height: 100px;
left: 0;
background-color: blueviolet;
z-index: -1
}
span::after{
content: '';
position: absolute;
width: 100%;
height: 100px;
left: 0;
background-color: lightpink;
z-index: -2;
top: 100px;
}
<span>FILL</span>
Посмотрите на bakground-clip и анимированные фоновые градиенты.
Сначала я начну с создания волновой анимации с использованием фона, как показано ниже:
.box {
background:
radial-gradient(100% 58% at top ,red 99%,green) calc(0*100%/3) 0,
radial-gradient(100% 58% at bottom,green 99%,red ) calc(3*100%/3) 0,
radial-gradient(100% 58% at top ,red 99%,green) calc(6*100%/3) 0,
radial-gradient(100% 58% at bottom,green 99%,red ) calc(9*100%/3) 0;
background-size:50% 100%;
background-repeat:no-repeat;
height:200px;
width:300px;
animation: move 1s infinite linear;
}
@keyframes move {
to {
background-position:
calc(-6*100%/3) 0,
calc(-3*100%/3) 0,
calc(0*100%/3) 0,
calc(3*100%/3) 0;
}
}
<div class = "box"></div>
Затем я добавлю текст и раскрашу его этим фоном:
.box {
background:
radial-gradient(100% 58% at top ,red 99%,green) calc(0*100%/3) 0,
radial-gradient(100% 58% at bottom,green 99%,red ) calc(3*100%/3) 0,
radial-gradient(100% 58% at top ,red 99%,green) calc(6*100%/3) 0,
radial-gradient(100% 58% at bottom,green 99%,red ) calc(9*100%/3) 0;
background-size:50% 100%;
background-repeat:no-repeat;
-webkit-background-clip:text;
color:transparent;
background-clip:text;
display:inline-block;
padding:20px;
font-size:100px;
font-family:arial;
font-weight:bold;
animation: move 1s infinite linear;
}
@keyframes move {
to {
background-position:
calc(-6*100%/3) 0,
calc(-3*100%/3) 0,
calc(0*100%/3) 0,
calc(3*100%/3) 0;
}
}
<div class = "box"> FILL</div>
Связанный вопрос, чтобы понять логику фоновых значений: Использование процентных значений с фоновым положением на линейном градиенте
Чтобы контролировать высоту волны, мы настраиваем background-size:
.box {
background:
radial-gradient(100% 58% at top ,red 99%,green) calc(0*100%/3) 0,
radial-gradient(100% 58% at bottom,green 99%,red ) calc(3*100%/3) 0,
radial-gradient(100% 58% at top ,red 99%,green) calc(6*100%/3) 0,
radial-gradient(100% 58% at bottom,green 99%,red ) calc(9*100%/3) 0
green;
background-size:50% 200%;
background-repeat:no-repeat;
-webkit-background-clip:text;
color:transparent;
background-clip:text;
display:inline-block;
padding:20px;
font-size:100px;
font-family:arial;
font-weight:bold;
animation:
move 1s infinite linear,
up 5s infinite linear alternate;
}
@keyframes move {
to {
background-position:
calc(-6*100%/3) 0,
calc(-3*100%/3) 0,
calc(0*100%/3) 0,
calc(3*100%/3) 0;
}
}
@keyframes up {
to {
background-size:50% 20%;
}
}
<div class = "box"> FILL</div>
Также как ниже:
.box {
background:
radial-gradient(100% 58% at top ,transparent 99%,green) calc(0*100%/3) 0/50.1% 180%,
radial-gradient(100% 58% at bottom,green 99%,transparent ) calc(3*100%/3) 0/50.1% 180%,
radial-gradient(100% 58% at top ,transparent 99%,green) calc(6*100%/3) 0/50.1% 180%,
radial-gradient(100% 58% at bottom,green 99%,transparent ) calc(9*100%/3) 0/50.1% 180%,
linear-gradient(green,green) bottom/100% 0%;
background-repeat:no-repeat;
-webkit-background-clip:text;
background-clip:text;
color:transparent;
display:inline-block;
padding:20px;
font-size:100px;
font-family:arial;
font-weight:bold;
animation:
move 1s infinite linear,
up 5s infinite linear alternate;
}
@keyframes move {
to {
background-position:
calc(-6*100%/3) 0,
calc(-3*100%/3) 0,
calc(0*100%/3) 0,
calc(3*100%/3) 0,
bottom;
}
}
@keyframes up {
to {
background-size:
50.1% 20%,
50.1% 20%,
50.1% 20%,
50.1% 20%,
100% 80%;
}
}
body {
background:#f2f2f2;
}
<div class = "box"> FILL</div>
Если последний radial-gradient добавляет цвет, текст будет иметь тень. Нет цвета, текст будет скрыт это тест
@Purpleawn Я не понимаю твоего комментария
Этот метод сделает шрифт зеленой рамкой. Можно убрать эту границу?
@Purpleawn удалите последний цвет и измените размер фона с 50% на 50,1%.
После удаления последнего цвета граница исчезла. Но изменение значения background-size-y сделает текст обрезанным.
@Purpleawn background-size:50.1% Y вы меняете первое значение
Давайте продолжим обсуждение в чате.
@Purpleawn проверьте обновление, добавил еще один фрагмент
Я не пытаюсь ответить на вопрос здесь, я надеюсь, что это сделает кто-то с лучшими знаниями. но до тех пор могу предложить вам проверить это stackoverflow.com/questions/17202548/wavy-shape-with-css и попробовать анимировать и замаскировать его.