cross-fade() в CSS — змішування двох зображень у фоні
Опис
автор: Bond
Загальний опис
автор: NagarD
- Порада
-
Використовуйте зображення зі схожими розмірами та відносно однаковою пропорцією, щоб отримати кращий ефект перехресного змішування.
автор: Bond - Порада
-
Експериментуйте з різними значеннями
автор: Bondpercentage, щоб контролювати ступінь перехресного змішування зображень. - Порада
-
Переконайтеся, що зображення мають прозорий фон або використовуйте прозорість альфа-каналу для досягнення кращих результатів.
автор: Bond - Нотатка
-
автор: Bondcross-fade()- це корисний інструмент для створення анімаційних переходів між зображеннями, що додає веб-сайту вишуканість та привабливість. Цей метод дозволяє вам підкреслити важливі моменти, розповісти історію або виділити вміст на веб-сторінці.
Синтаксис
cross-fade( <image> , <image> [, <percentage> ]);
Функція cross-fade може отримувати 2 значень:
-
<image> -
Зображення, яке буде перехресно змішане (cross-faded). Вказується за допомогою URL-адреси зображення.
автор: Bond -
<percentage> -
Опціональне значення від
автор: Bond0%до100%, що вказує на прозорість перехресного змішування зображень. За замовчуванням -100%(повна видимість першого зображення).
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 17* | — | 10 | 15* | 79* | — |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4* | 18* | — | 9.3 |
Приклади
+ запропонувати свій приклад у пісочниці
HTML
<div id="description">
<h2>Приклад 1: зміна елемента за допомогою cross-fade()</h2>
<p>Наведіть курсор на елемент, щоб побачити зміну.</p>
</div>
<div id="result">
<div class="image-container">
<div class="image crossfade"></div>
</div>
</div>
CSS
#description {
background-color: #f2f2f2;
padding: 20px;
font-family: Arial, sans-serif;
}
#result {
display: flex;
justify-content: center;
align-items: center;
height: 400px;
}
.image-container {
position: relative;
}
.image {
width: 300px;
height: 300px;
background-size: cover;
background-position: center;
}
.crossfade {
background-image: -webkit-cross-fade(url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23264653'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%232a9d8f'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23e9c46a'/%3E%3C/svg%3E"), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='250' height='250' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%238a4b0f'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%23c96f1e'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23f4a259'/%3E%3C/svg%3E"), 50%);
background-image: cross-fade(url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23264653'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%232a9d8f'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23e9c46a'/%3E%3C/svg%3E"), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='250' height='250' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%238a4b0f'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%23c96f1e'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23f4a259'/%3E%3C/svg%3E"), 50%);
transition: background-image 0.3s ease;
}
.crossfade:hover {
background-image: -webkit-cross-fade(url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23264653'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%232a9d8f'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23e9c46a'/%3E%3C/svg%3E"), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='250' height='250' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%238a4b0f'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%23c96f1e'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23f4a259'/%3E%3C/svg%3E"), 0%);
background-image: cross-fade(url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23264653'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%232a9d8f'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23e9c46a'/%3E%3C/svg%3E"), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='250' height='250' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%238a4b0f'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%23c96f1e'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23f4a259'/%3E%3C/svg%3E"), 0%);
}
HTML
<div id="description">
<h2>Приклад 2: елементи з різними фоновими зображеннями</h2>
<p>Один елемент використовує функцію cross-fade() для зміни фонового зображення.</p>
</div>
<div id="result">
<div class="image-container">
<div class="image"></div>
<div class="image crossfade"></div>
</div>
</div>
CSS
#description {
background-color: #f2f2f2;
padding: 20px;
font-family: Arial, sans-serif;
}
#result {
display: flex;
justify-content: center;
align-items: center;
height: 400px;
}
.image-container {
display: flex;
}
.image {
width: 300px;
height: 300px;
margin-right: 20px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23264653'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%232a9d8f'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23e9c46a'/%3E%3C/svg%3E");
}
.crossfade {
background-image: -webkit-cross-fade(url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='320' height='320' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%238a4b0f'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%23c96f1e'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23f4a259'/%3E%3C/svg%3E"), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23264653'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%232a9d8f'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23e9c46a'/%3E%3C/svg%3E"), 75%);
background-image: cross-fade(url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='320' height='320' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%238a4b0f'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%23c96f1e'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23f4a259'/%3E%3C/svg%3E"), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300' viewBox='0 0 40 40' preserveAspectRatio='none'%3E%3Crect width='40' height='40' fill='%23264653'/%3E%3Cpath d='M0 40 12 18 22 30 30 22 40 40Z' fill='%232a9d8f'/%3E%3Ccircle cx='30' cy='9' r='5' fill='%23e9c46a'/%3E%3C/svg%3E"), 75%);
}
Перша коробка — cross-fade() у новому записі, друга — у застарілому, третя — з префіксом -webkit-: у Firefox усі три порожні, бо оголошення відкинуто. Четверта показує запасний варіант каскадом: простий фон рядком вище лишається на місці. Далі — той самий ефект, зроблений двома шарами з прозорістю; наведіть на нього, щоб частка змінилась плавно.
HTML
<div class="grid">
<figure>
<div class="box cf-new"></div>
<figcaption>cross-fade(A 50%, B) — новий запис</figcaption>
</figure>
<figure>
<div class="box cf-old"></div>
<figcaption>cross-fade(A, B, 50%) — застарілий запис</figcaption>
</figure>
<figure>
<div class="box cf-webkit"></div>
<figcaption>-webkit-cross-fade(A, B, 50%) — префіксний</figcaption>
</figure>
<figure>
<div class="box cf-fallback"></div>
<figcaption>запасний фон рядком вище — коробка не порожня</figcaption>
</figure>
</div>
<p class="head">А ось робоча заміна: два шари, у верхнього opacity. Наведіть —
частка змінюється плавно, чого cross-fade не вміє:</p>
<div class="grid">
<figure>
<div class="stack o0"><span class="top"></span></div>
<figcaption>0% — видно лише нижній шар</figcaption>
</figure>
<figure>
<div class="stack o50"><span class="top"></span></div>
<figcaption>50% — рівна суміш</figcaption>
</figure>
<figure>
<div class="stack o100"><span class="top"></span></div>
<figcaption>100% — видно лише верхній шар</figcaption>
</figure>
<figure>
<div class="stack live"><span class="top"></span></div>
<figcaption>наведіть: перехід від 0% до 100%</figcaption>
</figure>
</div>
CSS
.head {
margin: 20px 0 8px;
max-width: 560px;
color: #5a6472;
font-size: .9em;
}
.grid {
display: flex;
flex-wrap: wrap;
gap: 14px;
}
figure {
margin: 0;
width: 160px;
}
figcaption {
margin-top: 6px;
color: #5a6472;
font: 12px/1.35 ui-monospace, monospace;
}
.box,
.stack {
position: relative;
width: 160px;
height: 110px;
border: 1px dashed #b9c6d8;
}
.cf-new {
background-image: cross-fade(
linear-gradient(135deg, #c0392b, #f2b134) 50%,
linear-gradient(135deg, #2f6fd0, #3a9a4f));
}
.cf-old {
background-image: cross-fade(
linear-gradient(135deg, #c0392b, #f2b134),
linear-gradient(135deg, #2f6fd0, #3a9a4f), 50%);
}
.cf-webkit {
background-image: -webkit-cross-fade(
linear-gradient(135deg, #c0392b, #f2b134),
linear-gradient(135deg, #2f6fd0, #3a9a4f), 50%);
}
.cf-fallback {
background-image: linear-gradient(135deg, #c0392b, #f2b134);
background-image: cross-fade(
linear-gradient(135deg, #c0392b, #f2b134) 50%,
linear-gradient(135deg, #2f6fd0, #3a9a4f));
}
.stack {
background-image: linear-gradient(135deg, #c0392b, #f2b134);
border-style: solid;
}
.top {
position: absolute;
inset: 0;
background-image: linear-gradient(135deg, #2f6fd0, #3a9a4f);
}
.o0 .top { opacity: 0; }
.o50 .top { opacity: .5; }
.o100 .top { opacity: 1; }
.live .top {
opacity: 0;
transition: opacity .6s ease;
}
.live:hover .top {
opacity: 1;
}
Коментарі
Коментарів ще немає — будьте першим!