Werkzeuge
Das Verzeichnis sass/utils enthält einige hilfreiche Sass-Mixins und -Funktionen. Im Folgenden werden einige von ihnen vorgestellt.
Layout-Werkzeuge
sass/utils/_layout.scss
@mixin clearfix
@include clearfix;
@include cf;
Der "clearfix" wird normalerweise im Zusammenhang mit floats verwendet und wird heutzutage eher seltener benutzt. Es kann dazu entweder direkt die Klasse .clearfix genutzt werden oder das Sass-Mixin @include clearfix (oder die Abkürzung @include cf)
.wrapper {
@include clearfix;
}
.wrapper:after {
content: '';
display: table;
clear: both;
}
@function z
z-index Management
z ( string $layer );
Anstatt "z-index"-Werte an vielen Stellen im Code direkt zu vergeben, kann man auch mit Variablen arbeiten, um einen Überblick über die vergebenen Werte zu behalten. Die Indizes werden dazu in einer einzigen Sass-Map (in der Datei sass/variables/_layout.scss) festgelegt und mit einem Namen versehen.
Um einen z-Index anzuwenden, kann die Funktion z wie folgt verwendet werden: z-index: z(NAME).
$z-layers: (
header: 30,
content: 10,
footer: 20
);
.header { z-index: z(header); }
.content { z-index: z(content); }
.footer { z-index: z(footer); }
- sass/variables/_layout.scss (z-index Konfiguration)
- sass/utils/_layout.scss
@mixin visually-hidden
@include visually-hidden;
Mit diesem Mixin kann man ein Element optisch verstecken. Es kann weiterhin von Screenreadern gelesen werden.
Die CSS-Klasse .visually-hidden ist entsprechend vordefiniert.
<p class="visually-hidden">Dieses Element ist optisch unsichtbar, aber nicht für Screenreader.</p>
.visually-hidden {
@include visually-hidden;
}
- sass/utils/_layout.scss (das Mixin)
- sass/basic/_layout.scss (die CSS-Klasse)
@mixin absolute / @mixin relative / @mixin fixed
Positioning mixins
@include absolute ( list $args );
@include fixed ( list $args );
@include relative ( list $args );
Mit den Sass-Mixins @mixin absolute, @mixin fixed und @mixin relative können Elemente bequem positioniert werden. Jedes dieser Mixins nimmt ein Argument auf, welches den vier Positionierungs-Eigenschaften (top, right, bottom, left) entspricht. Jede dieser Eigenschaften kann durch den Wert null ersetzt werden, dann wird sie ignoriert. Eine zuvor gesetzte Eigenschaft kann durch den Wert auto wieder zurückgesetzt werden.
Darüberhinaus können auch Shorthands benutzt werden, wie man es z.B. von margin und padding kennt.
.example-pos1
.example-pos2
.example-pos3
.example-pos4
.example-pos1 {
/*
top: 1rem
right: 2rem
left: 4rem
*/
@include absolute(1rem 2rem null 4rem);
}
.example-pos2 {
/*
right & left: 5rem
bottom: 2rem
*/
@include absolute(null 5rem 2rem);
}
.example-pos3 {
/*
top & bottom: 12rem
right & left: 0
*/
@include absolute(12rem 0);
}
.example-pos4 {
/*
top & bottom & right & left: 7rem
*/
@include absolute(7rem);
}
.example-pos1 {
top: 1rem;
right: 2rem;
left: 4rem;
position: absolute;
}
.example-pos2 {
right: 5rem;
bottom: 2rem;
left: 5rem;
position: absolute;
}
.example-pos3 {
top: 12rem;
right: 0;
bottom: 12rem;
left: 0;
position: absolute;
}
.example-pos4 {
top: 7rem;
right: 7rem;
bottom: 7rem;
left: 7rem;
position: absolute;
}
@mixin center-vertical
@include center-vertical;
Um ein Element mit variabler Höhe vertikal zu zentrieren, wird üblicherweise die flexbox-Technik verwendet. Hiermit geht's aber auch.
http://hackingui.com/front-end/10-best-scss-utilities/
Mittlerweile (2020) kann dieses Mixin als "oldschool" bezeichnet werden. Für die meisten Abwendungsfälle empfiehlt sich eher die flexbox-Technik.
I am a lonely div inside another lonely div. But at least I am a vertically centered div!
<div class="example-center-vert">
<div class="example-center-vert-item">
I am a lonely div inside another lonely div. But at least I am a vertically centered div!
</div>
</div>
.example-center-vert {
@include center-vertical;
[...]
}
.example-center-vert-item {
@include inline-block;
[...]
}
@mixin center-both
@include center-both;
Elemente mit dynamischer Breite und Höhe werden hiermit sowohl horizontal als auch vertikal zentriert.
Mittlerweile (2020) kann dieses Mixin als "oldschool" bezeichnet werden. Für die meisten Abwendungsfälle empfiehlt sich eher die flexbox-Technik.
I am a lonely div inside another lonely div. But at least I am a perfectly centered div!
<div class="example-center-both">
<div class="example-center-both-item">
I am a lonely div inside another lonely div. But at least I am a perfectly centered div!
</div>
</div>
.example-center-both {
position: relative;
[...]
}
.example-center-both-item {
@include center-both;
[...]
}
Größen-Werkzeuge
sass/utils/_sizing.scss
@mixin nb-size
@include nb-size ( string $width , string $height );
Eine Abkürzung für die CSS-Eigenschaften width und height.
.card {
@include nb-size(10rem, 20rem);
}
.icon {
@include nb-size(4rem);
}
.card {
width: 10rem;
height: 20rem;
}
.icon {
width: 4rem;
height: 4rem;
}
@mixin nb-aspect-ratio
@include nb-aspect-ratio ( [ string $width-factor , string $height-factor ] );
Liefert CSS-Eigenschaften für ein Element, welches seine Proportionen erhält, wenn es vergrößert oder verkleinert wird.
.video-wrapper {
@include nb-aspect-ratio;
}
.photo-35mm-wrapper {
@include nb-aspect-ratio(3, 2);
}
.video-wrapper {
width: 100%;
height: 0;
padding-bottom: 56.25%;
}
.photo-35mm-wrapper {
width: 100%;
height: 0;
padding-bottom: 66.6666667%;
}
Typographie-Werkzeuge
sass/utils/_typography.scss
@mixin nb-font-size
font-size und line-height
@include nb-font-size ( list $args );
p {
@include nb-font-size(1.6rem 2.4rem);
}
p {
font-size: 1.6rem;
line-height: 2.4rem;
}
- sass/utils/_typography.scss
- sass/utils/_helpers.scss (dependency @mixin x-rem)
@mixin rwd-font-size
Responsive Typographie
@include rwd-font-size ( map $definition );
Aufbauend auf @mixin font-size kann dieses Mixin dazu verwendet werden, für verschiedene Breakpoints unterschiedliche Werte für font-size und line-height zu setzen.
Im folgenden Kapitel "Responsives Webdesign" werden die Breakpoints näher erklärt.
$p-font-size: (
null: (1.8rem 2.6rem), // "null" is the default (mobile) size
sm: (1.6rem 2.4rem), // breakpoint "sm" (600px)
lg: (1.4rem 2rem) // breakpoint "lg" (980px)
);
p {
@include rwd-font-size($p-font-size);
}
p {
font-size: 1.8rem;
line-height: 2.6rem;
}
@media(min-width: 600px) {
p {
font-size: 1.6rem;
line-height: 2.4rem;
}
}
@media(min-width: 980px) {
p {
font-size: 1.4rem;
line-height: 2.0rem;
}
}
- sass/utils/_typography.scss
- sass/utils/_helpers.scss (dependency @mixin x-rem)
@mixin font-family
@include font-family ( string $key );
@include ff ( string $key );
Setzt einen in $font-families definierten font-family-Stack. Diese können in der Datei variables/_typography.scss bearbeitet werden.
@include ff kann als Abkürzung verwendet werden.
Text font-family
Heading font-family
Code font-family
.example-family-text {
@include font-family('text'); // Normales mixin
}
.example-family-heading {
@include ff('heading'); // Abkürzung
}
.example-family-code {
@include ff('code', $font-families); // Der zweite Parameter ist optional
}
- sass/utils/_typography.scss
- sass/variables/_typography.scss ($font-families Konfiguration)
@mixin truncate-text
@include truncate-text;
Quelle: http://hackingui.com/front-end/10-best-scss-utilities/.
Ein kleines Mixin, das sicherstellt, dass ein Textelement nicht über den Container läuft und sauber abgeschnitten wird. Es nimmt einen Parameter auf, bei dem es sich um einen der gültigen Textüberlaufwerte handelt (der Standardwert "ellipsis", "clip", oder ein String).
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum in posuere orci. Nam euismod gravida nunc. Ut accumsan vitae dolor interdum ullamcorper. Ut luctus, lacus quis finibus bibendum, tortor nisl tristique mauris, eu efficitur nisi felis sit amet lacus.
.example-truncate {
@include truncate-text; // parameter ist optional
}
- sass/utils/_typography.scss
@mixin remove-whitespace
@include remove-whitespace;
@include remove whitespace entfernt die Lücken zwischen Inline-Block-Elementen, indem die Schriftgröße auf Null gesetzt und der Wortabstand angepasst wird.
Mit @include reset-text können die Text-Styles wieder auf ihren Normalwert zurückgesetzt werden.
<div class="rw-example">
<div class="rw-example__item">These</div>
<div class="rw-example__item">are</div>
<div class="rw-example__item">inline-block</div>
</div>
.rw-example {
@include remove-whitespace;
}
.rw-example__item {
@include inline-block;
border: 1px solid #f66;
padding: 10px;
@include rwd-font-size($p-font-size);
@include reset-text;
}
- sass/utils/_typography.scss
@mixin hide-text
@include hide-text;
Dieses Mixin kann dazu verwendet werden, den Textinhalt in einem Element auszublenden.
<p class="example-hidetext">This text is hidden</p>
.example-hidetext {
background-color: #ccf;
width: 200px;
height: 50px;
@include hide-text;
}
- sass/utils/_typography.scss
Farb-Werkzeuge
sass/utils/_color.scss
@function nb-color
nb-color ( string $color [, string $tone , map $map ] );
Legt eine vordefinierte Farbe aus $colors oder einer anderen Sass-map mit Farbdefinitionen fest.
Text color
Background color
.example-color {
color: nb-color('primary');
}
.example-bgcolor {
background-color: nb-color('greyscale', 'light');
}
- sass/utils/_colors.scss
- sass/variables/colors.scss (Hier wird die Sass-map $color definiert)
@function nb-shade / @function nb-tint
nb-shade ( string $color , float $percentage );
nb-tint ( string $color , float $percentage );
//$percentage: percentage of `$color` in returned color
Verdunkelt oder erhellt eine Farbe, indem sie entweder mit Schwarz oder Weiß gemischt wird.
nb-shade(#00ff00, 30);
nb-tint(#ff0000, 50);
.example-shade {
background-color: nb-shade(#00ff00, 30);
}
.example-tint {
background-color: nb-tint(#ff0000, 50);
}
@mixin nb-link-colors
@include nb-link-colors(string $link, string $visited, string $hover, string $active);
Setzt die Farbwerte für die :link, :visited, :hover and :active Zustände.
.example-linkcolors {
@include nb-link-colors(#00f, #00c, #009, #000);
}
Mixins
Das Verzeichnis sass/mixins enthält einige vorgefertigte Styleangaben für verschienene UI-Elemente.
@mixin nb-accordion
@include nb-accordion(string $color, string $hover-color);
Styles für das UI-Element "Accordion". Siehe Abschnitt Accordion.
- sass/mixins/_accordion.scss
@mixin nb-alert-message
@include nb-alert-message(string $text-color, string $bg-color, string $border-color);
Styles für das UI-Element "Alert Message". Siehe Abschnitt Benachrichtigungen.
@mixin nb-carousel
@include nb-carousel(percentage $aspect-ratio, string $caption-color, string $caption-bg-color);
Styles für das UI-Element "Carousel". Siehe Abschnitt Carousel.
- sass/mixins/_carousel.scss
@mixin nb-dropdown-content
@mixin nb-dropdown-content-list
@mixin nb-dropdown
@include nb-dropdown-content([string $content-padding, string $bg-color, string $border, string $border-color, string $box-shadow]);
@include nb-dropdown-content-list([string $padding, string $option-padding, string $color, string $hover-color, string $active-color, string $hover-bg-color, string $active-bg-color]);
@include nb-dropdown ( [ map $params ] );
Styles für das UI-Element "Dropdown". Siehe Abschnitt Dropdowns.
- sass/mixins/_dropdown.scss
@mixin tabs-list
@mixin tabs-container
@include tabs-list ([string $tab-padding, string $tab-border-radius, string $tab-color, string $tab-border-color, string $tab-bg-color, string $tab-hover-color, string $tab-hover-border-color, string $tab-hover-bg-color, string $tab-active-color, string $tab-active-border-color, string $tab-active-bg-color]);
@include tabs-container ([string $tab-padding, string $tab-border-radius, string $tab-color, string $tab-border-color, string $tab-bg-color, string $tab-hover-color, string $tab-hover-border-color, string $tab-hover-bg-color, string $tab-active-color, string $tab-active-border-color, string $tab-active-bg-color]);
Styles für das UI-Element "Tabs". Siehe Abschnitt Tabs.
@mixin tabs-container contains all the styles for a fully functional tabs ui-element that is initialized by JavaScript. @mixin tabs-list only covers the tabs-ul itself and can be used to create a tab-style navigation.
@mixin reset-list
@include nb-reset-list;
list styles resetten (list-style-type, padding).
<ul class="example-reset-list">
<li>This</li>
<li>list</li>
<li>is</li>
<li>resetted</li>
</ul>
.example-reset-list {
@include nb-reset-list;
}
@mixin no-list
@mixin comma-separated-list
@include nb-no-list;
@include nb-comma-separated-list;
Während @mixin nb-no-list sämtliche Listen-spezifischen Styles von einer <ul> oder <ol> entfernt, lässt @mixin nb-comma-separated-list diese zusätzlich wie eine einzeilige, kommaseparierte Liste aussehen.
- This
- list
- is
- comma
- separated
<ul class="example-comma-separated">
<li>This</li>
<li>list</li>
<li>is</li>
<li>comma</li>
<li>separated</li>
</ul>
.example-comma-separated {
@include nb-no-list;
@include nb-comma-separated-list;
}
@mixin nb-embed-container
@include nb-embed-container ( [ string $width-factor , string $height-factor ] );
@mixin nb-embed-container basiert auf @mixin nb-aspect-ratio (siehe oben), um Styles für ein Element zu generieren, in dem ein Videoplayer oder ein ähnliches Element Platz findet, welches proportional vergrößert oder verkleinert werden muss.
<div class="example-embedcontainer">
<iframe src="https://www.youtube.com/embed/IBMKyNJvNV8" frameborder="0" allowfullscreen></iframe>
</div>
.example-embedcontainer {
@include nb-embed-container;
}
- sass/mixins/_embed-container.scss
@mixin nb-hamburger
@include nb-hamburger ( [ map $params ] );
@mixin nb-hamburger generiert Styles für ein "hamburger icon". Im Tab "SCSS" werden die einzelnen Parameter erklärt.
<div class="example-hamburgericon" role="button">
<div class="example-hamburgericon__bar"></div>
<div class="example-hamburgericon__bar"></div>
<div class="example-hamburgericon__bar"></div>
</div>
.example-hamburgericon {
@include nb-hamburger((
height: 16px, // Höhe des Icons
width: 22px, // Breite des Icons
bar-height: 2px, // Dicke der drei Balken
color: #333, // Iconfarbe
));
}
- sass/mixins/_hamburger.scss
@mixin nb-loading-spinner
@include nb-loading spinner ( [ map $params ] );
Generiert CSS für eine Lade-Animation. Im Tab "SCSS" werden die einzelnen Parameter erklärt.
<div class="example-spinner"></div>
.example-spinner {
@include nb-loading-spinner((
size: 40px, // Größe
border-width: 4px, // Rahmendicke
color1: rgba($black, 0.1), // Grundfarbe
color2: color('primary'), // Highlight-Farbe
duration: 1s // Zeitraum einer einzelnen Umdrehung
));
}
- sass/mixins/_loading.scss
@mixin nb-triangle
@include nb-triangle ( [ string $direction , string $size , string $color ] );
@include nb-triangle-absolute ( [ string $direction , string $size , string $color ] );
@mixin nb-triangle generiert ein rechtwinkliges Dreieck, dessen rechter Winkel in eine Richtung zeigt, die vom Parameter $direction bestimmt wird. @mixin nb-triangle-absolute fügt weitere Styles zur absoluten Positionierung von Pseudo-Elementen hinzu.
<span class="triangled">What a pretty triangle!</span>
.triangled {
position: relative;
[...]
&:before {
@include nb-triangle-absolute(bottom, 10px, $blue1);
bottom: -10px;
left: 50%;
transform: translate(-50%, 0);
}
}
- sass/mixins/_triangle.scss