В этой статье объясняется, как использоватьbackground
Атрибуты серии, ловко реализующие некоторые причудливые текстовые эффекты. Благодаря этой статье вы узнаете:
- пройти через
background-size
а такжеbackground-position
Добейтесь классных эффектов подчеркивания текста - пройти через
background-size
а такжеbackground-position
так же какbackground-clip
Реализация эффекта «слово за исчезновением»
причина
Мотивом для написания этой статьи было то, что однажды меня привлекло такое название —10 Masterfully Designed Websites, в котором перечислены 10 очень креативных веб-сайтов.
один изRed Bull RacingВеб-сайт является домашней страницей, на которой представлена команда F1 Red Bull. Есть такой очень интересный эффект анимации Hover:
Эффект наведения этого текста кажется простым, но на самом деле очень сложно полагаться только на CSS, чтобы полностью его реализовать.Как сделать так, чтобы эффект постепенно применялся к частям всего текста, вместо применения всего эффекта сразу ко всему тексту.
Используйте фон для достижения эффекта подчеркивания текста
В этот момент я вспомнил в этой статье раньше -CSS оформление текста text-decoration & text-emphasis, тот, который я представилИмитация подчеркивания с фономЭффект.
Посмотрите на простой DEMO, используйтеbackground
Имитация эффекта подчеркивания текста:
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. <a>Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam</a>, molestiae laboriosam sit repellendus sed sapiente quidem quod accusantium vero.</p>
p {
width: 600px;
font-size: 24px;
color: #666;
}
a {
background: linear-gradient(90deg, #0cc, #0cc);
background-size: 100% 3px;
background-repeat: no-repeat;
background-position: 100% 100%;
color: #0cc;
}
использоватьbackground
Имитация эффекта подчеркивания текста, эффект выглядит следующим образом:
В качестве альтернативы используйтеbackground
Имитация пунктирного подчеркивания:
a {
background: linear-gradient(90deg, #0cc 50%, transparent 50%, transparent 1px);
background-size: 10px 2px;
background-repeat: repeat-x;
background-position: 100% 100%;
}
Демонстрация CodePen — используйте фон для имитации подчеркивания и пунктирного подчеркивания
Конечно, это самое основное, умное использованиеbackground
Различными свойствами мы добиваемся различных интересных эффектов.
тонкое изменениеbackground-size
а такжеbackground-position
Реализовать анимацию при наведении текста
Здесь, слегка изменивbackground-size
а такжеbackground-position
Свойства, мы можем добиться некоторого очень интересного текстового кабеля.
Сначала посмотрите на такое демо, основной код работает<p>
этикетка завернута<a>
На этикетке:
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. <a>Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam</a>, molestiae laboriosam sit repellendus sed sapiente quidem quod accusantium vero.</p>
a {
background: linear-gradient(90deg, #ff3c41, #fc0, #0ebeff);
background-size: 0 3px;
background-repeat: no-repeat;
background-position: 0 100%;
transition: 1s all;
color: #0cc;
}
a:hover {
background-size: 100% 3px;
color: #000;
}
Хотя мы установилиbackground: linear-gradient(90deg, #ff3c41, #fc0, #0ebeff)
, но изначально по умолчаниюbackground-size: 0 3px
, то есть сначала не видно подчеркивания, при наведении меняетсяbackground-size: 100% 3px
, на этот раз будет0 3px
прибыть100% 3px
Трансформация, то есть эффект растяжения с нуля.
Посмотрите на окончательный эффект:
из-за набораbackground-position
да0 100%
, если установленоbackground-position
да100% 100%
, мы можем получить обратный эффект:
// 其他都保持一致,只改变 background-position,从 0 100% 改为 100% 100%
a {
...
background-position: 100% 100%;
...
}
Взгляните на эффект, вы можете сравнить приведенную выше анимацию, чтобы увидеть, в чем заключаются конкретные различия:
CodePen Demo -- background underline animation
Хорошо, если мы используемbackground
Реализуйте два перекрывающихся символа подчеркивания, а затем используйте два приведенных выше разных символа.background-position
значение, мы можем получить более интересный эффект подчеркивания при наведении.
Схема кода CSS, обратите внимание на два подчеркивания, смоделированные фономbackground-position
Значения не совпадают:
a {
background:
linear-gradient(90deg, #0cc, #0cc),
linear-gradient(90deg, #ff3c41, #fc0, #8500d8);
background-size: 100% 3px, 0 3px;
background-repeat: no-repeat;
background-position: 100% 100%, 0 100%;
transition: 0.5s all;
color: #0cc;
}
a:hover {
background-size: 0 3px, 100% 3px;
color: #000;
}
У вас может получиться такой эффект, ведь при каждом наведении двигаются два подчёркивания:
CodePen Demo -- background underline animation
пройти черезbackground-size
а такжеbackground-position
Сотрудничатьbackground-clip
Реализовать постепенное появление текста
Большинство приведенных выше абзацев вращаются вокруг --подчеркивать.
Возвращаясь к эффекту Gif, упомянутому в начале этой статьи, можем ли мы добиться постепенного эффекта текста в фрагменте текста?
Вышеупомянутая техника используетbackground
,Такbackground
Может ли цвет фона изменить цвет текста? Ответ - да, только с помощьюbackground-clip
.
Давайте немного изменим код, чтобы реализовать использованиеbackground-clip
При реализации зависания части текста постепенно меняет цвет:
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
<a>Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam, </a>
molestiae laboriosam sit repellendus sed sapiente quidem quod accusantium vero.
</p>
p {
color: #666;
cursor: pointer;
}
a {
background: linear-gradient(90deg, #fc0, #fc0);
background-size: 0 100px;
background-repeat: no-repeat;
background-position: 0 100%;
background-clip: text;
transition: .6s all linear;
}
p:hover a {
background-size: 100% 100%;
color: transparent;
}
Посмотрите на эффект,background-clip: text
отсечение маски, мы будемbackground: linear-gradient(90deg, #fc0, #fc0)
Роль цвета фона дает текст, при использованииcolor: transparent
Пусть текст показывает значение цвета фона:
Конечно, немного исказив приведенный выше код, мы можем развить несколько различных эффектов.
Исчезнуть для всего текста - от прозрачного для появления
Первый - от прозрачного к цветному, разворачивающемуся, здесь нам просто нужно, чтобы был прозрачный цвет (следующие эффекты с помощью кнопки для запуска эффекта):
<div class="button">Button</div>
<p><a>Lorem ipsum dolor sit amet consectetur adipisicing elit. Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam, molestiae laboriosam sit repellendus sed sapiente quidem quod accusantium vero.</a></p>
a {
background: linear-gradient(90deg, #fc0, #fc0);
background-size: 0 100px;
background-repeat: no-repeat;
background-position: 0 100%;
color: transparent;
background-clip: text;
}
.button:hover ~ p a {
transition: .8s all linear;
background-size: 0 100px, 100% 100%;
}
Эффект следующий:
Затенить весь текст - от одного цвета к другому
Вы также можете изменить текст с одного цвета на другой по одному, просто добавьте еще один слойbackground-image
Градиент.
<div class="button">Button</div>
<p><a>Lorem ipsum dolor sit amet consectetur adipisicing elit. Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam, molestiae laboriosam sit repellendus sed sapiente quidem quod accusantium vero.</a></p>
a {
background:
linear-gradient(90deg, #999, #999),
linear-gradient(90deg, #fc0, #fc0);
background-size: 100% 100%, 0 100px;
background-repeat: no-repeat;
background-position: 100% 100%, 0 100%;
color: transparent;
background-clip: text;
}
.button:hover ~ p a {
transition: .8s all linear;
background-size: 0 100px, 100% 100%;
}
Здесь нужно пояснить, хотя настройкиcolor: transparent
, но по умолчанию текст по-прежнему окрашен. Цвет текста по умолчанию задается первым слоем градиентаbackground: linear-gradient(90deg, #999, #999), linear-gradient(90deg, #fc0, #fc0)
, который является этим слоем:linear-gradient(90deg, #999, #999)
.
Когда срабатывает наведение,linear-gradient(90deg, #999, #999)
Этот слой градиента постепенно исчезает, и постепенно появляется другой слой linear-gradient(90deg, #fc0, #fc0)` для достижения вышеуказанного эффекта.
CodePen -- эффект затухания текста фонового клипа
Простое моделирование эффекта карты заголовков
Здесь мы используем эту простую технику, смоделируя, какой эффект начала GIF статьи, перечисленные ниже:
Техника оригинального автора этого эффекта такова:
- относиться к каждому слову как к объекту, обернутому в специальный класс
- использовать
animation-delay
Постепенно давайте анимацию каждому слову
Здесь мы равномерно обработаем весь текст и восстановим его просто:
<div class="button">Button</div>
<p><a>Lorem ipsum dolor sit amet consectetur adipisicing elit. Mollitia nostrum placeat consequatur deserunt velit ducimus possimus commodi temporibus debitis quam, molestiae laboriosam sit repellendus sed sapiente quidem quod accusantium vero.</a></p>
/** 动画核心 background、line-height、opacity **/
a {
background:
linear-gradient(90deg, #ff5722, #ff5722),
linear-gradient(90deg, #aaa, #aaa);
background-size: 100% 100%, 0 100px;
background-repeat: no-repeat;
background-position: 100% 100%, 0 100%;
cursor: pointer;
color: transparent;
background-clip: text;
line-height: 3;
opacity: 0;
}
.button:hover ~ p a {
transition: 1.2s background .3s ease-out, .8s line-height ease-out, .6s opacity ease-in;
background-size: 0 100px, 100% 100%;
color: transparent;
line-height: 1;
opacity: 1;
}
/ ** 简单控制半透明黑色遮罩出现 **/
a::before {
content: "";
position: fixed;
background: rgba(0, 0, 0, .8);
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
transition: .3s all linear;
opacity: 0;
}
.button:hover ~ p a::before {
opacity: 1;
}
Эффект следующий:
Видно, как идет общий контроль над всем текстом, а не слово за словом, хороший эффект контроля, но плюсом является очень малое количество кода. Для некоторых простых сценариев достаточен класс карты наведения.
background-image, background-clip для достижения эффекта затухания текста
Идеально восстановить эффект титульного изображения
Конечно, использование чистого CSS для эффекта изображения в заголовке не является проблемой. Просто с этим непросто справиться единым способом.
Здесь нам нужно уточнить каждое слово и сделать дополнительную анимацию, используя псевдоэлементы для каждого слова.
Простая структура выглядит следующим образом:
<div class="button">Button</div>
<div class="g-wrap"></div>
<p>
<span data-text="Lorem">Lorem</span>
<span data-text="ipsum">ipsum</span>
<span data-text="dolor">dolor</span>
<span data-text="sit">sit</span>
<span data-text="amet">amet</span>
// ... 类似结构
</p>
Как вы можете видеть, каждое слово<span>
Пакет и добавленныйdata-text
, что удобно псевдоэлементам для получения текущего слова.
Далее стоит оживить и дать каждому<span>
добавить соответствующий инкрементныйanimation-delay
Для того, чтобы добиться разницы каждой анимации слова. Основной псевдокод выглядит следующим образом:
p {
position: relative;
width: 500px;
overflow: hidden;
}
p span {
position: relative;
display: inline-block;
opacity: 0;
transform: translateY(15px) translateZ(0);
transition-property: transform, opacity;
transition-duration: .3s, .2s;
}
.button:hover ~ p span {
opacity: 1;
color: #ddd;
transform: translateY(0) translateZ(0);
transition-duration: 1s, .2s;
}
p span:after,
p span:before {
position: absolute;
content: attr(data-text);
top: 0;
left: 0;
z-index: 1;
transform: translateZ(0);
}
p span:after {
color: #e62541;
transition-property: opacity;
transition-duration: .1s;
}
.button:hover ~ p span:after {
opacity: 0;
transition-property: opacity;
transition-duration: .4s;
}
@for $i from 1 to 21 {
p span:nth-child(#{$i}) {
transition-delay: #{$i * 0.04}s;
&::after {
transition-delay: #{$i * 0.04 + 0.2}s;
}
}
}
На самом деле сама анимация не слишком сложная, есть два основных момента:
- состояние наведения и состояние без наведения
transition-duration
отличается тем, что в процессе отмены наведения время процесса исчезновения анимации обычно меньше; - Цикл с SASS
@for $i from 1 to 21 {}
приращение для каждогоspan
и его псевдоэлементы добавляют инкрементныеtransition-delay
;
В итоге мы можем получить следующие результаты:
Полный код, можете ткнуть --Вдохновение CSS — используйте задержку анимации для достижения эффекта затухания текста
наконец
Ну вот и конец этой статьи, надеюсь она вам поможет :)
Если вы хотите получить самую интересную информацию о CSS, не пропустите мой официальный аккаунт --Интересные факты о внешнем интерфейсе iCSS😄
Другие замечательные эффекты CSS могут следовать за мнойCSS-вдохновение
Другие замечательные технические статьи по CSS собраны в моемGithub -- iCSS, продолжайте обновлять, добро пожаловать, нажмите звездочку, чтобы подписаться на коллекцию.
Если у вас есть какие-либо вопросы или предложения, вы можете общаться больше.Оригинальные статьи ограничены в написании и знаниях.Если в статье есть какие-либо неточности, пожалуйста, дайте мне знать.