BLOGTOP

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » BLOGTOP » Уголок wap мастера » CSS/HTML » Функция calc() в CSS3


Функция calc() в CSS3

Сообщений 1 страница 1 из 1

1

Одной их наиболее ожидаемых функций для верстальщиков в CSS3 является  функция calc(). На данный момент она поддерживается не только Firefox (начиная с 4 версии), но и Internet Explorer 9, и теперь, я думаю, что настало время для краткого обзора о том, как полезна может быть эта функция.

https://i.imgur.com/KKyxFwE.jpg

Что такое calc()?
Функция calc() может использоваться для определения длинны. Например, вы можете использовать её для расчета значений границ, полей, отступов, шрифтов и т.д. Расчет ширины может быть очень сложным, особенно для "резинового" макета, функция calc() является уникальной, поскольку она позволяет сделать эти расчеты в CSS.

Она позволяет производить сложения ("+"), вычитание ("-"), умножения ("*") и деления ("/").

Давайте рассмотрим простой пример:

Код:
div {
 width: calc(100% - 20px);
}

Легко, не так ли? Вы также можете делать более одного расчета в пределах одной функции, например:

Код:
div {
 width: calc(100% - 20px + 2px*2);
}

В текущей спецификации, определено, что выражения умножения и деления имеют приоритет над сложением и вычитанием. Это означает, что в предыдущем примере выражение "2px * 2" будет рассчитано раньше двух других выражений. Кроме того, обратите внимание, что деление на ноль приведет к ошибке.

Спецификация еще не завершена (там есть Editor’s Draft версия, которая расширяет CSS3 Values and Units Working Draft версию), но это основное.

Один простой пример использования
Чтобы показать полезность calc() в будущем, я создал простой макет.

Макет состоит из основного контейнера содержания слева, боковой панели справа, и футера, который ниже двух предыдущих контейнеров. Вот основная разметка с частью текста, для краткости:

Код:
<div class="wrapper">
 
 <div id="main">
 <h1>Far far away…</h1>
 <p>Far far away, behind the word mountains…</p>
 </div>
 
 <div id="accessory">
 <ul>
 <li><a href="#">Far far away…</a></li>
 <li><a href="#">Separated they live…</a></li>
 <li><a href="#">A small river named…</a></li>
 </ul>
 </div>
 
 <div id="footer">
 Visit the article…
 </div>
 
</div>

Определим некоторые общие свойства для нашего макета:

Код:
body {
 background: #E8EADD;
 color: #3C323A;
 padding: 20px;
}

После этого, укажем, что ширина основного контейнера должна быть равна 100% минус 40px и выровнена по центру:

Код:
.wrapper {
 width: 1024px; /* это для старых браузеров, которые не поддерживают функцию calc() */
 width: -moz-calc(100% - 40px);
 width: calc(100% - 40px);
 margin: auto;
}

В CSS выше, я также добавил ширину для браузеров не поддерживающих функцию calc() , и функцию с префиксом для Firefox 4.

После этого я установлю границы, ширину и отступы для основного контейнера div, а также задам float:left для него:

Код:
#main {
 border: 8px solid #B8C172;
 float: left;
 margin-bottom: 20px;
 margin-right: 20px;
 padding: 20px;
 width: 704px; /* для старых браузеров, которые не поддерживают функцию calc() */
 width: -moz-calc(75% - 20px*2 - 8px*2);
 width: calc(75% - 20px*2 - 8px*2); }

Так что же происходит в этой функции calc()? Я хочу, чтобы мой контейнер div был шириной 75% (75% от его родительского контейнера, запомните), но из этих 75% мне нужно вычесть "20px * 2" для отступов с каждой стороны (padding: 20px), и "8px * 2" для границ на каждой стороне (border: 8px solid #B8C172).

Боковая панель я хочу чтобы занимала оставшиеся 25% внутри родительского контейнера, но это значение будет позволять отступы, границы для боковой панели (20px).

Код:
#accessory {
 border: 8px solid #B8C172;
 float: right;
 padding: 10px;
 width: 208px; /* для старых браузеров, которые не поддерживают функцию calc()  */
 width: -moz-calc(25% - 10px*2 - 8px*2 - 20px);
 width: calc(25% - 10px*2 - 8px*2 - 20px);
}

Разберем "calc(25% - 10px * 2 - 8px * 2 - 20px)", у нас есть оригинальные 25%, минус "10px * 2" для отступа с каждой стороны, минус "8px * 2" для границы с каждой стороны, минус "20px" для правого поля основного контейнера.

Футер - это просто div на всю ширину, я не буду утомлять всех, объясняя что это.

Так как боковая панель становится слишком узкой после определенного момента, если изменять размеры браузера, я также добавил простые media query, которые изменяют положение основного и бокового контейнеров и пересчитывают их ширину, чтобы они были на 100% ширины экрана, минус ширина их отступов и границ:

Код:
@media screen and (max-width: 768px) {
 #main, #accessory {
 float: none;
}
 #main {
 margin-right: 0;
 width: -moz-calc(100% - 20px*2 - 8px*2);
 width: calc(100% - 20px*2 - 8px*2);
}
 #accessory {
 width: -moz-calc(100% - 10px*2 - 8px*2);
 width: calc(100% - 10px*2 - 8px*2);
}
}

Это очень упрощенный вариант использования, но, надеюсь, этого достаточно, чтобы проявить ваш интерес к этой замечательной функции calc().

Поддержка браузеров
Функцию calc() поддерживает IE 9 и Firefox 4+ (который требует префикс -moz). Я понимаю, что недостаточная поддержка браузерами может быть гораздо большой проблемой, в сравнении, например, с недостаточной поддержкой браузерами таких вещей, как анимация. Так как неправильные измерения могут привести к поломке верстки веб-страницы.

Это не значит, что мы не должны пытаться пробовать использовать это. Если Firefox и IE, которые владеют большой долей рынка, уже сделали поддержку этой функции, я могу предположить, что и другие последуют этому примеру.

Наряду с некоторыми другими свойствами CSS3, функция calc() является одним из тех новых элементов CSS, которые могут действительно сделать жизнь верстальщиков легче. Я не проверял её с точки зрения производительности, так что я не знаю, насколько серьезно влияют все эти расчеты на работу браузера, но я думаю, это будет не более весомым, чем все эти transitions и transform, которые все, кажется, так счастливы без разбора добавлять на свои сайты.

Подпись автора

вопрос по ◆ВТ◆ в личку

вопрос по ◆ВТ◆ в тему

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»


упс таблица

Откуда гость?
ВНИМАНИЕ! В подписи запрещены ссылки на конкурирующие сайты или форумы!


Вы здесь » BLOGTOP » Уголок wap мастера » CSS/HTML » Функция calc() в CSS3