Kurs vom 10.-11.12.2018
- Bootstrap - Hintergrund und Verwendung; Version 3.3.7 in der DATEV
- LESS - CSS-Präprozessor mit z.B. Variablen; Basis für Bootstrap
http://getbem.com/introduction/
- Wartbarkeit
- wozu dient etwas?
- wie stark gekoppelt?
- wie allgemein?
- Nebenwirkungen?
- modifizierbar? (Dynamik)
- Erweiterbarkeit (Verkapselung)
- "Modul" - benannte Einheit
- "Elemente" - aus diesen setzt sich ein Modul zusammen; hat eine Rolle; gehört zu diesem Modul
- "Modifier" - beeinflussen die Darstellung von Elementen/Modulen; gehört zu diesem Modul
<div class="modulX">
<h1> ... </h1>
</div>.modulX h1 {...}
.modulX h1.hover {...}Problem: wirkt auf alle h1 innerhalb von modulX (auch verschachtelt)
==> nur mit Klassen arbeiten!
.myNodule {...}
.myModule-condensed {...} // modifier für Modul
.myModule_rolle {...} // _rolle z.B. _header
.myModule_rolle_modifier {...} // _modifier z.B. _hoveredWichtig: Reihenfolge
Klassen ohne attribut-Definition als Identifikatoren (für Tests)
Precompiler lessc, Verwendung: lessc css/beispiel1.less css/beispiel1.css
- Variablen: @varname
- Funktionen: funkt(...)
- mixins: klassendefinitionen, deren Inhalt per "Inline" in andere Klassendefinitionen aufgenommen wird
- Namespaces: verschachtelte Struktur ('&' für Bezug auf Parent file:.)
@importanderer less-Dateien- Mediaqueries:
@media screen and (min-width: 480px) {...}(= width > 480px)- auf zwei Hiearchiestufen: komplettes Layout in einer Regel, oder regeln für einzelne Layout-Elemente
- Generieren von Layout-Elementen über parameter im Klassennamen s. Gridbeispiel:
.generate-columns(@n, @i:1) when (@i <= @n) {
grid-col-@{i} {
color: black;
...
}
// rekursiv
.generate-columns(@n, (@i+1));
}
.generate-columns(4);erzeugt grid-col-1 bis grid-col-4
- Workspace Settings:
{ "less.compile": { "out": false, "main": "styles.less" } }
- Settings in .less files:
// out: true / false / name of output file --> Änderung in dieser datei bewirkt Compilierung // main: xyz.less --> Änderung in dieser datei bewirkt Compilierung von xyz.less
Ist ein "CSS Framework" und enthält:
- Resets
- Basis: Typographie, Tabellen, Listen, Formulare etc.
- Layouts: Grid, Responsive
- Module: Passive Module
- Components: "Widgets" + JavaScript
Verwenden der container Klasse - Responsiv, 4 Geräteklassen
Verwenden der container-fluid Klasse
- Standardmäßig 12 Spalten Layout-Raster
- col-... Items "leben" in div mit
class="row" - Geräteklassen: xs, sm, md, lg - diese werden in den col-Namen verwendet
- col-xs-3, col-sm-3, col-md-3, col-lg-3 (gelten jeweils für alle größeren Geräteklassen mit, solange für diese keine Klassenangabe erfolgt)
- Grid-Utils
- Offsets für Lücken - Bsp.
col-md-offset-2für eine Lücke von 2 vor dem aktuellen Element - Verschieben von Elementen mit push/pull - Bsp.
col-md-push-3col-md-pull-2- wichtig: die Elemente werden relativ positioniert und werden daher bei der Layoutberechnung so behandelt. als ob sie an iherer Ausgangsposition stehen würden. - Zeigen oder Verstecken für Geräteklassen - Bsp.:
hidden-sm- nur verstecken bei "small"visible-md- nur sichtbar bei "medium"visible-md-inline- siehe HTML/CSS-Kursvisible-md-blockvisible-md-inline-block
- Offsets für Lücken - Bsp.
- Basis-Klasse
table- Tabelle mit Zeilentrennlinien - Modifier:
table-bordered- seitliche Gitterlinien pro Zelletable-striped- abwechselnde Zeilenfarbetable-hover- Zeile unter der Maus bekommt Hover-Effekt
pull-right/pull-left- nach rechts oder links ziehen - andere Element in der Row werden darüber positioniertcenter-block- zentriert als eigenen Blockvisible-print/hidden-print- nur im Druck sichtbar/unsichtbarsr-only- nur sichtbar für Screenreader- Setzen von Text/Hintergrundfarben (siehe Buttons)
Farbarten
- default - weiß ?!
- primary - blau
- info - cyan
- success - grün
- warning - gelb
- danger - rot
Buttons
Styling auf verschiedene Elemente, mit denen Buttons dargestellt werden können: button, input style="button", a href="#" ...
btnbtn-default,btn-primary, ...,btn-dangerbtn-sm,btn-lg- kleiner / großer Button
Auch auf andere Elemente anwenden
bg-default, ...,bg-danger- Background Colortext-default, ...,text-danger- Text Color`text-muted,text-uppercase, ...
nav- (Liste) als Navigation formatieren, default: vertikal wie Liste ausgerichtetnav-pills- horizontal ausgerichtet (an Liste)nav-tabs- als Taben darstellen (an Liste)active- item als aktiven Link hervorhebenpull-right/pull-left- funktioniert auch hier
dropdown- Dropdown-Bereich mit auslösendem Button und Dropdown-Menüdropdown-menu- Liste als Dropdown-Menü stylen- Attribut
data-toggledes Auslöse-Buttons wird auf"dropdown"gesetzt
<div class="dropdown">
<!-- Triggerbutton - Muss wissen: a) WAS soll ich tun? b) WO soll ich es tun -->
<button class="btn btn-info"
data-toggle="dropdown"
data-target="#">
Trigger
<span class="caret"></span>
</button>
<!-- Menü -->
<ul class="dropdown-menu">
<li><a href="">Dropdownmenü 1</a></li>
<li><a href="">Dropdownmenü 2</a></li>
<li><a href="">Dropdownmenü 3</a></li>
<li><a href="">Dropdownmenü 4</a></li>
</ul>
</div>collapse- zeigt an, dass element collapsed ist (element braucht id!) un d wird auch fürdata-toggle-Attribut verwendethrefoderdata-targetverweisen auf Id des ein/auszuklappenden Elementes
<p> <!-- a) WAS soll ich?: data-toggle b) WO soll ich?: href -->
<a href="#collapser1" data-toggle="collapse"> Triggert Collapsible</a>
</p>
<!-- Irgendein Inhalt wird als "collapsbar deklariert. Braucht (!) ein Id !!! -->
<p id="collapser1" class="collapse">Dieser Inhalt wird collapsed.</p>
<p>Nach dem Collapser... (rutscht hoch, wenn collapsed) </p>Zu beachten: bei xs soll keine Navbar gezeigt werden.
Kann in oder außerhalb eine Containers liegen. Nachteil bei "außerhalb": navbar geht bis zum Rand, Elemente im Container nicht.
Alternative: Navbar außerhalb Container, aber die Navbar enthält selbst einen Container.
Elemente:
navbar- Navigation Barnavbar-default- auf Navigation Barnavbar-header- ???navbar-collapse- ???collapse- für das Attributdata-toggleoder dem (div-)Element, in dem collapsed werden soll (?)navbar-brand- Titel der Navbarnavbar-toggle- Button, der das Togglen auslöstnavbar-nav- für Element mit Klassenav
navbar - Verwendung: nur Anzeige
navbar - Verwendung: nur Formatierung mit Container
navbar - Verwendung vollständig, inklusive Wechsel zwischen Navbar und Dropdown
Pfad: \node_modules\bootstrap\less
- bootstrap.less - importiert alle Komponenten-less-Dateien, daraus entsteht \node_modules\bootstrap\dist\css\bootstrap.css
- Definitionsdateien aus Bootstrap kopieren.
- Definitionen überschreiben
- kopierte bootstrap.less kann ausgedünnt werden (durch Auskommentieren)
- Am einfachsten: variables.less anpassen (Faraben, Größen, Anzahlen, Icons)
Workspace-Einstellungen OK?:
{
"less.compile": {
"out": "../dist/css/bootstrap.css",
"sourceMap": false,
"main": "../less/bootstrap.less"
}
}
1em / 1rem - je nach Browser, nicht alle können rem
document.getElementsByClassName / getElementById --> Array mit allen Elementen der gleichen Klasse / letztes Element mit der Id
document.querySelector('.classname'); liefert ersten node
document.querySelectorAll('.classname'); liefert node-list