2018-09-30 23:01:58 +01:00
---
id: 587d7fa5367417b2b2512bbd
title: Extend One Set of CSS Styles to Another Element
challengeType: 0
2019-08-05 09:17:33 -07:00
forumTopicId: 301456
2018-09-30 23:01:58 +01:00
---
## Description
< section id = 'description' >
Sass has a feature called < code > extend< / code > that makes it easy to borrow the CSS rules from one element and build upon them in another.
For example, the below block of CSS rules style a < code > .panel< / code > class. It has a < code > background-color< / code > , < code > height< / code > and < code > border< / code > .
2019-05-14 05:01:32 -07:00
```scss
.panel{
background-color: red;
height: 70px;
border: 2px solid green;
}
```
2018-09-30 23:01:58 +01:00
Now you want another panel called < code > .big-panel< / code > . It has the same base properties as < code > .panel< / code > , but also needs a < code > width< / code > and < code > font-size< / code > .
It's possible to copy and paste the initial CSS rules from < code > .panel< / code > , but the code becomes repetitive as you add more types of panels.
The < code > extend< / code > directive is a simple way to reuse the rules written for one element, then add more for another:
2019-05-14 05:01:32 -07:00
```scss
.big-panel{
@extend .panel;
width: 150px;
font-size: 2em;
}
```
2018-09-30 23:01:58 +01:00
The < code > .big-panel< / code > will have the same properties as < code > .panel< / code > in addition to the new styles.
< / section >
## Instructions
< section id = 'instructions' >
Make a class < code > .info-important< / code > that extends < code > .info< / code > and also has a < code > background-color< / code > set to magenta.
< / section >
## Tests
< section id = 'tests' >
```yml
2018-10-04 14:37:37 +01:00
tests:
- text: Your < code > info-important</ code > class should have a < code > background-color</ code > set to < code > magenta</ code > .
2019-07-24 23:53:37 -07:00
testString: assert(code.match(/\.info-important\s*?{[\s\S]*background-color\s*?:\s*?magenta\s*?;[\s\S]*}/gi));
2018-10-04 14:37:37 +01:00
- text: Your < code > info-important</ code > class should use < code > @extend </ code > to inherit the styling from the < code > info</ code > class.
2019-07-24 23:53:37 -07:00
testString: assert(code.match(/\.info-important\s*?{[\s\S]*@extend \s*?.info\s*?;[\s\S]*/gi));
2018-09-30 23:01:58 +01:00
```
< / section >
## Challenge Seed
< section id = 'challengeSeed' >
< div id = 'html-seed' >
```html
2020-05-09 16:31:18 +02:00
< style type = 'text/scss' >
2018-09-30 23:01:58 +01:00
h3{
text-align: center;
}
.info{
width: 200px;
border: 1px solid black;
margin: 0 auto;
}
2018-10-08 01:01:53 +01:00
2018-09-30 23:01:58 +01:00
< / style >
< h3 > Posts< / h3 >
< div class = "info-important" >
< p > This is an important post. It should extend the class ".info" and have its own CSS styles.< / p >
< / div >
< div class = "info" >
< p > This is a simple post. It has basic styling and can be extended for other uses.< / p >
< / div >
```
< / div >
< / section >
## Solution
< section id = 'solution' >
2019-05-01 01:55:22 +02:00
```html
2020-05-09 16:31:18 +02:00
< style type = 'text/scss' >
2019-05-01 01:55:22 +02:00
h3{
text-align: center;
}
.info{
width: 200px;
border: 1px solid black;
margin: 0 auto;
}
.info-important{
@extend .info;
background-color: magenta;
}
< / style >
< h3 > Posts< / h3 >
< div class = "info-important" >
< p > This is an important post. It should extend the class ".info" and have its own CSS styles.< / p >
< / div >
< div class = "info" >
< p > This is a simple post. It has basic styling and can be extended for other uses.< / p >
< / div >
2018-09-30 23:01:58 +01:00
```
2019-07-18 08:24:12 -07:00
2018-09-30 23:01:58 +01:00
< / section >