Функция Less и SCSS calc

Я обычно использую SCSS, так как это тренд и тот, который я предпочитаю. Я использовал Меньше для сравнения обоих. Я обнаружил, что при использовании Less происходит что-то действительно странное.

Когда я использую функцию вычисление с SCSS, например, как height: calc(100vh - 64px), она преобразует 100vh в px, затем вычитает два числа и преобразует их обратно в блок vh, что и нужно.

С другой стороны, делая то же самое, но с Less, он немедленно преобразует число после знака минус в ту же единицу, что и предыдущий, а затем вычитает число, что очень странно. Поскольку в предыдущем примере вычисленная высота; используя меньше; будет 36vh, то есть calc(100vh - 64vh), что не так.

Кто-нибудь знает, как решить эту проблему при использовании Less?

Less v3 вообще не касается операторов calc. Это функция браузера, которую автономные компиляторы просто не могут оценить, поскольку используемые там значения могут быть неизвестны во время компиляции. Например. «SCSS преобразует 100vh в px» - как SCSS может узнать, что будет 1vh в пикселях перед, если вы даже примените скомпилированный CSS к любой странице (т.е. высота области просмотра в основном неизвестна)? Если вы используете Less v2 или ниже, см. stackoverflow.com/questions/11972084/….

seven-phases-max 13.06.2018 21:58

@ seven-phase-max Моя трассировка к calc привела меня к этому моменту. Если нет, то как рассчитывается? Я хотел бы знать, если я ошибаюсь

Tes3awy 13.06.2018 22:01

@ seven-phase-max OP просто сбит с толку из-за разницы между тем, что делает SCSS, и тем, что делает браузер.

Heretic Monkey 13.06.2018 22:01

@ seven-phase-max Я искал аналогичный ответ на вопрос, но не нашел. Большое спасибо за ссылку (Y).

Tes3awy 13.06.2018 22:06
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
4
309
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня была такая же проблема, когда я перешел с SASS на Less. Вам нужно окружить ваш calc() цитатами и ~ перед ним. Тогда он правильно рассчитает. Это то, что называется Меньше языкового бегства.

Меньше:

.test-div {
  width: ~"calc(100vh + 60vh)";
}

Большое спасибо. Но у меня другой вопрос, это ошибка или так используется LESS?

Tes3awy 13.06.2018 21:56

Это не ошибка, это сделано намеренно. Он называется Меньше языкового бегства.

Hunter Turner 13.06.2018 21:57

Другие вопросы по теме