что делает команда calc
CSS: полное руководство по функции calc()
Автор статьи, перевод которой мы сегодня публикуем, хочет рассказать обо всём, что стоит знать об этой весьма полезной функции.
Функция calc() и значения CSS-свойств
Единственное место, где можно использовать функцию calc() — это значения CSS-свойств. Взгляните на следующие примеры, в которых мы, используя эту функцию, задаём значения различных свойств.
Функцию calc() можно применять и для установки любой отдельной части свойства:
Эта функция может даже быть частью другой функции, которая отвечает за формирование части некоего свойства! Например, здесь calc() используется для настройки позиций изменения цвета градиента:
Функция calc() — это средство для работы с числовыми свойствами
Обратите внимание на то, что во всех вышеприведённых примерах мы используем функцию calc() при работе с числовыми свойствами. Мы ещё поговорим о некоторых особенностях работы с числовыми свойствами (они связаны с тем, что иногда не требуется использование единиц измерения). Сейчас же отметим, что данная функция предназначена для выполнения операций с числами, а не со строками или с чем-то ещё.
Эта функция умеет работать и с числами, применяемыми без указания единиц измерения:
Её можно использовать и для вычисления углов:
Данную функцию можно применять и в тех случаях, когда в передаваемом ей выражении никаких вычислений не выполняется:
Функцию calc() нельзя применять в медиа-запросах
Хотя эта функция предназначена для установки значений CSS-свойств, она, к сожалению, не работает в медиа-запросах:
Если когда-то подобные конструкции окажутся работоспособными — это будет очень хорошо, так как это позволит создавать взаимоисключающие медиа-запросы, выглядящие весьма логично (например — такие, которые показаны выше).
Использование разных единиц измерения в одном выражении
Это выражение читается так: «Ширина равна ширине элемента, из которой вычитается 20 пикселей».
Вот ещё пара примеров использования значений, выраженных в разных единицах измерения:
Эти выражения, вероятно, можно подвергнуть препроцессингу, так как в них смешаны значения, единицы измерения которых не связаны с чем-либо, определяемым во время работы страницы в браузере.
Сравнение calc() с вычислениями, обрабатываемыми препроцессорами
Здесь могут производиться вычисления с указанием единиц измерения, тут можно складывать величины, выраженные в одних и тех же единицах измерения, можно умножать некие величины на значения, единицы измерения которых не указаны. Но выполнять вычисления со значениями, выраженными в разных единицах измерения, здесь нельзя. На подобные вычисления накладываются ограничения, напоминающие ограничения calc() (например, числа, на которые что-то умножают или делят, должны представлять собой значения без единиц измерения).
Раскрытие смысла используемых в CSS числовых значений
Такой подход может оказаться полезным в чём-то вроде некоего самописного CSS-API:
Математические операторы функции calc()
Обратите внимание на то, что использование некорректных значений приводит к тому, что конкретное объявление также становится некорректным.
При делении ( / ) нужно, чтобы у второго числа не была бы указана единица измерения
При умножении ( * ) у одного из чисел не должна быть указана единица измерения:
О важности пробелов
Пробелы, используемые в выражениях, важны в операциях сложения и вычитания:
При умножении и делении пробелы вокруг операторов не требуются. Но я полагаю, что можно порекомендовать использовать пробелы и с этими операторами — ради повышения читабельности кода, и ради того, чтобы не забывать о пробелах и при вводе выражений, использующих сложение и вычитание.
Пробелы, отделяющие скобки calc() от выражения, никакой роли не играют. Выражение, при желании, можно даже выделить, перенеся на новую строку:
Правда, тут стоит проявлять осторожность. Между именем функции ( calc ) и первой открывающей скобкой пробелов быть не должно:
Вложенные конструкции: calc(calc())
Кроме того, в данном примере не нужны и скобки, так как при вычислении представленных здесь выражений применяются правила определения приоритета операторов. Деление и умножение выполняются перед сложением и вычитанием. В результате код можно переписать так:
Но в том случае, если кажется, что дополнительные скобки позволяет сделать код понятнее, их вполне можно использовать. Кроме того, если без скобок, основываясь лишь на приоритете операторов, выражение будет вычисляться неправильно, то такое выражение нуждается в скобках:
Пользовательские CSS-свойства и calc()
Уверен, несложно представить себе набор CSS-стилей, в котором множество настроек выполняется в одном месте с помощью установки значений пользовательских CSS-свойств. Эти значения потом будут использоваться во всём CSS-коде.
Пользовательские свойства, кроме того, могут ссылаться друг на друга (обратите внимание на то, что calc() тут не используется). Полученные значения могут использоваться для установки значений других CSS-свойств (а вот тут уже без calc() не обойтись).
Источником пользовательских свойств может служить HTML-код. Иногда это может оказаться крайне полезным. Например, в Splitting.js к словам и символам так добавляются индексы.
Назначение единиц измерения пользовательским свойствам после объявления этих свойств
Предположим, мы находимся в ситуации, когда в пользовательское свойство имеет смысл записать число без единиц измерения, или в ситуации, когда подобное число удобно будет, перед реальным использованием, как-то преобразовать, не пользуясь единицами измерениями. В подобных случаях пользовательскому свойству можно назначить значение без указания единиц измерения. Когда нужно будет преобразовать это число в новое, выраженное в неких единицах измерения, его можно будет умножить на 1 с указанием нужных единиц измерения:
Работа с цветами
Нельзя комбинировать calc() и attr()
CSS-функция attr() может казаться весьма привлекательной. И правда: берёшь значение атрибута из HTML, а потом его используешь. Но…
Я сказал здесь об этом из-за того, что у кого-нибудь может возникнуть желание попытаться вытащить из HTML-кода с помощью attr() некое число и использовать его в вычислениях:
Правда, хорошо то, что это особого значения не имеет, так как пользовательские свойства в HTML отлично подходят для решения подобных задач:
Браузерные инструменты
Инструменты разработчика браузера обычно показывают выражения с calc() так, как они описаны в исходном CSS-коде.
Инструменты разработчика Firefox, вкладка Rules
Инструменты разработчика Chrome, вкладка Computed
Браузерная поддержка
У функции calc() существует немало известных проблем, но от них страдают лишь старые браузеры. На Caniuse можно найти описание 13 таких проблем. Вот некоторые из них:
Примеры из жизни
Как крашнуть сервер Майнкрафт
На то, чтобы крашнуть сервер Майнкрафт, есть разные причины. Например, Вы купили привилегию, а на сервере ее нет, админы отмалчиваются, соответственно вам хочется отомстить. Или Вы просто захотели проверить, что произойдет, если крашнуть сервер.
Чтобы крашнуть сервер Майнкрафт есть несколько способов:
Первый способ
Самый простой способ – это ввести команду, но она может работать только на «простых» серверах. Вот сама команда: //calc for(i=0;i с помощью этой гриферской команды любой возможно взломает сервер в Майнкрафте
Второй способ
Есть сервера, которые используют следующие плагины:
В первом случае, чтобы определить какой это сервер, введите команду /fp help. Если она работает, то этот сервер использует первый плагин. Далее введите команду /fp help 18971712. В ответ сервер напишет Hack Ok и возможно, что сервер крашнется.
Если сервер использует HypixelPets, то введите команду nethernetwork2skingworld76. Результат получится такой же, как в первом случае.
Оба эти способа старые и далеко не все администраторы серверов используют такие плагины.
Очистка карты
Если Вы администратор сервера, то можно сделать вайп. Вайп – это удаление всего контента на сервере: стираются все постройки, приваты и др. Так вот, чтобы это сделать, надо удалить все файлы в папке world. Карта сама перезапуститься, генерация будет случайная.
Троллинг школьников
Вообще, краш серверов майнкрафт что делает» rel=dofollow»>майнкрафт далеко не в почете. Зачем портить игру окружающим? Но, не смотря на это, постоянно появляются новые способы для краша серверов. Многие пытаются взломать админку сервера, но далеко не у всех это получается. Некоторые умудряются взламывать все через консоль и с помощью специальных программ. Но тут нужно иметь определенные навыки программирования. Не теряйте на это время и играйте для удовольствия!
Как работает функция calc()
Дата публикации: 2017-02-16
От автора: CSS3 функция calc() позволяет выполнять математические операции над значениями свойств. Можно, например, не задавать ширину элемента в статических пикселях, а использовать функцию calc(), чтобы указать, что ширина складывается из двух числовых значений.
Почему calc()?
Если вы используете препроцессоры типа SASS, пример сверху вам должен быть знаком.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Функция calc() лучше по двум причинам. Во-первых, можно совмещать разные единицы измерения. Можно комбинировать относительные единицы, такие как проценты и vw, с абсолютными единицами типа пикселей. Например, можно написать выражение, в котором из процентного значения будет вычитаться значение в пикселях.
Во-вторых, в calc() вычисленное значение является самим выражением, а не конечным значение выражения. При работе с математическими выражениями в CSS препроцессорах значение, передаваемое в браузер, является конечным значением выражения.
А с функцией calc() значение, которое парсится браузером, это само выражение calc().
Это значит, что значения в браузере могут быть более динамичными, они могут адаптироваться под изменения вьюпорта. Можно создать элемент с высотой вьюпорта минус абсолютное значение, и он будет адаптироваться под изменения вьюпорта.
Использование calc()
Функцию calc() можно использовать для сложения, вычитания, умножения и деления числовых значений свойств. Ее можно использовать с типами данных length, frequency, angle, time, number и integer.
Вложенность функций calc()
Функцию calc() можно вкладывать. Однако внутренние функции будут расцениваться, как просто выражения в скобках. Разберем для примера выражение ниже:
Вычисленное значение этой функции будет следующим:
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Создание фолбека
Функция calc() довольно хорошо поддерживается.
Если браузер не поддерживает значение в виде функции calc(), игнорируется пара свойство-значение. То есть для браузеров без поддержки можно с легкостью задать фолбек в виде статического значения.
Когда можно использовать calc()?
Функция calc() полезна во многих ситуациях.
Пример 1 – центрирование элементов
Функция calc() дает нам еще один способ решения старой-старой проблемы с центрированием элементов по горизонтали и вертикали внутри контейнера. Если нам известны размеры дочерних элементов, обычно можно использовать отрицательные margin’ы для сдвига элементов на половину высоты или ширины, вот так:
С помощью calc() центрировать элемент можно всего лишь с помощью свойств top и left.
Если подключить flexbox, такие методы нам не понадобятся. Однако в случаях, когда нельзя использовать flexbox (например, если элемент нужно абсолютно или фиксировано спозиционировать), этот метод будет очень полезен.
Пример 2 – создание базового размера сетки
С помощью calc() можно создать сетку, подстраивающуюся под вьюпорт в rem единицах. Это можно сделать, установив размер шрифта корневого элемента в виде дроби относительно ширины вьюпорта.
Теперь 1rem будет равен 1/30 ширины вьюпорта. Любой текст на странице будет автоматически изменяться вместе с вьюпортом. На экране всегда будет одно и то же количество текста независимо от размера вьюпорта.
Если нетекстовым элементам на странице задать размеры в rem, они будут вести себя так же. Элемент шириной 1rem всегда будет занимать 1/30 ширины вьюпорта.
Пример 3 – ясность
Функцию calc() можно использовать для упрощения вычислений, чтобы они были более понятными. Например, если группа элементов должна занимать 1/6 от ширины родителя, можно, конечно, написать вот так:
Как крашнуть сервер майнкрафт
Майнкрафт существует уже давно, так что фанатская база у него большая. К тому же наличие большого количества разнообразных модов еще больше увеличивает количество игроков. Чем больше игроков, тем больше серверов требуется. Да и чуть ли не для каждого мода и дополнения нужно заводить отдельный сервер. Большое количество модов и дополнений может приводить к некоторым внутренним конфликтам, используя которые получится уронить сервер.
Способы крашнуть сервер
1. Найдите сервер, использующий WorldEdit. Зайдите на сервак и напишите в чат команду: “//we”.
2. Также напишите команды “//calc“, “//solve” и “//eval” и удостоверьтесь, что они работоспособны.. Когда набираете “//calc“, то должно выскакивать “//calc “, если они работают.
3. Воспользуйтесь любой командой из списка ниже введя её в чат:
В общем-то, это уже довольно старая фишка, так что многие серваки её пофиксили. К тому же моды не стоят на месте и тоже предпочитают страховаться от подобных вылетов. Вы можете поискать старые сборки, которые давно не обновлялись и не устанавливали себе дополнительные модули для защиты.
Вычислить вас будет не так уж и сложно, так что на этом серваке вас забанят наверняка. Никто не мешает вам походить по другим серваками крашить их по фану, вот только это было популярно еще несколько лет назад, так что теперь многие страхуются.
Если не работает
Это простой и всем известный метод, так что он сработает либо против новичков, либо у тех, кто не хочет ничего обновлять. Способ довольно простой и рассчитан на банальный перегруз сервера из-за ведущихся вычислений. Поэтому многие просто банят данные конкретные строчки, которые ходят по инету уже несколько лет.
Остальные способы уже не настолько просты и не позволят легко крашнуть сервер майнкрафт. Нужно качать дополнительные программы и плагины, заниматься их настройкой и как-то получить права на сервере, которые позволят сделать какую-то пакость. С минимум прав подготовка должна быть еще лучше.
Математика разметки с помощью CSS: разбираемся с calc
За последние годы верстка в интернете развилась из фиксированных дизайнов к адаптивным. Причем, в стилях могут использоваться сразу несколько видов единиц измерений (проценты, em или px). Дизайнерам и разработчикам следует понимать, как это работает. Но было бы удобно оперировать (складыва/вычитать) единицами разной размерности в одном и том же выражении.
Для этого отлично подходит calc. При ее всей мощности, то, как ее можно применять, лучше продемонстрировать на примерах.
Vertical Flush Margins
Например, возьмем шикарную фотографию водопада от Stian Klo. Это изображение сдвинуто с отступом в 2rem вправо. Теперь его сделаем адаптивным, установив ширину в 50% от ширины родительского элемента:
Нам нужно, чтобы вертикальный зазор увеличивался, визуально подчеркивая изображение негативным пространством под ним. Проблема в том, что адаптивность абзацев означает, что они будут “ползать” под картинкой по мере сужения (link):
Есть много способов решить эту проблему, и одним из самых простых будет так, чтобы:
у абзацев рядом с картинкой был левый отступ 50% плюс 2rem.
Используя calc, это будет (link):
calc же позволяет комбинировать разные системы измерения, делая отсуп фиксированным, а картинку — адаптивной.
Full-Width Elements In Padded Containers
Рассмотрим следующий пример — полноширинный элемент (например, картинка) над контентом с внутренним отступом (padding):
Проблема заключается в том, что padding элемента также смещает контент внутрь (link):
Это можно исправить путем вычисления ширины с помощью calc:
Операции
calc поддерживает основные арифметические операции (сложение (+), вычитание (-), умножение ( * ) и деление (/)). Важно помнить о том, что необходимо обрамлять операнды сложения и вычитания пробелами с двух сторон, а между calc и открывающей скобкой ничего не должно быть. Так что в такой форме это будет работать:
Тому есть простое объяснение: какое-либо число со знаком минус перед ним будет трактоваться, как отрицательное значение.
Возможности и ограничения
Все современные браузеры поддерживают calc для длины в CSS. Теоретически, calc может быть применим в любом месте, где встречаются операции с числами, что дает несколько интересных применений:
Выражаю огромную благодарность Ana Tudor за проведение этих исследований; больше информации о поддержке calc браузерами вы можете найти на caniuse.com
calc так же может быть применяться для вычисления color stops в градиентах.