The following Less:
.paragraph{
font-size: 12px;
color: blue;
background: white;
}
.parent{
font-size: 14px;
color: black;
background: green;
.nestedParagraph:extend(.paragraph){
}
}
will compile into the following css:
.paragraph,
.parent .nestedParagraph {
font-size: 12px;
color: blue;
background: white;
}
.parent {
font-size: 14px;
color: black;
background: green;
}
We have applied the styles for .paragraph
to the .parent .nestedParagraph
element! Assuming our HTML is:
<div class="parent">
Words
<div class="nestedParagraph">
Nested Words
</div>
</div>
Our output will be
This is one way to easily apply many pre-configured styles to deeply nested components.
Extend may additionally be used with &, the parent select feature, the below compiles to the same as above.
.paragraph{
font-size: 12px;
color: blue;
background: white;
}
.parent{
font-size: 14px;
color: black;
background: green;
.nestedParagraph{
&:extend(.paragraph);
}
}
The following Less
.paragraph{
font-size: 12px;
color: darkgrey;
background: white;
}
.special-paragraph{
font-size: 24px;
font-weight: bold;
color: black;
}
.parent{
background: lightgrey;
.nestedParagraph{
&:extend(.paragraph);
&:extend(.special-paragraph);
}
}
Will compile to
.paragraph,
.parent .nestedParagraph {
font-size: 12px;
color: darkgrey;
background: white;
}
.special-paragraph,
.parent .nestedParagraph {
font-size: 24px;
font-weight: bold;
color: black;
}
.parent {
background: lightgrey;
}
With the provided html:
<div class="parent">
Parent Words
<div class="nestedParagraph">
Nested Words
</div>
</div>
<div class="special-paragraph">
Special Words
</div>
<div class="paragraph">
Normal Paragraph
</div>
We see the following result:
In this particular example, nestedParagraph
would like to use paragraph
's styles, with the overrides from special-paragraph
. Styles may easily be overridden by paying attention to the order elements are extended in.
You may also extend nested selectors. The below Less
.otherChild{
color: blue;
}
.otherParent{
color: red;
.otherChild{
font-size: 12px;
color: green;
}
}
.parent{
.nestedParagraph{
&:extend(.otherParent .otherChild);
}
}
Will compile to
.otherChild {
color: blue;
}
.otherParent {
color: red;
}
.otherParent .otherChild,
.parent .nestedParagraph {
font-size: 12px;
color: green;
}
With the following html
<div class="otherParent">
Other Parent Words
<div class="otherChild">
Other Nested Words
</div>
</div>
<div class="parent">
Parent Words
<div class="nestedParagraph">
Nested Words
</div>
</div>
The result is
The font color for the nested paragraph is green, not blue! This shows we can extend nested selectors!
The following Less
div.paragraph{
color: blue;
}
*.paragraph{
color: green;
}
.otherClass.paragraph{
color: red;
}
.paragraph.otherClass{
color: darkgrey;
}
.parent{
.nestedParagraph{
&:extend(.paragraph);
}
}
Will compile into
div.paragraph {
color: blue;
}
*.paragraph {
color: green;
}
.otherClass.paragraph {
color: red;
}
.paragraph.otherClass {
color: darkgrey;
}
Using the following HTML
<div class="parent">
Parent Words
<div class="nestedParagraph">
Nested Words
</div>
</div>
<div class="paragraph">
Paragraph
</div>
<ul class="paragraph">
ul paragraph
<li>1</li>
<li>2</li>
</ul>
<div class="otherClass paragraph">
Other Class Paragraph
</div>
<div class="paragraph otherClass">
Other Class Paragraph
</div>
Our result is
We can see that Less Extend only supports exact matching, as the Nested Words do not have styled applied to them.
The following Less
.addDivider::before{
content: "";
height: 80%;
background: white;
width: 1px;
position: absolute;
top: 10%;
left: 0;
}
.nav-bar{
background: black;
display: flex;
flex-direction: row;
width: 400px;
.nav-item{
color: white;
width: 100px;
list-style-type: none;
position: relative;
text-align: center;
padding: 0;
&:not(:first-child){
&::before{
&:extend(.addDivider::before);
}
}
}
}
Will compile into the following CSS
.addDivider::before,
.nav-bar .nav-item:not(:first-child)::before {
content: "";
height: 80%;
background: white;
width: 1px;
position: absolute;
top: 10%;
left: 0;
}
.nav-bar {
background: black;
display: flex;
flex-direction: row;
width: 400px;
}
.nav-bar .nav-item {
color: white;
width: 100px;
list-style-type: none;
position: relative;
text-align: center;
padding: 0;
}
Using the following HTML
<div class="nav-bar">
<div class="nav-item">one</div>
<div class="nav-item">two</div>
<div class="nav-item">three</div>
<div class="nav-item">four</div>
</div>
Our result is
We have defined a default divider pseudoclass which we have added into a nested element! The white borders can now be added to other elements using extend
.
Parameter | Details |
---|---|
css selector | This is any generic CSS selector, and may include .class , #id , ::pseudoElements , etc |