Хорошо, поэтому использование box-shadow
кажется очень сложным способом сделать это, и его трудно манипулировать.
Если вы собираетесь использовать псевдокласс, просто создайте его с цветом фона и переместите его. Пример # 1 .
Если вам не нужен псевдокласс, анимировать фон, возможно, проще, поэтому вы можете сделать это с градиентом Пример # 2 , ноэто иногда может иметь размытый край.Таким образом, другой вариант - использовать изображение (закодированное и встроенное в base64, чтобы избежать каких-либо дополнительных файлов) Пример # 3 .
Наконец, приведенные выше решения требуют использования текста того же цвета, что ифон.НО есть свойство CSS, которое создано для этого: clip-path
.В качестве бонуса он работает и для встроенных элементов ... Примеры 4 и 5
body {
padding: 30px;
background-color: #333;
color: #fff;
font-family: Helvetica, Arial, Sans-Serif;
}
.reveal {
margin-bottom: 10px;
padding: 10px;
text-align: center;
width: 400px;
border: 1px solid #ddd;
color: #333;
}
.pseudo {
overflow: hidden;
position: relative;
}
.pseudo:before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ddd;
z-index: -1;
-webkit-animation: pseudo 10s infinite ease-in-out;
animation: pseudo 10s infinite ease-in-out;
}
@-webkit-keyframes pseudo {
0% {
-webkit-transform: translatex(-100%);
transform: translatex(-100%);
}
50% {
-webkit-transform: translatex(100%);
transform: translatex(100%);
}
100% {
-webkit-transform: translatex(-100%);
transform: translatex(-100%);
}
}
@keyframes pseudo {
0% {
-webkit-transform: translatex(-100%);
transform: translatex(-100%);
}
50% {
-webkit-transform: translatex(100%);
transform: translatex(100%);
}
100% {
-webkit-transform: translatex(-100%);
transform: translatex(-100%);
}
}
.background {
background-image: url("data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAC1JREFUOBFjvHv37n8GKgImKpoFNmrUQMpDdDQMR8OQjBAYTTZkBBqalhEYhgAuSwO+G+SAowAAAABJRU5ErkJggg==");
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: left top;
-webkit-animation: background 5s alternate infinite ease-in-out;
animation: background 5s alternate infinite ease-in-out;
}
@-webkit-keyframes background {
0% {
background-size: 0% 100%;
}
50% {
background-size: 100% 100%;
background-position: left top;
}
51% {
background-size: 100% 100%;
background-position: right top;
}
100% {
background-size: 0% 100%;
background-position: right top;
}
}
@keyframes background {
0% {
background-size: 0% 100%;
}
50% {
background-size: 100% 100%;
background-position: left top;
}
51% {
background-size: 100% 100%;
background-position: right top;
}
100% {
background-size: 0% 100%;
background-position: right top;
}
}
.gradient {
background: linear-gradient(90deg, #dddddd 0%, #dddddd 50%, rgba(221, 221, 221, 0) 50.01%, rgba(221, 221, 221, 0) 100%);
background-size: 200% 100%;
-webkit-animation: gradient 5s alternate infinite ease-in-out;
animation: gradient 5s alternate infinite ease-in-out;
}
@-webkit-keyframes gradient {
0% {
background-position: 100% 0%;
}
100% {
background-position: -100% 0%;
}
}
@keyframes gradient {
0% {
background-position: 100% 0%;
}
100% {
background-position: -100% 0%;
}
}
.clip {
color: #4394ED;
background: #ddd;
-webkit-clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
-webkit-animation: clip 5s alternate infinite ease-in-out;
animation: clip 5s alternate infinite ease-in-out;
}
@-webkit-keyframes clip {
0% {
-webkit-clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
}
50% {
-webkit-clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}
100% {
-webkit-clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
}
}
@keyframes clip {
0% {
-webkit-clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
}
50% {
-webkit-clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}
100% {
-webkit-clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
}
}
<h2>Text Reveal</h2>
<div class="reveal pseudo">Reveal Text (Pseudo Class)</div>
<div class="reveal gradient">Reveal Text (gradient)</div>
<div class="reveal background">Reveal Text (background-image)</div>
<div class="reveal clip">Reveal Text (clip-path)</div>
<span class="clip">Works on inline elements too...</span>