-
Notifications
You must be signed in to change notification settings - Fork 39
SS2019: Technologierecherche – Frontend Frameworks
CSS-Frameworks sind Sammlungen von Gestaltungsmitteln und -Elementen, die bei einem einheitlichen und standardisierten Webdesign helfen. Um Websiten und Web-Applikationen responsive* zu gestalten, basieren CSS-Frameworks auf Grid-Gestaltungsrastern und grundlegenen Gestaltungselementen, grafischen Elementen und CSS-Anpassungen, wie Hilfsklassen und Stylesheets. Eine Übersicht der bekanntesten Frameworks bietet die Website usablica. Einige weitverbreitete Frameworks werden im Folgenden näher vorgestellt.
Das Open Source Framework Foundation wurde 2011 von ZURB* unter der MIT-Lizenz veröffentlicht. Dieses wurde in HTML, CSS, SASS und Javascript geschrieben und bietet neben einem Grid-System, HTML und CSS UI Elemente für ein responsives Webdesign. Das Foundation-Framework wurde auf Basis von Sass/SCSS entwickelt und kann mit Mixins einfach erweitert werden. Als Grundlage verwendetet das Foundation Framework jQuery, HTML5 Boilerplate und Normalizr.
Grundaspekte Foundation wird standardmäßig mit einem 940 Pixel breiten, flexiblen Rasterlayout geliefert. Das Toolkit reagiert vollständig auf die Verwendung verschiedener Auflösungen und Gerätetypen: Mobiltelefone, Hoch- und Querformat, Tablets und PCs mit niedriger und hoher Auflösung (Breitbild). Dadurch wird die Breite der Spalten automatisch angepasst.
Foundation bietet eine Reihe von Stylesheets, die grundlegende Stylesheets für alle wichtigen HTML-Komponenten bereitstellen. Diese sorgen für ein browser- und systemweit einheitliches, modernes Erscheinungsbild bei der Formatierung von Texten, Tabellen und Formularelementen.
Zusätzlich zu den regulären HTML-Elementen enthält Foundation weitere häufig verwendete Oberflächenelemente. Dazu gehören Schaltflächen mit erweiterten Funktionen (z.B. Gruppierung von Schaltflächen oder Schaltflächen mit Dropdown-Option, Marken- und Navigationslisten, horizontale und vertikale Registerkarten, Navigation, Breadcrumb-Navigation, Seitenumbruch usw.), Beschriftungen, erweiterte typografische Funktionen und Formatierung für Meldungen wie Warnungen.
Foundation jQuery-Komponenten bieten allgemeine Elemente der Benutzeroberfläche und markengebundene Erweiterungen. Die Liste enthält: Dialog, Tooltips, Karussells, Warnungen, Löschen, Cookies, Dropdown, Formulare, Joyride, Magellan, Umlaufbahn, Platzhalter, Enthüllung, Abschnitt, Topleiste, Flex-Video und viele andere.
Installation über GitHub, Download
Vorteile
- Keine Inkompatibilitäten mit Back-end oder Server
- Flexbox-based Grid, Float Grid und XY Grid
- Große Community (Kleiner als Bootstrap)
- Ready to Use HTML-Templates
Nachteile -
Beispiel-Syntax für Basic Flex Grid
<div class="row">
<div class="columns small-6">6 columns</div>
<div class="columns small-6">6 columns</div>
</div>
<div class="row">
<div class="columns medium-6 large-4">12/6/4 columns</div>
<div class="columns medium-6 large-8">12/6/8 columns</div>
</div>
Showcase
Das Materialize Framework basiert auf Google's Material Design Konzept und wurde auf HTML, CSS und Javascript entwickelt. Es bietet Layouts, Animationen und andere UI Elemente im Material Design.
Grundaspekte
- Materialize stellt vordefinierte Klassen zur Verfügung, um Container zu erstellen, die die verschiedenen UI-Komponenten aufnehmen.
- Grids Materialize hat 12 Spalten eingebautes Gridsystem.
- Materialize Framework hat verschiedene Klassen, um Tabellen zu erstellen.
Installation über Github, Download, cdn, npm
Vorteile
- Hohe Benutzerfreundlichkeit
- Konsistentes Design
Nachteile
- Untrennbar mit Google verbunden
- (Animationen verbrauchen Akku)
- (Rendering-Richtlinien einhalten)
Beispiel-Syntax für Responsive Grid
<div class="row">
<div class="col s12"><p>s12</p></div>
<div class="col s12 m4 l2"><p>s12 m4</p></div>
<div class="col s12 m4 l8"><p>s12 m4</p></div>
<div class="col s12 m4 l2"><p>s12 m4</p></div>
</div>
<div class="row">
<div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
<div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
<div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
<div class="col s12 m6 l3"><p>s12 m6 l3</p></div>
</div>
Responsive Layouts
Showcase:
Bootstrap ist ein bekannteste und beliebteste CSS-Framework. Es enthält auf HTML und CSS basierende Gestaltungsvorlagen für Typografie, Formulare, Buttons, Tabellen, Grid-Systeme, Navigations- und andere Oberflächengestaltungselemente sowie zusätzliche, optionale JavaScript-Erweiterungen. Zudem bietet Bootstrap alle Voraussetzungen um responsive Webdesigns zu gestalten, die dann auch auf Smartphones oder Tablets optimal dargestellt werden.
Kerninformationen:
- Entwickelt von Twitter (Marc Otto & Jacob Thornton).
- Erscheinungsjahr - 2011.
- Aktuelle Version: 4.3.1.
- 132,879 Stars in Github.
- Framework size: 714 KB.
Bootstrap erzielte ein responsives Design durch Einführung der Idee eines 12-Spalten-Grids. Das Framework legt ein Grid über die gesamte Page. Das bedeutet, die gesamte Breite wird in Spalten und die Höhe in Zeilen aufgeteilt. Das Grid hat üblicherweise 12 Spalten. <>
Beispiel Syntax für drei Column Grid.
<div class="container">
<div class="row">
<div class="col-md">
One of three columns
</div>
<div class="col-md">
One of three columns
</div>
<div class="col-md">
One of three columns
</div>
</div>
</div>
Beispiel Syntax für Buttons:
<button type="button" class="btn btn-outline-primary">Primary</button>
<a href="#" class="btn btn-secondary btn-lg active" role="button" aria-pressed="true">Link</a>
<button type="button" class="btn btn-secondary btn-lg" disabled>Button</button>
Vorteile
- Große Sammlung von Komponenten
- LESS & SASS Unterstützung
- riesige Community
- rapid prototyping
Nachteile
- große Datei, in den kleineren Projekten fraglich, ob wirklich alle Bootstrap-Komponenten benötigt werden.
- UI/UX Monotonie
- schwer anpassbar
Showcase:
Bulma ist ein freies und Open-Source Frontend-CSS-Framework basierend auf Flexbox. Es enthält auf HTML und CSS basierende Gestaltungsvorlagen für Typografie, Formulare, Buttons, Tabellen, Grid-Systeme, Navigations- und andere Oberflächengestaltungselemente.
Kerninformationen:
- Entwickelt von Jeremy Thomas.
- Erscheinungsjahr - 2016.
- Aktuelle Version: 0.7.4.
- 34,422 Stars in Github.
- Framework size: 129 KB.
Verfügbare Erweiterungen (Extentions): z.B Pricing Tables, Timeline, Calendar usw.
Vorteile
- leicht, schneller Laden von Webseite
- leicht integrierbar in die andere Front-end Frameworks
- sehr anpassbar (415 sass Variablen)
- responsive
- schnell erlenbare Syntax, intuitiv verständliche Klassennamen
Nachteile
- relativ kleinere Community
- schwer integrierbar in die Projekten mit BEM oder SMACSS Conventionen
Showcase:
Neben Code-Conventions wie DRY, Seperation of Concerns oder dem Einrückungsstil gibt es auch im CSS-Raum Festlegungen oder Empfehlungen für Programmierer, wie Bezeichner für Objekte im Quelltext benannt werden sollen. Diese Regelungen oder Naming-Conventions sollen dabei helfen, den Code lesbarer und somit wartbarer zu machen. Dabei werden Namen für Konstrukte, wie Objekte, Funktionen, Klassen und Module im Rahmen der Syntaxbestimmungen nach einheitlichen Regeln gebildet. So ist der Code einfacher wartbar und bringt mehr Konsistenz in der Benutzererfahrung. Im Folgenden werden die drei bekannten Naming-Convention-Style Guides vorgestellt.
BEM - Block-Element-Modifier ist eine Methodologie um gut strukturierte und wiederverwendbare Komponenten zu schaffen. Es dient dazu, eine skaliebare CSS-Architektur aufbauen zu können und ist vergleichbar mit SMACSS oder OOCSS. Dabei werden einzelne Strukturen im DOM nur mit Klassennamen nach einem bestimmten Muster benannt, um den Code leichter lesbar und skalierbarer zu machen.
Prinzipien:
- Alle CSS-Selektoren bestehen aus lediglich je einer Klasse
- Es gibt keine id-Selektoren (
#header {}
) und auch keine Baustein-Selektoren (h2 {}
) - Verschachtelungen jeglicher Art sind nicht erlaubt
Somit besitzt jeder Selektor die gleiche Spezifität und es entscheidet ausschließlich die Reihenfolge im Quelltext, welche Regel greift.
Beispiel Code ohne BEM
HTML
<ul class="navbar">
<li><a href="muster1.html">Über uns</a></li>
<li><a href="vision.html">Vision</a></li>
<li class="active"><a href="kontakt.html">Kontakt</a></li>
</ul>
CSS
ul.navi a {
color: #090;
text-decoration: none;
}
ul.navi .active > a {
color: #000;
}
Beispiel Code mit BEM
HTML
<ul class="navbar">
<li class="navbar__item">
<a class="navbar__link" href="ueberuns.html">Über uns</a>
</li>
<li class="navbar__item">
<a class="navbar__link" href="vision.html">Vision</a>
</li>
<li class="navbar__item navi__item--active">
<a class="navbar__link navbar__link--active" href="kontakt.html">Kontakt</a>
</li>
</ul>
CSS
.navbar__link {
color: #090;
text-decoration: none;
}
.navbar__link--active {
color: #000;
}
Basisregeln:
- Namen setzen sich aus drei Komponenten zusammen: Block, Element und Modifier.
-
Blöcke bezeichnen eine alleinstehende Einheit von Elementen und hängen somit nicht von anderen Blöcken oder Elementen ab. (
class="navbar"
) - Ein Element ist ein Teil eines Blocks. Jedes Element ist semantisch an seinen Block gebunden. (
class="navbar__item", class="navbar__link"
) - Ein Modifier ist eine Modifizierung eines Blocks oder Elements. (
class="navbar__link navbar__link--active"
)
Vorteile:
- flache Struktur der Klassen (keine Verschachtelungen / Vererbungen, keine IDs oder Tags, kein !important) schnelle Übersicht über Kind-Elemente und Modifier
- Abhängigkeit bzw. Zugehörigkeit von CSS-Klassen bereits im Code erkennbar
.navbar__item
hängt von.navbar
ab - einfachere Kommunikation innerhalb eines Teams durch Festlegung einer Syntax
- Wartung und Ergänzung von CSS viel schneller und einfacher
SMACSS - Scalable and Modular Architecture for CSS - ist eine Sammlung von Empfehlung, um CSS organisierter und strukturierter zu schreiben und ist online frei zugänglich. Der Author von SMACSS Jonathan Snook kategorisiert CSS-Regeln um Muster im Code zu kodifizieren und daraufbezogen Regeln für die einzelnen Kategorien zu erstellen. Dadurch wird der CSS-Code und seine Datenstruktur nach Basisregeln, Layoutregeln, Modulregeln und Stateregeln strukturiert.
Vorteile
- Gute, freie Dokumentation
- Weit verbreitet
Nachteile
- Eigentlich nicht für Sass entwickelt (funktioniert aber)
- Man kann einfach von abweichen
Datenstruktur-Beispiel IDE
Benennungsregeln Durch die Aufteilung der Regeln in die fünf Kategorien ist die Namenskonvention von Vorteil, um sofort zu verstehen, zu welcher Kategorie ein bestimmter Stil gehört und welche Rolle er innerhalb des gesamten Umfangs der Seite spielt. Bei großen Projekten ist es wahrscheinlicher, dass die Stile in mehreren Dateien aufgeteilt sind. In diesen Fällen erleichtert die Namenskonvention auch das Auffinden, zu welcher Datei ein Style gehört.
Code-Beispiel
.card
&--label
…
Basisregeln (Base-Rules) Eine Basisregel wird auf ein Element unter Verwendung eines Elementselektors, eines Nachfolgeselektors oder eines Unterselektors sowie beliebiger Pseudoklassen angewendet. Es enthält keine Klassen- oder ID-Selektoren. Es definiert das Standard-Styling, wie dieses Element in allen Vorkommnissen auf der Seite aussehen soll.
Zu den Basis-Stilen gehören die Einstellung von Überschriftengrößen, Standardlinkstilen, Standardschriftarten und Körperhintergründen. Es sollte nicht nötig sein, !important in einem Base Style zu verwenden.
Codebeispiel für Base-Styles
html, body, form {
margin: 0; padding: 0;
}
input[type=text] {
border: 1px solid #999;
}
a {
color: #039;
}
a:hover {
color: #03C;
}
Layout-Styles/Rules Layoutregeln unterteilen die Seite in Abschnitte. Layouts halten ein oder mehrere Module zusammen. Divs, margin und floats betreffend - Element-Selektoren vermeiden
Code-Beispiel
#article {
float: left;
}
#sidebar {
float: right;
}
.l-flipped #article {
float: right;
}
.l-flipped #sidebar {
float: left;
}
.l-grid {
margin: 0;
padding: 0;
list-style-type: none;
}
.l-grid > li {
display: inline-block;
margin: 0 0 10px 10px;
}
Modul-Styles Module sind die wiederverwendbaren, modularen Teile unseres Designs. Sie sind konkrete Komponenten einer Seite, wie Navigationsleisten, Widgets etc. Module befinden sich innerhalb von Layoutkomponenten. Module können manchmal auch in anderen Modulen eingesetzt werden. Jedes Modul sollte so konzipiert sein, dass es als eigenständige Komponente existiert. Dadurch wird die Seite flexibler.
Code-Beispiel
<div class="fld">
<span>Folder Name</span>
</div>
/* The Folder Module */
.fld > span {
padding-left: 20px;
background: url(icon.png);
}
Zustandsregeln (State Rules) Zustandsregeln sind Möglichkeiten, zu beschreiben, wie unsere Module oder Layouts in einem bestimmten Zustand aussehen werden. Ist es versteckt oder erweitert? Ist es aktiv oder inaktiv? Es geht darum, zu beschreiben, wie ein Modul oder Layout auf kleineren oder größeren Bildschirmen aussieht. Es geht auch darum, zu beschreiben, wie ein Modul in verschiedenen Ansichten wie der Homepage oder der Innenseite aussehen könnte.
Code-Beispiel
.tab {
background-color: purple;
color: white;
}
.is-tab-active {
background-color: white;
color: black;
}
Themenregeln (Theme Rules) Die optionalen Themenregeln sind ähnlich wie die Zustandsregeln, da sie beschreiben, wie Module oder Layouts aussehen könnten. Die meisten Websites erfordern jedoch keine Thematisierungsebene. Hierbei werden durch Variablen das Layout und die Darstellung einer Seite je nach Theme gestaltet.
Das OOCSS wurde 2008 von Nicole Sullivan entwickelt. Es nutzt Prinzipien der Object Orientierten Programmierung
- Decoupling
- Single Responsibility Prinzip & Seperation of Concerns
- Encapsulation (für Wiederverwendbarkeit)
Sepeartion of Structure and Skin Dieses Prinzip besagt, dass Struktur-Regelungen, die für den Nutzer “unsichtbar” sind, von den sichtbaren Elementen getrennt beschrieben werden sollen. Zu den unsichtbaren Elementen zählen Height, Width, Margins, Padding und zu den visuellen Elementen gehören Farbe, Font-Family, Shadows und Gradients.
Code-Beispiel Vorher
.button {
width: 150px;
height: 50px;
background: #FFF;
border-radius: 5px;
}
.button-2 {
width: 150px;
height: 50px;
background: #000;
border-radius: 5px;
}
Code-Beispiel mit OOCSS
.button {
background: #FFF;
}
.button-2 {
background: #000;
}
.skin {
width: 150px;
height: 50px;
border-radius: 5px;
}
Seperation of Container and Content Dieses Prinzip besagt, dass Container vom Inhalt der Seite separiert werden sollen. Inhalt bezeichnet hier Elemente, wie Bilder, Paragraphen und Div-Tags, welche innerhalb anderen Elementen (Containern) eingenistet sind.
Code-Beispiel ohne OOCSS
#sidebar {
padding: 2px;
left: 0;
margin: 3px;
position: absolute;
width: 140px;
}
#sidebar .list {
margin: 3px;
}
#sidebar .list .list-header {
font-size: 16px;
color: red;
}
#sidebar .list .list-body {
font-size: 12px;
color: #FFF;
background-color: red;
}
Code-Beispiel mit OOCSS
.sidebar {
padding: 2px;
left: 0;
margin: 3px;
position: absolute;
width: 140px;
}
.list {
margin: 3px;
}
.list-header {
font-size: 16px;
color: red
}
.list-body {
font-size: 12px;
color: #FFF;
background-color: red;
}
Vorteile
- Applikationsgeschwindigkeit
- Skalierbarkeit
- Effizient
- Wartbarkeit
- Lesbarkeit
Nachteile
- Anzahl der Klassen, die einem Element hinzugefügt werden
- Zu viel für kleine Projekte
- Lernzeit hoch
Quelle: keycdn
Präprozessoren: Die Verwendung von Stylesheet-Sprachen, wie Sass oder LESS oder Stylus ermöglichen die Verwendung von Variablen, Funktionen und Operatoren, verschachtelten Selektoren sowie sogenannten Mixins und erweitern die CSS-Sprache.
Vorteile von Präprozessoren:
- CSS wird um die Funktionen ergänzt, die vermisst sind (Variablen, Mixins, Funktionen)
- Stylesheets werden mehr DRY
- Zeitersparnis
- einfachere Wartung & Pflege
- Bessere Organisation des Codes
Responsive Webdesign: Responsives Webdesign appelliert daran Webseiten nicht mehr statisch auszuliefern, sonder danach auszurichten, auf welchem Gerät diese geöffnet wird. Der Client - Browser erkennt somit auf welchen Gerät die Seite geöffnet wird und rendert die CSS-Regeln auf verschiedene Elemente anders.
Mobile First: Beim Mobile First Ansatz besitzt die Darstellung von Webseiten auf mobilen Geräten höchste Priorität. Da mobile Endgeräte immer häufiger für den Verkehr im Netz genutzt werden, sollen Webseiten zuerst für diese Auflösungen optimiert und
DRY: Don't repeat yourself. Das Gestaltungsprinzip "Don't repeat yourself' von Andy Hunts und Dave Thomas besagt, Redundanz zu vermeiden, um die Pflege des Codes zu vereinfachen.
Seperation of Concerns: SoC ist ein Gestaltungsprinzip zur Trennung eines Computerprogramms in verschiedene Abschnitte, so dass jeder Abschnitt ein eigenes Anliegen behandelt.