Can I apply a CSS style to an element name?

HtmlCssCss Selectors

Html Problem Overview


I'm currently working on a project where I have no control over the HTML that I am applying CSS styles to. And the HTML is not very well labelled, in the sense that there are not enough id and class declarations to differentiate between elements.

So, I'm looking for ways I can apply styles to objects that don't have an id or class attribute.

Sometimes, form items have a "name" or "value" attribute:

<input type="submit" value="Go" name="goButton">

Is there a way I can apply a style based on name="goButton"? What about "value"?

It's the kind of thing that's hard to find out because a Google search will find all sorts of instances in which broad terms like "name" and "value" will appear in web pages.

I'm kind of suspecting the answer is no... but perhaps someone has a clever hack?

Any advice would be greatly appreciated.

Html Solutions


Solution 1 - Html

You can use the attribute selector,

input[name="goButton"] {
  background: red;
}

<input name="goButton">

Be aware that it isn't supported in IE6.

Update: In 2016 you can pretty much use them as you want, since IE6 is dead. http://quirksmode.org/css/selectors/

http://reference.sitepoint.com/css/attributeselector

Solution 2 - Html

Text Input Example

input[type=text] {
  width: 150px;
}

input[name=myname] {
  width: 100px;
}

<input type="text">
<br>
<input type="text" name="myname">

Solution 3 - Html

You can use attribute selectors but they won't work in IE6 like meder said, there are javascript workarounds to that tho. Check Selectivizr

More detailed into on attribute selectors: http://www.css3.info/preview/attribute-selectors/

/* turns all input fields that have a name that starts with "go" red */
input[name^="go"] { color: red }

Solution 4 - Html

For future googlers, FYI, the method in the answer by @meder , can be used with any element that has a name attribute, so lets say theres an <iframe> with the name xyz then you can use the rule as belows.

iframe[name=xyz] {    
    display: none;
}   

The name attribute can be used on the following elements:

  • <button>
  • <fieldset>
  • <form>
  • <iframe>
  • <input>
  • <keygen>
  • <map>
  • <meta>
  • <object>
  • <output>
  • <param>
  • <select>
  • <textarea>

Solution 5 - Html

Using [name=elementName]{} without tag before will work too. It will affect all elements with this name.

For example:

[name=test] {
  width: 100px;
}

<input type=text name=test>
<div name=test></div>

Solution 6 - Html

If i understand your question right then,

Yes you can set style of individual element if its id or name is available,

e.g.

if id available then u can get control over the element like,

<input type="submit" value="Go" name="goButton">

var v_obj = document.getElementsById('goButton');

v_obj.setAttribute('style','color:red;background:none');

else if name is available then u can get control over the element like,

<input type="submit" value="Go" name="goButton">

var v_obj = document.getElementsByName('goButton');

v_obj.setAttribute('style','color:red;background:none');

Solution 7 - Html

This is the perfect job for the query selector...

var Set1=document.querySelectorAll('input[type=button]');  // by type

var Set2=document.querySelectorAll('input[name=goButton]'); // by name

var Set3=document.querySelectorAll('input[value=Go]'); // by value

You can then loop through these collections to operate on elements found.

Solution 8 - Html

if in case you are not using name in input but other element, then you can target other element with there attribute.

    [title~=flower] {
      border: 5px solid yellow;
    }

    <img src="klematis.jpg" title="klematis flower" width="150" height="113">
    <img src="img_flwr.gif" title="flower" width="224" height="162">
    <img src="img_flwr.gif" title="flowers" width="224" height="162">

hope its help. Thank you

Solution 9 - Html

input[type=text] {
  width: 150px;
  length: 150px;
}

input[name=myname] {
  width: 100px;

length: 150px; }

<input type="text">
<br>
<input type="text" name="myname">

Solution 10 - Html

have you explored the possibility of using jQuery? It has a very reach selector model (similar in syntax to CSS) and even if your elements don't have IDs, you should be able to select them using parent --> child --> grandchild relationship. Once you have them selected, there's a very simple method call (I forget the exact name) that allows you to apply CSS style to the element(s).

It should be simple to use and as a bonus, you'll most likely be very cross-platform compatible.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionQuestionerView Question on Stackoverflow
Solution 1 - Htmlmeder omuralievView Answer on Stackoverflow
Solution 2 - HtmlMRRajaView Answer on Stackoverflow
Solution 3 - HtmlChrisRView Answer on Stackoverflow
Solution 4 - HtmlMohd Abdul MujibView Answer on Stackoverflow
Solution 5 - HtmlBatsheva HansavView Answer on Stackoverflow
Solution 6 - HtmlJiteshView Answer on Stackoverflow
Solution 7 - Htmluser4723924View Answer on Stackoverflow
Solution 8 - HtmlAli RazaView Answer on Stackoverflow
Solution 9 - Htmlauni athirahView Answer on Stackoverflow
Solution 10 - HtmlDXMView Answer on Stackoverflow