SCSS/CSS selector to select all input types

85,343

Solution 1

There are a lot of possible input types. If you want textareas and any input that has a type attribute then...

textarea,
input[type] {
    ...
}

If you want to exclude some input types then use the :not selector. EDIT EXAMPLE JSFIDDLE http://jsfiddle.net/Pnbb8/

textarea,
input[type]:not([type=search]):not([type=url]):not([type=hidden]) {

}

But like I said there are probably a lot more types you DON'T want than types you DO want, so you can't really avoid the list.

You could always use a CSS class instead.

.box-shadowed
{
  @include box-shadow(none);
}

Solution 2

Will this suffice?

input[type="text"] {
    border: 1px red;
}

input[type] {
    border: 1px solid blue;
}

They both have the same specificity, so the last one overrides.

See jsFiddle

Another solution would be to ommit the element from the first selector. The latter would have higher specificity – however, you should know that in terms of performance, the first one is similar to using an universal selector (as it attempts to match all elements in the DOM, to check for the attribute).

[type="text"] {
    border: 1px red;
}

input[type="text"] {
    border: 1px solid blue;
}
Share:
85,343
bsr
Author by

bsr

Updated on January 15, 2022

Comments

  • bsr
    bsr over 2 years

    I have some input type has this scss setting (from the framework)

    textarea,
    input[type="text"],
    input[type="password"],
    input[type="datetime"],
    ...
    input[type="date"],
    input[type="month"],
    input[type="time"],
    input[type="week"],
    {
      @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
    }
    

    I like to override/reset all, something similar

    textarea,
    input[type="*"],
    {
      @include box-shadow(none);
    }
    

    above doesn't work, Also

    textarea,
        input,
        {
          @include box-shadow(none);
        }
    

    not specific enough. Is there a way to do this than listing all possible types.

    Thanks.

  • BoltClock
    BoltClock almost 11 years
    You can't use :not() like that in CSS - see stackoverflow.com/questions/10711730/…
  • Louis Ricci
    Louis Ricci almost 11 years
    @BoltClock - You were right that my syntax was wrong, but I've corrected the syntax and you can chain nots like :not([type=type1]):not([type=type2]) jsfiddle.net/Pnbb8 try it out in the latest FF or Chrome
  • BoltClock
    BoltClock almost 11 years
    I know. I said the same thing in my own answer to the linked question.
  • Mike
    Mike almost 4 years
    Just a note on that second method with the chain of nots: each not adds to the specificity of that selector. I ran into a situation of wanting to override one of the styles on the number input but the changes don't take because input[type="number"] specificity is less than input[type]:not(...):not(...).....
  • compuphys
    compuphys about 3 years
    @Mike just to be a bit more explicit (in case anybody is trying to calculate the actual specifity and it's not coming out right), selectors inside the negation pseudo-class add to the specifity, not the negation itself.