What is SASS @content Rule?
The @content rule or directive is a dependent at-rule in SASS language. It is important to note that the SCSS @content directive only works with the @mixin rule. Therefore, this SASS rule does not have any meaning or function without the @mixin directive.
Syntax of SCSS @content Rule
While declaring a mixin in an SCSS stylesheet, we can boost its functionality by encompassing a whole block of style declarations nested to that particular mixin. Look at the following syntax of this SCSS @content directive.
selector {
@content;
}
selector @content
// CSS Styles
What is Content Block in SASS?
A content block in SCSS is the chunk of SCSS or CSS styles that we add by using the @content rule. Usually, this @content block is included in conjunction with the @mixin rule and SCSS @include directive.
- Firstly, the @content rule represents the content block in SCSS.
- We can pass it by mere placing it within the curly braces.
- Upon compilation, the style blocks are replaced with the SASS @content directive.
- Moreover, we can add multiple @content blocks in our SCSS stylesheet.
- However, several content blocks in the SCSS @mixin directive will be included separately.
- Also, the content blocks are lexically scoped and can only access the local variables.
- Importantly, the content block in SASS is dependent on the SASS @include directive.
- Without the @include SCSS directive, it cannot be implemented.
Usage of SASS @content Directive
Let us understand the usage of the SCSS @content directive by the below instance.
Example
@mixin mobile-screen {
@media screen and (max-width: 680px){
@content;
}
}
@mixin tab-screen {
@media screen and (max-width: 980px){
@content;
}
}
h1{
font-size: 36px;
font-fmaily: 'Noto sans', sans-serif;
margin: 30px 20px;
@include tab-screen{
font-size: 32px;
margin: 20px 10px;
}
@include mobile-screen{
font-size: 30px;
margin: 15px 10px;
}
}
h1 {
font-size: 36px;
font-fmaily: "Noto sans", sans-serif;
margin: 30px 20px;
}
@media screen and (max-width: 980px) {
h1 {
font-size: 32px;
margin: 20px 10px;
}
}
@media screen and (max-width: 680px) {
h1 {
font-size: 30px;
margin: 15px 10px;
}
}
Explanation of @content Example
The above SCSS @content directive is described below.
- In the above instance, we created two mixins named mobile-screen and tab-screen.
- Each of the mixins contains an SCSS @content block.
- Further, while writing our SASS stylesheet, whenever we need to write the equivalent code for the mobile or tab screen, of a particular selector, we can make use of these mixins.
- We add the components to display in place of the @content block within the curly braces, after including the mixins.
- After transpilation, the style rules or declarations within the curly braces are nested and processed with that specific mixin.
SCSS @content Rule With Arguments
Since we can include a mixin with arguments, in the same way, a mixin can pass arguments to the @content directive. The arguments are added in a list, just like we add them for the mixin, separated by commas.
Syntax For @content Arguments
Below is the general syntax to define the mixin and arguments for the mixin and the @content block. Also, how to pass the arguments to the @content block after defining the SCSS mixin.
// Defining Mixin and arguments
@mixin some-name($arg){
@content($arg);
}
// Passing arguments
some-selector{
@include some-name(arguments to pass) using ($arg){
// style rules or declarations
}
}
Usage of Arguments in SCSS @content Directive
Let us understand this concept of how to define and pass the arguments to the @content rule in the SCSS stylesheet.
Example
@mixin theme($color) {
@if $color != #fff{
color: $color;
background: rgba($color, 0.2);
}
padding: 20px;
text-align: center;
@content ($color);
}
.wrapper{
@include theme(white) using ($arg){
@if $arg == white{
background: #333;
color: $arg;
}
margin: 0;
}
}
.wrapper {
padding: 20px;
text-align: center;
background: #333;
color: white;
margin: 0;
}
Explanation of @content Arguments
- The above instance utilizes the arguments along with the @content directive.
- We created a mixin theme that takes an argument $color.
- Further, this argument is employed within the mixin to check the conditions and finally incorporated inside the @content rule.
- Next, we included the theme mixin using the SCSS @include rule and passed the argument value.
- This argument value is further passed to the content block.
- Finally, you can see the output CSS generated in the adjacent tab.