CSS-функція sign() — знак числа: -1, 0 або 1 у calc()


Опис

Експериментальна технологія: Перед використанням уважно перевірте таблицю сумісності з браузерами.

Функція sign() в CSS відіграє ключову роль у роботі з числовими значеннями. Вона дозволяє визначити знак числа, повертаючи -1, 0 або 1, залежно від характеристики вхідного числа. Ця функція може стати надзвичайно корисною в ситуаціях, де необхідно швидко визначити напрямок анімації або вплинути на інші числові параметри стилізації.

sign() вивчає вхідне число і робить наступне:

  • Якщо вхідне число від'ємне, функція повертає -1.
  • Якщо число дорівнює нулю, функція повертає 0.
  • Якщо число є додатнім, функція повертає 1.

Це робить функцію sign() ідеальним інструментом для визначення напрямку руху або позиціонування в залежності від значення числа.

Приклад:

div {
  background-position: sign(10%);
}

У цьому прикладі функція sign(10%) використовується властивістю background-position. Позитивні відсотки можуть вирішуватися як від'ємна довжина, а від'ємні відсотки - як додатна довжина, якщо зображення фону більше за область фону. Таким чином, функція sign(10%) може повернути 1 або -1, залежно від того, як розподіляється відсоток! (Або навіть 0, якщо він розподіляється на основі нульової довжини.) Це демонструє потужність і гнучкість sign() в обробці числових значень у CSS.

автор: Bond

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

автор: NagarD

Порада

Функція sign() може бути корисною при виконанні математичних обчислень або в анімаціях, де вам потрібно враховувати знак числа.

автор: Bond

Синтаксис

sign(<value>);

Функція sign може отримувати єдине значення:

<value>

Приймає числове значення. Значення можуе бути додатнім, від'ємним чисвлом або нулем.

автор: Bond

Значення без задання: none

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
138 118 15.4 122 138 —
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
138 138 118 15.4

Приклади

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

Перша група — один вираз translate: calc(sign(--v) * 90px) на трьох доріжках: знак змінної сам вирішує, куди поїде повзунок, а нуль лишає його по центру. Друга показує, що sign() бере не лише числа — довжини, кути й em теж. Третя — пара з abs(): модуль дає довжину смуги, знак — бік. Остання — пастки: width: sign(-5) відкинуто, а opacity: sign(-5) цілком дійсне й ховає плитку зовсім.

HTML

<p class="head">Один вираз translate: calc(sign(--v) * 90px) — знак сам вирішує
    напрямок, а нуль лишає повзунок по центру:</p>
<div class="track t1"><span class="knob"></span><em>--v: -5 → sign = -1</em></div>
<div class="track t2"><span class="knob"></span><em>--v: 0 → sign = 0</em></div>
<div class="track t3"><span class="knob"></span><em>--v: 5 → sign = 1</em></div>

<p class="head">Аргументом може бути не лише число — довжини, кути й em теж:</p>
<div class="track t4"><span class="knob"></span><em>sign(-3px) = -1</em></div>
<div class="track t5"><span class="knob"></span><em>sign(-45deg) = -1</em></div>
<div class="track t6"><span class="knob"></span><em>sign(2em) = 1</em></div>

<p class="head">Пара з abs(): модуль дає ДОВЖИНУ смуги, знак — БІК.
    Обидві смуги зроблені одним і тим самим правилом:</p>
<div class="axis">
    <span class="seg g1">--d: -70</span>
    <span class="seg g2">--d: 120</span>
</div>

<p class="head">⚠️ sign() — це число: у ширині воно невалідне, зате в opacity
    цілком дійсне, і мінус одиниця затискається до нуля:</p>
<div class="row">
    <span class="tile w1">width: sign(-5) — відкинуто, лишилось 190px</span>
    <span class="tile o1">opacity: sign(5) → 1</span>
    <span class="tile o2">opacity: sign(-5) → 0</span>
    <span class="tile o3">opacity: calc(sign(-5) / -1) → 1</span>
</div>

CSS

.head {
    margin: 20px 0 8px;
    max-width: 620px;
    color: #5a6472;
    font-size: .9em;
}

.track {
    position: relative;
    display: flex;
    align-items: flex-start;
    width: 320px;
    height: 56px;
    padding-top: 6px;
    margin-bottom: 6px;
    background: #f6f9ff;
    border: 1px solid #b9c6d8;
}

.track::before {
    content: "";
    position: absolute;
    left: 159px;
    top: 0;
    width: 2px;
    height: 100%;
    background: #d7dee8;
}

.track em {
    position: absolute;
    left: 8px;
    bottom: 4px;
    color: #5a6472;
    font: 11px/1 ui-monospace, monospace;
    font-style: normal;
}

.knob {
    width: 22px;
    height: 22px;
    margin-left: 149px;
    background: #2f6fd0;
    border-radius: 50%;
    translate: calc(sign(var(--v)) * 90px);
}

.t1 { --v: -5; }
.t2 { --v: 0; }
.t3 { --v: 5; }
.t4 { --v: -3px; }
.t5 { --v: -45deg; }
.t6 { --v: 2em; }

.axis {
    position: relative;
    width: 400px;
    padding: 10px 0;
    background: #f6f9ff;
    border: 1px solid #b9c6d8;
}

.seg {
    display: block;
    height: 26px;
    margin-bottom: 6px;
    margin-left: 200px;
    padding-left: 6px;
    background: #2f6fd0;
    color: #fff;
    font: 600 11px/26px ui-monospace, monospace;
    white-space: nowrap;
    width: calc(abs(var(--d)) * 1px);
    translate: calc(sign(var(--d)) * 0.5 * abs(var(--d)) * 1px - 50%);
}

.g1 { --d: -70; }
.g2 { --d: 120; background: #3a9a4f; }

.row {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: flex-start;
}

.tile {
    display: flex;
    align-items: center;
    width: 190px;
    height: 64px;
    padding: 6px;
    background: #2f6fd0;
    color: #fff;
    font: 600 11px/1.3 ui-monospace, monospace;
}

.w1 { width: sign(-5); }
.o1 { opacity: sign(5); }
.o2 { opacity: sign(-5); }
.o3 { opacity: calc(sign(-5) / -1); }
автор: NagarD

Коментарі

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

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

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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