sass-site/source/documentation/at-rules/control/while.liquid

56 lines
1.5 KiB
Plaintext
Raw Normal View History

---
title: "@while"
introduction: >
The `@while` rule, written `@while <expression> { ... }`, evaluates its block
2023-05-30 22:27:01 +02:00
if its [expression](/documentation/syntax/structure#expressions) returns
`true`. Then, if its expression still returns `true`, it evaluates its block
again. This continues until the expression finally returns `false`.
---
{% codeExample 'while' %}
2023-05-30 23:23:34 +02:00
@use "sass:math";
/// Divides `$value` by `$ratio` until it's below `$base`.
@function scale-below($value, $base, $ratio: 1.618) {
@while $value > $base {
$value: math.div($value, $ratio);
}
@return $value;
}
$normal-font-size: 16px;
sup {
font-size: scale-below(20px, 16px);
}
===
@use "sass:math"
/// Divides `$value` by `$ratio` until it's below `$base`.
@function scale-below($value, $base, $ratio: 1.618)
@while $value > $base
$value: math.div($value, $ratio)
@return $value
2023-05-30 23:23:34 +02:00
$normal-font-size: 16px
sup
font-size: scale-below(20px, 16px)
===
sup {
font-size: 12.36094px;
}
{% endcodeExample %}
{% headsUp %}
2023-05-30 23:23:34 +02:00
Although `@while` is necessary for a few particularly complex stylesheets,
you're usually better of using either [`@each`][] or [`@for`][] if either of
them will work. They're clearer for the reader, and often faster to compile as
well.
2023-05-30 23:23:34 +02:00
[`@each`]: /documentation/at-rules/control/each
[`@for`]: /documentation/at-rules/control/for
{% endheadsUp %}
{% render 'documentation/snippets/truthiness-and-falsiness' %}