Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cancel a CSS declaration

Tags:

css

Is it possible to have a CSS rule which basically "undoes" a prior rule?

An example:

<blockquote>
    some text <em>more text</em> other text
</blockquote>

and let's say there's this CSS:

blockquote {
    color: red;
}

...but I want the <em> to remain the normal text color (which you may not necessarily know).

Basically, would there be a way to do something like this?

blockquote em {
    color: inherit-from-blockquote's-parent
}

Edit: The code I'm actually trying to get this to work on is actually a bit more complicated. Maybe this would explain it better:

This text should be *some unknown colour*
<ul>
    <li>This text should be BLUE
        <ul>
            <li>Same as outside the UL</li>
            <li>Same as outside the UL</li>
        </ul>
    </li>
</ul>

ul {
    color: blue;
}
ul ul {
    color: ???;
}
like image 231
nickf Avatar asked Nov 10 '08 07:11

nickf


People also ask

How do you cancel CSS code?

Sometimes you want to disable a part of the CSS code without deleting it. To do so you can put "/*" and "*/" around the code you want to disable. You can use the same method to add headings and comments to your CSS files.

Which character terminates the CSS declaration?

A CSS declaration consist of a CSS or vendor-specific property-name followed by a colon and then the value you want to assign to it, or unassign in the case of the unset value. Each declaration is terminated with a semi-colon.

How do you unset a transform in CSS?

Syntax: transform: value; To remove applied CSS transformation we will use JavaScript. Using JavaScript when we click on the button It will remove that class from the element.

How do I remove a property style?

removeProperty() method is used to remove a property from a style of an element. The style of the element is selected by going through the styleSheets array and selecting the cssRule. The removeProperty method can then be specified with the property to be removed.


2 Answers

With CSS alone, you can't refer to a parent's parent.

The thing you can do is try a mix of specific CSS selectors and markup so that the desired effect appears.

<td>
  This is the enclosing element.
  <ul>
    <li>This is the first level UL, direct child of TD
      <ul>
        <li>This is the second level UL</li>
        <li>Same as outside the UL</li>
      </ul>
    </li>
  </ul>
</td>

CSS:

td > ul
  color: blue; /* this affects the "direct child" UL only */
}

You would limit the depth of style inheritance to one level, consequently the inner UL is unstyled in regard to color and gets its setup from the enclosing text.

Read more on the CSS Child Selector, and be aware that older browsers may have their quirks with them.


EDIT

For Internet Explorer 6, the child selector can be faked to some extend. Be sure to fasten seat belts (conditional comments or the like) before using this:

td ul {
  color: expression(/TD/.test(this.parentNode.tagName)? "blue" : "black");
}

This assumes "black" as the outer color. If this color value is subject to change, your are out of luck, I'm afraid. Unless you can define an expression() that is able to get the color value from the context (e.g. checking some other properties of parent elements). Or you give up and use a JS framework, as someone else has already suggested.

The wimpy solution without having to use JS would of course be:

td ul.first {
  color: blue;
}

But I can see why you want to avoid that.

like image 100
Tomalak Avatar answered Oct 18 '22 02:10

Tomalak


Use this to make sure the inherit overrides whatever else might have been setting the color:

blockquote em {
    color: inherit !important;
}
like image 29
Kon Avatar answered Oct 18 '22 03:10

Kon