CSS translateZ() — зсув до глядача й від нього
Опис
translateZ() - це функція CSS, яка використовується для зміщення елемента по осі Z (глибині) в тривимірному просторі. За допомогою цієї функції можна змінити положення елемента в третьому вимірі відносно його вихідної позиції.
Ця функція приймає один аргумент, який вказує величину зсуву по осі Z. Позитивне значення зсуває елемент вгору, а негативне - вниз. Значення можуть бути вказані в пікселях (px), відсотках (%), відносних одиницях (em, rem) або використовувати ключові слова.
Приклад використання:
Нехай у нас є наступний HTML-код:
<div class="box">Це елемент з тривимірним ефектом.</div>
Для зсуву елемента на 100 пікселів вгору в третьому вимірі, застосуємо наступний CSS:
.box {
transform: translateZ(100px);
}
Цей приклад зміщує елемент вгору відносно його вихідного положення на 100 пікселів у третьому вимірі.
Загальний опис
автор: NagarD
- Порада
-
Функція
автор: BondtranslateZ()особливо корисна при роботі з тривимірною графікою або створенні ефектів перспективи. Вона дозволяє контролювати глибину елементів і створювати захоплюючі тривимірні ефекти на сторінці. Ви можете експериментувати з різними значеннями для отримання бажаного зсуву і створення унікальних дизайнів. - Нотатка
-
Значення може впливати на відображення елемента, якщо використовується перспектива (
автор: Bondperspective) на його батьківському елементі.
Синтаксис
transform: translateZ(value);
Функція translateZ може отримувати єдине значення:
-
<length> -
Величина зсуву в пікселях/відсотках/відносних одиницях
автор: Bond
| Значення без задання: | none |
|---|
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 12 | 10 | 4 | 15 | 12 | 10 |
| Переглядач | ||||
|---|---|---|---|---|
| 3 | 18 | 10 | 3.2 |
Приклади
+ запропонувати свій приклад у пісочниці
Приклад використання translateZ() для зсуву елемента по осі Z.
HTML
<div id="description">
<p>Звичайний блок має синій колір фону та не має зсуву по осі Z.</p>
<p>Блок з використанням функції <code>translateZ()</code> має червоний колір фону та зсувається на 100 пікселів углиб тривимірного простору.</p>
</div>
<div class="container">
<div class="block"></div>
<div class="block-translateZ"></div>
</div>
CSS
#description {
font-style: italic;
text-align: center;
line-height: 1.5;
margin-bottom: 50px;
padding: 12px 16px;
background-color: #f7f7f7;
border: 1px solid #ccc;
}
.container {
display: flex;
justify-content: center;
align-items: center;
height: 200px;
background-color: #f2f2f2;
perspective: 500px;
}
.block {
width: 100px;
height: 100px;
background-color: blue;
margin: 10px;
transform: translateZ(0);
}
.block-translateZ {
width: 100px;
height: 100px;
background-color: red;
margin: 10px;
transform: translateZ(100px);
}
HTML
<div id="description">
<p>У цьому коді кожне зображення має власну змінну CSS <strong>--translate-value</strong>, яка визначає значення функції <em>translateZ()</em> для кожного зображення.</p>
<p>Просто наведіть курсор на зображення для демонстрації прикладу:</p>
</div>
<div class="container">
<img class="image" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' 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" alt="Sample image" style="--translate-value: -50px;">
<img class="image" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' 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" alt="Sample image" style="--translate-value: 0;">
<img class="image" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' 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" alt="Sample image" style="--translate-value: 30px;">
<img class="image" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100' 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" alt="Sample image" style="--translate-value: -20px;">
</div>
<div class="container">
<span class="image-caption">-50px</span>
<span class="image-caption">Без зсуву</span>
<span class="image-caption">30px</span>
<span class="image-caption">-20px</span>
</div>
CSS
#description {
font-style: italic;
text-align: center;
line-height: 1.5;
margin-bottom: 50px;
padding: 12px 16px;
background-color: #f7f7f7;
border: 1px solid #ccc;
}
.container {
display: flex;
justify-content: center;
align-items: center;
background-color: #f2f2f2;
perspective: 200px;
padding: 5px;
}
.image {
width: 100px;
height: 100px;
margin: 10px;
transition: transform 0.5s ease;
position: relative;
}
.image:hover {
transform: translateZ(var(--translate-value));
}
.image-caption {
width: 20%;
text-align: center;
font-size: 12px;
color: #888;
margin-top: 15px;
}
П'ять карток в одній сцені з perspective: 500px: від −200px углиб до +120px до глядача — розмір видно на око. Нижче — три випадки з тим самим translateZ(120px): без перспективи взагалі, за проміжною обгорткою без preserve-3d і та сама обгортка з preserve-3d, де ефект повертається.
HTML
<p class="head">perspective: 500px на спільному батькові — одна точка сходу:</p>
<div class="scene">
<div class="card z1">-200px</div>
<div class="card z2">-100px</div>
<div class="card z3">0</div>
<div class="card z4">+60px</div>
<div class="card z5">+120px</div>
</div>
<p class="head">Три випадки поспіль — усюди translateZ(120px):</p>
<div class="tests">
<figure>
<div class="plain">
<div class="card zt">без перспективи</div>
</div>
<figcaption>перспективи немає — розмір не змінився</figcaption>
</figure>
<figure>
<div class="scene small">
<div class="wrap">
<div class="card zt">крізь обгортку</div>
</div>
</div>
<figcaption>обгортка сплющила сцену — ефекту немає</figcaption>
</figure>
<figure>
<div class="scene small">
<div class="wrap keep">
<div class="card zt">preserve-3d</div>
</div>
</div>
<figcaption>transform-style: preserve-3d — ефект повернувся</figcaption>
</figure>
</div>
CSS
.head {
margin: 18px 0 8px;
color: #5a6472;
font-size: .9em;
}
.scene {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
gap: 26px;
height: 170px;
padding: 10px 30px;
perspective: 500px;
background: #f6f9ff;
border: 1px solid #b9c6d8;
}
.scene.small {
justify-content: center;
height: 150px;
}
.plain {
display: flex;
align-items: center;
justify-content: center;
height: 150px;
padding: 10px;
background: #f6f9ff;
border: 1px solid #b9c6d8;
}
.card {
display: flex;
align-items: center;
justify-content: center;
width: 74px;
height: 50px;
background: #2f6fd0;
color: #fff;
font: 600 11px/1.2 ui-monospace, monospace;
text-align: center;
}
.z1 { transform: translateZ(-200px); }
.z2 { transform: translateZ(-100px); }
.z3 { transform: translateZ(0); }
.z4 { transform: translateZ(60px); }
.z5 { transform: translateZ(120px); }
.zt { transform: translateZ(120px); }
.tests {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.tests figure {
margin: 0;
width: 230px;
}
.tests figcaption {
margin-top: 6px;
color: #5a6472;
font: 12px/1.35 ui-monospace, monospace;
}
.wrap {
padding: 4px;
border: 1px dashed #d64545;
}
.keep {
transform-style: preserve-3d;
border-color: #3a9a4f;
}
Коментарі
Коментарів ще немає — будьте першим!