CSS calc

Written by David Walsh on December 17, 2012

CSS is a complete conundrum; we all appreciate CSS because of its simplicity but always yearn for the language to do just a bit more. CSS has evolved to accommodate placeholders, animations, and even click events. One problem we always thought we'd have with CSS, however, was its static nature; i.e. there's really no logic, per se. The CSS calc routine bucks that trend, providing developers an ounce of programming ability within CSS.

The CSS

The calc routine is especially useful when calculating relative widths. Calculations can be additions, subtractions, multiplications, and divisions. Have a look:

/* basic calc */
.simpleBlock {
	width: calc(100% - 100px);
}

/* calc in calc */
.complexBlock {
	width: calc(100% - 50% / 3);
	padding: 5px calc(3% - 2px);
	margin-left: calc(10% + 10px);
}

WebKit and Opera currently require a browser prefix for calc(). Be sure to use whitespace around operators so that they aren't construed as positive and negative notations.

CSS calc is another example of CSS taking over the role of JavaScript in layout, and I think it's a great thing. As we move more toward responsive design, calc allows us to use percentages for overall block widths, with just a touch of pixel help for some of its components. Have you used calc for your apps? Share how you used calc!

Comments

  1. Browser compatibility ?

    • Sorry for the duplicate! didn’t see I coulld reply directly.

      Hey Adoumas,

      With a google search I found this compatibility table: http://caniuse.com/calc. Not supported in < IE 9, so it's pretty limited if you're dependent upon using this for relative width layouts. It could be useful elsewhere though.

  2. Pardon my ignorance, but what are the benefits of doing this over using ‘box-sizing:border-box’ for responsive layout? I understand that you can mix percentage padding with a hint of static, but why would you want to?

    • You could set a layout width to 100% (responsive), while always leaving {x} pixels of that width for an absolutely positioned block on the right; that’s just one example.

  3. Calc() is quite awesome! Did you know you can use it in gradients and background-size/position too?

    Today’s HTML & CSS Advent 2012 entry is actually about the calc() function too.
    http://advent2012.digitpaint.nl/17/

  4. Hey Adoumas,

    With a google search I found this compatibility table: http://caniuse.com/calc. Not supported in < IE 9, so it's pretty limited if you're dependent upon using this for relative width layouts. It could be useful elsewhere though.

    Rob

  5. One word: awesome. Guess what I will be using in my next project?

  6. I share the words of some mates: Awesome! But hey! This is awesome for building grids! Take a look http://codepen.io/ed1nh0/pen/puhsf Tks for share!

Be Heard

Tip: Wrap your code in <code> tags...and don't flame others.

Use Code Editor
Older
Placeholders and Overflow
Newer
Introduction to dcl