Stylesheet lang that is compiled to CSS.
SCSS
(Sassy CSS)SASS
(Syntactically Awesome Stylesheets)Primary difference between the two are in the syntax.
SCSS is just a different syntax for using SASS
SCSS is often referred to as the "Sass 3" syntax because it was introduced with Sass version 3
SCSS is now a more widely used syntax
You can assign a value to a name that beging with $
, and then you can refer to that name instead of the value itself.
$var: value
This is useful because you can reduce repetition, complex math, configure libraries, and etc. with variables.
$base-color: #c6538c; $border-dark: rgba($base-color, 0.88); .alert { border: 1px solid $border-dark; }
Used in nested selectors to refer to the outer selector. It makes it possible to re-use the outer selector in more complex ways
.alert { // The parent selector can be used to add pseudo-classes to the outer // selector. &:hover { font-weight: bold; } // It can also be used to style the outer selector in a certain context, such // as a body set to use a right-to-left language. [dir=rtl] & { margin-left: 0; margin-right: 10px; } // You can even use it as an argument to pseudo-class selectors. :not(&) { opacity: 0.8; } }
.alert:hover { font-weight: bold; } [dir=rtl] .alert { margin-left: 0; margin-right: 10px; } :not(.alert) { opacity: 0.8; }
Part of CSS.
Match when the element sets the att
attribute, whatever the value of the attribute
For example, the following attribute selector matches all H1 elements that specify the "title" attribute, whatever its value:
h1[title] { color: blue; }
Match when the element's att
attribute value is exactly val
In the following example, the selector matches all SPAN elements whose "class" attribute has exactly the value "example":
span[class=example] { color: blue; }
Sass will automatically combine the outer rule’s selector with the inner rule’s
<nav> <ul> <li> list item 1 </li> <div> <li> list item 2 </li> </div> </ul> </nav>
nav { ul { margin: 0; padding: 0; list-style: none; } li { display: inline-block; } }
nav ul { margin: 0; padding: 0; list-style: none; } nav li { display: inline-block; }
In above example, regardless of their level of nesting, nav li
will be applied to all li
elements within the nav
element
Below example selects all ul
elements that are nested within a nav
nav ul { ... }
If there is a collision between styles applied to the same element through both ancestor and descendant selectors, the more specific selector will take precedence
// Less specific nav { background-color: #333; } // More specific header nav { background-color: #555; }
+
(Next Sibling Combinator)The next-sibling combinator (+
) separates two selectors and matches the second element only if it immediately follows the first element, and both are children of the same parent element
/* Paragraphs that come immediately after any image */ img + p { font-weight: bold; }
>
(Child combinator)The child combinator (>
) is placed between two CSS selectors. It matches only those elements matched by the second selector that are the direct children of elements matched by the first.
/* li (list items) that are children of the "my-things" list */ ul.my-things > li { margin: 2em; }
> * + *
Targets any element that is a direct child (>
) of its parent, and that is immediately preceded (+
) by another element
>
Direct child combinator. It selects only the element that is a direct child of the specified element.*
Universal selector. It matches any element.+
Adjacent sibling combinator. It selects the element that is immediately preceded by the specified element.> * + *
is saying "select any element that is a direct child of its parent and is immediately preceded by another element"<div> <p>Paragraph 1</p> <p>Paragraph 2</p> <span>Span 1</span> <p>Paragraph 3</p> </div>
> * + *
would select the <p>
element with the text "Paragraph 3" because it is a direct child of its parent (<div>
) and is immediately preceded by another element (<span>
).
Each complex selector (the ones between the commas) is nested separately, and then they’re combined back into a selector list.
.alert, .warning { ul, p { margin-right: 0; margin-left: 0; padding-bottom: 0; } }
.alert ul, .alert p, .warning ul, .warning p { margin-right: 0; margin-left: 0; padding-bottom: 0; }