CSS transform-origin — точка відліку перетворення


Властивість transform-origin змінює положення точки відносно якої елемент трансформується. Для 2D перетворення дозволено змінювати Х та У вісі. Для 3D перетворення дозволено змінювати Z-вісь елемента. Іншими словами, ця властивість дозволяє нам визначати базову позицію для траснформації елементу.

Відлік координат ведеться від лівого верхнього кута елемента, за замовчуванням точка трансформації знаходиться в його центрі. При використанні відсотків вони беруться від розмірів елемента.

автор: Svitlana

Загальний опис

автор: NagarD

Нотатка

Ця властивість використовується разом з властивістю transform.

автор: Svitlana
Нотатка

Зверніть увагу, що ця технологія експериментальна, й може не працювати в деяких браузерах. Синтаксис і поведінка transform-origin може змінюватися у майбутньому.

автор: Svitlana

Синтаксис

transform-origin: x-axis y-axis z-axis|initial|inherit;

Властивість transform-origin може отримувати 5 значень:

x-axis

Зміщення по горизонталі (X вісь).

Дозволено використовувати такі значення:

  • left
  • center
  • right
  • length
  • %
автор: Svitlana

y-axis

Зміщення по вертикалі (Y вісь).

Дозволено використовувати такі значення:

  • left
  • center
  • right
  • length
  • %
автор: Svitlana

z-axis

Зміщення по Z вісі. Дозволено використовувати будь-які одиниці вимірювання довжини прийняті в CSS.

автор: Svitlana

initial

Встановлює властивість у значення без задання

автор: Svitlana

inherit

Вказує на спадковість властивості від свого батьківського елемента.

автор: Svitlana

Значення без задання: 50% 50% 0
Наслідує: Ні
Анімується: Так
JavaScript синтаксис: object.style.transformOrigin="0 0"

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
36 16 9 23 12 10
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
37 36 16 9

Приклади

+ запропонувати свій приклад у пісочниці

Інструмент

Складає перетворення й показує, як порядок функцій міняє результат.

Генератор transform — окремою сторінкою, з поясненням пасток.

Обидва квадрати обертаються однаково, але лівий — навколо власного центру, а правий — навколо точки 20% 40%: тому він «ходить» по колу.

HTML

<div class="wrap"><div class="box center">центр</div></div>
<div class="wrap"><div class="box corner">20% 40%</div></div>

CSS

.wrap {
    display: inline-block;
    margin: 32px;
}

.box {
    width: 90px;
    height: 90px;
    display: grid;
    place-items: center;
    background: #0172ad;
    color: #fff;
    animation: turn 3s linear infinite;
}

.center { transform-origin: center; }
.corner { transform-origin: 20% 40%; }

@keyframes turn {
    to { transform: rotate(360deg); }
}
автор: Svitlana

Той самий scale(1.5) із трьох різних точок відліку. Пунктир показує, де квадрат був до масштабування: від центру він росте на всі боки, від left top — лише вправо й донизу, від right bottom — навпаки.

HTML

<figure>
    <div class="slot"><div class="box center">1</div></div>
    <figcaption>center — без задання</figcaption>
</figure>

<figure>
    <div class="slot"><div class="box tl">2</div></div>
    <figcaption>left top</figcaption>
</figure>

<figure>
    <div class="slot"><div class="box br">3</div></div>
    <figcaption>right bottom</figcaption>
</figure>

CSS

figure {
    display: inline-block;
    margin: 26px 34px 26px 0;
    font: 12px monospace;
    text-align: center;
    vertical-align: top;
}

.slot {
    width: 72px;
    height: 72px;
    margin: 0 auto 26px;
    border: 1px dashed #999;
}

.box {
    display: grid;
    place-items: center;
    width: 72px;
    height: 72px;
    background: #0172ad;
    color: #fff;
    transform: scale(1.5);
}

.center { transform-origin: center; }
.tl     { transform-origin: left top; }
.br     { transform-origin: right bottom; }
автор: NagarD

Динамічний приклад впливу на елемент різних значень властивості

HTML

<p>Вибери потрібне значення для <code>transform-origin</code>(у відсотках):</p>

<label>X: <input type="number" value="0" step="10" id="field"></input></label>
<br><br>
<label>Y: <input type="number" value="0" step="10" id="field2"></input></label>

<div id="block">
  <code>transform: rotate(60deg);</code>
</div>

CSS

body {
	padding: 36px;
  text-align: center;
  line-height: 1.45;
  font-size: 17px;
  font-family: sans-serif;
}

#field,
#field2{
  padding: 8px;
}

#block {
  width: 175px;
  padding: 30px;
  text-align: center;
  background: gold;
  margin: 106px auto 0 auto;
  transform: rotate(20deg);
}

JS

var block = document.getElementById('block');
var field = document.getElementById('field');
var field2 = document.getElementById('field2');

field.onchange = field2.onchange = function change() {
  var newVal = getNewValue();
  block.style.transformOrigin = newVal[0] + '% ' + newVal[1] + '%';
};

function getNewValue() {
  var result = [];
  result[0] = field.value;
  result[1] = field2.value;
  return result;
}
//# sourceURL=pen.js
автор: Svitlana

Простий приклад роботи властивості

HTML

<div class="text">На рисунку можна бачити два однакових блока, тільки для другого задана властивість <strong>transform-origin: top left;</strong> разом з властивістю <strong>transform: rotate(16deg);</strong></div>
<div class="rotate">
  <pre><code>transform: rotate(16deg); 
<strong>transform-origin: top left;</strong></code></pre>
</div>

CSS

.text{
  background: none;
  width: 100%;
}
div {
  width: 310px;
  padding: 30px 20px 30px 46px;
  background: gold;
  font-family: monospace;
  font-size: 17px;
}

.rotate {
  margin: 40px;
  margin: auto;
  transform: rotate(16deg); 
  transform-origin: top left;
}
автор: Svitlana

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід