@include keyword is used to include the code written in a mixin block. @mixin is used to group css code that has to be reused a no of times. Whereas the @extend is used in SASS to inherit(share) the properties from another css selector. @extend is most useful when the elements are almost same or identical.
The main difference between the two is in their compiled CSS file.
- @include example
SCSS file:
Mixin duplicates the styles over all classes in the CSS. Compiles CSS file:css @mixin text { color: black; font-size: 30px; font-weight: bold; } .hello{ @include text; } .world{ @include text; }
.hello{ color: black; font-size: 30px; font-weight: bold; } .world{ color: black; font-size: 30px; font-weight: bold; }Mixin can also accept parameters if required, whereas this is not possible with extend. for more details of @mixin visit here - @extend example:
Here in this example, the two buttons will share the general properties for a button but they differ in background color only so using extend in cases like these where the elements are almost the same and only differ some properties using @extend is a good idea.
SCSS file:
compiled CSS file:css %button-format { padding: 10px 20px; border-radius: 15px; color: black; } .toolbar-button { @extend %button-format; background-color: lightpink; &:hover { background-color: rgb(155, 106, 114); } } .status-bar-button { @extend %button-format; background-color: lightblue; &:hover { background-color: blue; } }
.status-bar-button, .toolbar-button { padding: 10px 20px; border-radius: 15px; color: black; } .toolbar-button { background-color: lightpink; } .toolbar-button:hover { background-color: #9b6a72; } .status-bar-button { background-color: lightblue; } .status-bar-button:hover { background-color: blue; }