Rule Inheritance
By using the @extend
directive and passing it a named ruleset or selector from any other rule you can share styles
more effectively across a stylesheet.
Abstract rules can be used if you just need to extend a generic set of declarations.
.negative-text {
overflow: hidden;
text-indent: -9999px;
}
.sidebar-headline {
@extend .negative-text;
background: url( headline.png ) no-repeat;
}
Renders as
.negative-text,
.sidebar-headline {
overflow: hidden;
text-indent: -9999px;
}
.sidebar-headline {
background: url( headline.png ) no-repeat;
}
Referencing by name
If you want to reference a rule without being concerned about later changes to the identifying selector use the @name
directive:
.renamedClass {
@name baseClass;
text-decoration: underline;
}
.myClass {
@extend baseClass;
}
Extending with pseudo classes/elements
@extend arguments can adopt pseudo classes/elements by appending an exclamation mark:
.link-base {
color: #bada55;
text-decoration: underline;
}
.link-base:hover,
.link-base:focus {
text-decoration: none;
}
.link-footer {
@extend .link-base, .link-base:hover!, .link-base:focus!;
color: blue;
}
Renderd as
.link-base,
.link-footer {
color: #bada55;
text-decoration: underline;
}
.link-base:hover,
.link-base:focus,
.link-footer:hover,
.link-footer:focus {
text-decoration: none;
}
.link-footer {
color: blue;
}