233

I've created the following...

var menu = document.createElement('select');

How would I now set CSS attributes e.g width: 100px?

Yangshun Tay
  • 49,270
  • 33
  • 114
  • 141
Skizit
  • 43,506
  • 91
  • 209
  • 269

11 Answers11

327

Use element.style:

var element = document.createElement('select');
element.style.width = "100px";
mikemaccana
  • 110,530
  • 99
  • 389
  • 494
KJYe.Name
  • 16,969
  • 5
  • 48
  • 63
71

Just set the style:

var menu = document.createElement("select");
menu.style.width = "100px";

Or if you like, you can use jQuery:

$(menu).css("width", "100px");
djdd87
  • 67,346
  • 27
  • 156
  • 195
  • 5
    @Sime - My quotes aren't inconsistent. I always use double quotes for JS as that's the standard at work. Anyway, the first line had single quotes as I copied it from the OPs question. Corrected now anyway. – djdd87 Mar 04 '11 at 15:04
  • 1
    Well, they're OK now, but they were inconsistent at the time of my comment `:)` – Šime Vidas Mar 04 '11 at 15:07
  • 2
    @Sime - I did acknoledge that: *"Anyway, the first line had single quotes as I copied it from the OPs question. Corrected now anyway."* – djdd87 Mar 04 '11 at 15:08
47

For most styles do this:

var obj = document.createElement('select');
obj.style.width= "100px";

For styles that have hyphens in the name do this instead:

var obj = document.createElement('select');
obj.style["-webkit-background-size"] = "100px"
Daniel X Moore
  • 14,637
  • 17
  • 80
  • 92
31

Just for people who want to do the same thing in 2023

You can assign a CSS custom property to your element (through CSS or JS) and change it:

Assigment through CSS:

element {
  --element-width: 300px;

  width: var(--element-width, 100%);
}

Assignment through JS

ELEMENT.style.setProperty('--element-width', NEW_VALUE);

Get property value through JS

ELEMENT.style.getPropertyValue('--element-width');

Here useful links:

Mattia Astorino
  • 1,396
  • 14
  • 18
20

That's actually quite simple with vanilla JavaScript:

menu.style.width = "100px";
Justin Niessner
  • 242,243
  • 40
  • 408
  • 536
18

All of the answers tell you correctly how to do what you asked but I would advise using JavaScript to set a class on the element and style it by using CSS. That way you are keeping the correct separation between behaviour and style.

Imagine if you got a designer in to re-style the site... they should be able to work purely in CSS without having to work with your JavaScript.

In prototype I would do:

$(newElement).addClassName('blah')
Nick
  • 2,418
  • 16
  • 20
11

When debugging, I like to be able to add a bunch of css attributes in one line:

menu.style.cssText = 'width: 100px';

Getting used to this style you can add a bunch of css in one line like so:

menu.style.cssText = 'width: 100px; height: 100px; background: #afafaf';
afable
  • 175
  • 1
  • 9
7

if you want to add a global property, you can use:

    var styleEl = document.createElement('style'), styleSheet;
            document.head.appendChild(styleEl);
            styleSheet = styleEl.sheet;
            styleSheet.insertRule(".modal { position:absolute; bottom:auto; }", 0);
Hetdev
  • 1,425
  • 2
  • 21
  • 29
4
<h1>Silence and Smile</h1>
<input  type="button"  value="Show Red"   onclick="document.getElementById('h1').style.color='Red'"/>
<input  type="button"  value="Show Green" onclick="document.getElementById('h1').style.color='Green'"/>
Krzysztof Safjanowski
  • 7,292
  • 3
  • 35
  • 47
Mohsin Khan
  • 131
  • 1
  • 1
  • 10
3

This works well with most CSS properties if there are no hyphens in them.

var element = document.createElement('select');
element.style.width = "100px";

For properties with hyphens in them like max-width, you should convert the sausage-case to camelCase

var element = document.createElement('select');
element.style.maxWidth = "100px";
Daut
  • 2,537
  • 1
  • 19
  • 32
2
<body>
  <h1 id="h1">Silence and Smile</h1><br />
  <h3 id="h3">Silence and Smile</h3>

  <script type="text/javascript">
    document.getElementById("h1").style.color = "Red";
    document.getElementById("h1").style.background = "Green";
    document.getElementById("h3").style.fontSize = "larger" ; 
    document.getElementById("h3").style.fontFamily = "Arial";
  </script>
</body>
Robert Longson
  • 118,664
  • 26
  • 252
  • 242
Mohsin Khan
  • 131
  • 1
  • 1
  • 10