Not CSS selectors

后端 未结 8 1900
礼貌的吻别
礼貌的吻别 2020-11-28 11:05

Is there some kind of \"not\" CSS selector?

For example when I write the following line in my CSS, all input fields inside an tag with class classname will

相关标签:
8条回答
  • 2020-11-28 11:17


    With current browser CSS support, you can't.

    Newer browsers now support it- see Sam's answer for more info.

    (See other answers for the alternatives in CSS.)


    If doing it in JavaScript/jQuery is acceptable, you can do:

    $j(':not(.classname)>input').css({background:'red'});
    
    0 讨论(0)
  • 2020-11-28 11:17

    I would do this

    input { /* styles outside of .classname */ }
    .classname input { /* styles inside of .classname, overriding above */ }
    
    0 讨论(0)
  • 2020-11-28 11:18

    Wouldn't you do that by setting the 'global' background to red, then using the classname to alter the others?

    input { background: red; }
    .classname input { background: white; }
    
    0 讨论(0)
  • 2020-11-28 11:25

    Inputs are a bit annoying because, unlike most other html elements, there isn't necessarily a way of resetting all the css properties back to their default value.

    If the styling is non-critical (ie a nice to have but doesn't affect functionality) I would use jQuery to get an array of all the inputs, check their parents, and then only carry out the styling on those outside that div. Something like:

    $('input').each(function() {
         if($(this).closest('.classname') == false)
         {
               // apply css styles
         }
    });
    

    (By the way, I'm no jQuery expert, so there might be some errors in the above, but in principle something like this should work)

    0 讨论(0)
  • 2020-11-28 11:29

    Mozilla supports negation pseudo-class:

    :not(.classname) input {background: red;}
    

    See also: http://developer.mozilla.org/en/Mozilla_CSS_support_chart

    0 讨论(0)
  • 2020-11-28 11:31

    There is no way to select the parent of matched elements with CSS. You would have to use JavaScript to select them.

    From your question I assume you have markup that looks more or less like this:

    <form class="formclassname">
        <div class="classname">
            <input />  <!-- Your rule matches this -->
            <input />  <!-- Your rule matches this -->
        </div>
        <input />  <!-- You want to select this? -->
        <input />  <!-- You want to select this? -->
    </form>
    

    One option is to add a class to a higher element, say the <form>, and write a rule to style all of the inputs of the form. I.E:

    .formclassname input {
      /* Some properties here... */
    }
    

    Or

    .formclassname > input {
      /* Some properties here... */
    }
    

    If you want to select them based on the fact that they are not inside of an element with a specific class, you're out of luck without the use of JavaScript.

    0 讨论(0)
提交回复
热议问题