Combine Calc() With Attr() In CSS


Answer :

Right now attr() is not supported by default in any major browser for any attributes other then "content". Read more about it here: https://developer.mozilla.org/en-US/docs/Web/CSS/attr


There appears to be a way around it using vars

.content{     --x: 1;     width: calc(100px * var(--x));     background: #f00; }  [data-x="1"] { --x: 1; } [data-x="2"] { --x: 2; } [data-x="3"] { --x: 3; }  /*doesn't look like this works unfortunately [data-x] { --x: attr(data-x); } seems to set all the widths to some really large number*/ 

The commented out section would have been perfect, and this may be the very same reason your idea didn't work, but it seems css doesn't perform the nice automatic casting that you might be used to in javascript ('2' * 3 //=6).
attr() returns a string, not a number, and this can be seen by adding .content:after { content:var(--x) }; nothing gets printed, --x is a number, content accepts strings.

If there is some css function to cast I feel like that would be the key to this problem.


Looks like casting (well, interpreting) will be a thing in CSS4, and it'll be as simple as

.content{     width: calc(100px * attr(data-x number, 1));     background: #f00; } 

To date, no browsers support even this experimental spec, but I'll update when it does.


At the moment the attr() function isn't working in Chrome.

An almost as nice solution is to use CSS variables:

<!DOCTYPE html> <html>   <head>     <style>       :root {          --module-size: 100px;          --data-x:1; /* Default value */        }        .content{           width: calc(var(--module-size) * var(--data-x));           border: 1px solid;       }     </style>   </head>   <body>     <div class="content" style="--data-x:1">         This box should have a width of 100px     </div>      <div class="content" style="--data-x:2">         This box should have a width of 200px     </div>      <div class="content"  style="--data-x:3">         This box should have a width of 300px     </div>   </body> </html> 

Comments

Popular posts from this blog

Chemistry - Bond Angles In NH3 And NCl3

Can Not Use Command Telnet In Git Bash