0

I need to create indefinite divs in my html code, and they differ from each other only by one feature (size, for example).

So, what I am doing right now is to use many css classes, each with the size I need for each div, and one class that contains the rest of my div's style, declaring it as <div class="class1 class2"></div>.

I am looking for a way to incorporate a variable in my css or html to avoid the declaration of a lot of classes, making possible to change the size directly in the code, as an example:

CSS
html { ... } 
.name {
 ...
content: ...;
font: ...;
border: ...;
}

.name_($var) {
 ...
height: ($var);
width: ($var);
}

HTML    
<div class="name name_10"></div> //div 1 size is 10px 10px
<div class="name name_20"></div> //div 2 size is 20px 20px
<div class="name name_50"></div> //div 3 size is 50px 50px
<div class="name name_80"></div> //div 4 size is 80px 80px

This way, it would be possible to have as many divs as I want and it wouldn't be necessary to create one class for each. Is there any way to achieve this only by css and html?! If not, what could help me getting this with jq or js?

Thank you in advance, guys!

3 Answers 3

1

If you really only need different sizes, or other simple css-differences, then make one master-class for all your generated divs, AND in Javascript (or backend) set that class + an inline style with the single attribute that differs.

... ending with HTML like this:

<div class="name" style="height:10px"></div>
<div class="name" style="height:20px"></div>

That way you can do all the work in JS (or at backend), and your markup is still fairly simple.

Sign up to request clarification or add additional context in comments.

Comments

1

With regular old CSS, you can't do this. You should look into SASS or LESS if you want to start getting into CSS variables and functions like this (plus some other neat stuff).

You could do inline it with jQuery if you feel comfortable inlining your CSS and using JS for it.. it's not great but does the job. :

<div class="name name_10"></div>
<div class="name name_20"></div>

jQuery:

$('.name').each(function(){  
    var $this = $(this),
         size = $this.attr('class').split('_')[1]; // Split the number from the class

    $this.css({
       'width' : size + 'px',
       'height' : size + 'px'
    });
});

Although this might be overkill, you could just manually inline them at this point.

Comments

1

You could also try something ugly like this:

function addCSS(name, css) {
    var style = document.getElementById("css");
    style.innerHTML += (name + " {" + css + "}");
}

var size = 20;
addCSS(".div1", "background:red; font-size:" + size + "pt;");
<style id="css"></style>

<div class="div1">div</div>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.