Partial Overrides

A partial override occurs when two or more rulesets containing related, but not identical declarations target the same element. This happens when a shorthand property overrides a longhand property, or visa versa. Here is a partial override in its simplest form:

<dl className="address">
  margin: 20px 10px;
</dl>,

<footer>
  <dl className="address">
    margin-left: 20px;
  </dl>
</footer>

In the example above the first ruleset uses the shorthand property margin, which translated to computed styles equates to:

  • margin-top: 20px;

  • margin-right: 10px;

  • margin-bottom: 20px;

  • margin-left: 10px;

The second ruleset attempts to override the left margin using the longhand property margin-left. However since the left margin already has a value (of 10px) it cannot be overridden. Immutable styles detects this partial override and throws the following compile time error:

Another example of partial overrides can be seen when both shorthand and longhand border properties target the same element:

<img className="gravatar">
  border: 1px solid gainsboro;
</img>,

<div className="feed">
  <img className="gravatar">
    border-left-color: tomato;
  </img>
</div>

The first ruleset uses the shorthand property border, which translated to computed styles equates to:

  • border-top-width: 1px;

  • border-top-style: solid;

  • border-top-color: gainsboro;

  • border-right-width: 1px;

  • border-right-style: solid;

  • border-right-color: gainsboro;

  • border-bottom-width: 1px;

  • border-bottom-style: solid;

  • border-bottom-color: gainsboro;

  • border-left-width: 1px;

  • border-left-style: solid;

  • border-left-color: gainsboro;

The second ruleset attempts to override the left border color using the longhand property border-left-color, which again is caught by the compiler:

Not all partial overrides are so easy to detect:

<h1>
  font: 600 30px/1.5em sans-serif;
</h1>,

<nav>
  <h1>
    line-height: 1em;
  </h1>
</nav>

The first ruleset uses the shorthand property font, which translated to computed styles equates to:

  • font-weight: 600;

  • font-size: 30px;

  • line-height: 1.5em;

  • font-family: sans-serif;

Fortunately immutable styles is aware that the line-height set by font in the first ruleset is overridden by the second ruleset:

Last updated