Kategorie: Developer

  • interaktives und sich selbst updatendes SVG

    interaktives und sich selbst updatendes SVG

    Dieses SVG lädt immer die neusten Artikel von meinem Blog. Damit wäre es möglich Infografiken zu gestalten, die immer die aktuellen Werte haben.

    Man kann es runterladen und lokal öffnen, das SVG verbindet sich dann mit meinem Blog und lädt die Daten.

    Beispiel

    Inital lädt das SVG die neusten Artikel und nach den click auf den Button die älteren.

    download SVG

    Code

    <?xml version="1.0" encoding="utf-8"?>
    <!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
    <svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
    	 viewBox="0 0 595.28 841.89" style="enable-background:new 0 0 595.28 841.89;" xml:space="preserve">
    <style type="text/css">
    	.st0{fill:#FFFFFF;}
    	.st1{fill:#020203;}
    	.st2{fill:none;}
    	.st3{font-family:'MyriadPro-Regular';}
    	.st4{font-size:12px;}
    	.st5{fill:#F39200;}
    </style>
    <rect class="st0" width="595.28" height="841.89"/>
    <g>
    	<g>
    		<path class="st1" d="M306.2,36.53v-0.04H191.63v0.05c-23.45,0.96-42.18,20.26-42.18,43.95s18.72,43,42.18,43.96v0.01h0.33
    			c0.49,0.02,0.99,0.04,1.49,0.04s0.99-0.02,1.49-0.04h108.03c0.49,0.02,0.99,0.04,1.49,0.04s0.99-0.02,1.49-0.04h0.26v-0.01
    			c23.49-0.92,42.25-20.24,42.25-43.96C348.45,56.78,329.69,37.46,306.2,36.53z M305.11,113.49c-18.22,0-33-14.77-33-33
    			c0-18.22,14.78-33,33-33c18.23,0,33,14.78,33,33C338.12,98.71,323.34,113.49,305.11,113.49z"/>
    	</g>
    	<g>
    		<path class="st1" d="M71.3,124.43V36.51h30.79c10.67,0,18.76,2.04,24.27,6.13c5.52,4.09,8.27,10.07,8.27,17.96
    			c0,4.31-1.11,8.1-3.32,11.38c-2.21,3.28-5.29,5.69-9.24,7.22c4.51,1.13,8.06,3.4,10.66,6.82c2.6,3.42,3.89,7.61,3.89,12.56
    			c0,8.45-2.7,14.85-8.09,19.2c-5.39,4.35-13.08,6.56-23.07,6.64H71.3V124.43z M89.41,73.35h13.4c9.14-0.16,13.71-3.8,13.71-10.93
    			c0-3.99-1.16-6.85-3.47-8.6s-5.97-2.63-10.96-2.63H89.41V73.35z M89.41,86.15v23.73h15.52c4.27,0,7.6-1.02,9.99-3.05
    			c2.39-2.03,3.59-4.84,3.59-8.42c0-8.05-4.17-12.14-12.5-12.26C106.01,86.15,89.41,86.15,89.41,86.15z"/>
    	</g>
    	<g>
    		<path class="st1" d="M382.6,109.88h38.46v14.55h-56.58V36.51h18.12V109.88z"/>
    	</g>
    	<g>
    		<path class="st1" d="M451.49,124.49h-18.12V36.58h18.12V124.49z"/>
    	</g>
    	<g>
    		<path class="st1" d="M517.94,86.4h-34.78v23.55h40.82v14.55h-58.94V36.58h58.81v14.67h-40.7v20.95h34.78v14.2H517.94z"/>
    	</g>
    </g>
    <rect x="70" y="157" class="st2" width="454" height="624"/>
    <text transform="matrix(1 0 0 1 70 165.52)">
      <tspan x="0" y="0" class="st3 st4" id="title">neuste Artikel:</tspan>
      <tspan x="0" y="15" class="st3 st4" id="article1"></tspan>
      <tspan x="0" y="25" class="st3 st4" id="article2"></tspan>
      <tspan x="0" y="35" class="st3 st4" id="article3"></tspan>
      <tspan x="0" y="45" class="st3 st4" id="article4"></tspan>
      <tspan x="0" y="55" class="st3 st4" id="article5"></tspan>
    </text>
      <script type="text/javascript"><![CDATA[
      function loadnew() {
        page++;
        var url = "https://boolie.org/wp-json/wp/v2/posts/?per_page=5&page="+page;
    	const Http = new XMLHttpRequest();
    Http.open("GET", url);
    Http.send();
    var title = document.getElementById("title");
    Http.onreadystatechange = (e) => {
      var content = JSON.parse(Http.responseText);
      title.textContent = "Seite: "+page;
      article1.textContent = content[0].link;
      article2.textContent = content[1].link;
      article3.textContent = content[2].link;
      article4.textContent = content[3].link;
      article5.textContent = content[4].link;
    }
      }
      ]]></script>
    <rect x="130" y="745" class="st5" width="340" height="58" onclick="loadnew()"/>
    <rect x="130" y="768" class="st2" width="340" height="35"/>
    <text transform="matrix(1 0 0 1 252.9009 776.5195)" class="st3 st4" id="loadArticle" onclick="loadnew()">älteren Artikel laden</text>
      <script type="text/javascript"><![CDATA[
        var page = 1;
        var url = "https://boolie.org/wp-json/wp/v2/posts/?per_page=5&page="+page;
    	const Http = new XMLHttpRequest();
    Http.open("GET", url);
    Http.send();
    
    var article1 = document.getElementById("article1");
    var article2 = document.getElementById("article2");
    var article3 = document.getElementById("article3");
    var article4 = document.getElementById("article4");
    var article5 = document.getElementById("article5");
    
    Http.onreadystatechange = (e) => {
      var content = JSON.parse(Http.responseText);
      article1.textContent = content[0].link;
      article2.textContent = content[1].link;
      article3.textContent = content[2].link;
      article4.textContent = content[3].link;
      article5.textContent = content[4].link;
    }
      ]]></script>
    </svg>
    
  • CSS: Checkbox styling

    CSS: Checkbox styling

    In diesem Beitrag zeige ich, wie man Checkboxen selektiert und stylen kann. Ich werde die System-Schaltflächen ausblenden und mit CSS selbst gestaltete hinzufügen.

    HTML Code

    Vorab erstmal den HTML Code für eine Checkbox und das Label

    <input id="confirm" type="checkbox" /><label for="confirm">Label content</label>

    einfaches Viereck erstellen

    Zum einfügen des Vierecks verwende ich das ::before Statement, es fügt vor dem ausgewählten HTML Objekt ein Element hinzu.

    [type="checkbox"] + label {
      position: absolute;
    }
    [type="checkbox"] {
      position: relative;
      left: 15px;
      top: -4px;
      z-index: 0;
      -webkit-appearance: none;
    }
    [type="checkbox"] + label::before {
      width: 15px;
      height: 15px;
      background-color: #000;
      display: block;
      content: "";
      float: left;
      margin-right: 5px;
      z-index: 5;
      position: relative;
    }

    Statuswechsel anzeigen

    Damit für den Benutzer die Änderung sichtbar wird, soll die Farbe auf Rot wechseln, wenn die Checkbox angeklickt wird.

    input[type="checkbox"]:checked+label::before {
      background-color: #c72f2f;
    }

    erweitertes Styling

    Mit ein par weiteren CSS Eigenschaften kann man mit CSS sich schöne Buttons erstellen.

    [type="checkbox"] {
      position: relative;
      left: 15px;
      top: -4px;
      z-index: 0;
      -webkit-appearance: none;
    }
    [type="checkbox"] + label {
      position: absolute;
    }
    [type="checkbox"] + label::before {
      width: 15px;
      height: 15px;
      border-radius: 5px;
      border: 2px solid #8cad2d;
      background-color: #fff;
      display: block;
      content: "";
      float: left;
      margin-right: 5px;
      z-index: 5;
      position: relative;
    }
    [type="checkbox"]:checked+label::before {
      box-shadow: inset 0px 0px 0px 3px #fff;
      background-color: #8cad2d;
    }

    checked mit Bildern

    Es ist auch möglich ein Bild zu verwenden, das Bild als background-image setzen und schon wird es verwendet.

    [type="checkbox"] + label {
      position: absolute;
    }
    [type="checkbox"] {
      position: relative;
      left: 15px;
      top: -4px;
      z-index: 0;
      -webkit-appearance: none;
    }
    [type="checkbox"] + label::before {
      width: 22px;
      height: 18px;
      background-image: url("unchecked.png");
      display: block;
      content: "";
      float: left;
      margin-right: 5px;
      z-index: 5;
      position: relative;
    }
    [type="checkbox"]:checked+label::before {
      background-image: url("checked.png");
    }

    Checkbox wie ein Switch

    [type="checkbox"] {
      position: relative;
      left: 30px;
      top: 0px;
      z-index: 0;
      -webkit-appearance: none;
    }
    [type="checkbox"] + label {
      position: relative;
      display: block;
      cursor: pointer;
      font-family: sans-serif;
      font-size: 24px;
      line-height: 1.3;
      padding-left:70px;
      position: relative;
      margin-top: -30px;
    }
    [type="checkbox"] + label:before {
      width: 60px;
      height: 30px;
      border-radius: 30px;
      border: 2px solid #ddd;
      background-color: #EEE;
      content: "";
      margin-right: 15px;
      transition: background-color 0.5s linear;
      z-index: 5;
      position: absolute;
      left: 0px;
    }
    [type="checkbox"] + label:after {
      width: 30px;
      height: 30px;
      border-radius: 30px;
      background-color: #fff;
      content: "";
      transition: margin 0.1s linear;
      box-shadow: 0px 0px 5px #aaa;
      position: absolute;
      left: 2px;
      top: 2px;
      z-index: 10;
    }
    [type="checkbox"]:checked + label:before {
      background-color: #2b8718;
    }
    [type="checkbox"]:checked + label:after {
      margin: 0 0 0 30px;
    }

    CSS Tutorial

    Voriger Schritt: CSS mehrere Transition versetzt starten

    Zur Turtorial-Reihe: CSS Tutorial

    Nächster Schritt: CSS Übungsaufgaben [Animation & Verlauf]

  • CSS Übungsaufgaben [Animation & Verlauf]

    CSS Übungsaufgaben [Animation & Verlauf]

    Ich habe ein paar CSS Fingerübungen geschrieben, hier kannst du diese nachmachen und dein CSS Wissen erweitern bzw. abfragen.

    Animiertes Burger Menü

    Aufgabe: Es soll ein animiertes Burger Menü-Icon erstellt werden. In diesem Beispiel bei einem hover Event ausgelöst werden.
    Hamburger Menü Animation Lösung

    Wiederholung Menu Animation

    Aufgabe: Ein Burger Menu, soll zu einem Pfeil transformieren.
    CSS Burger Arrow Menu Lösung

    Animiertes Input-Text-Feld mit Validation

    Aufgabe: Es soll ein Inputfeld erstellt werden, wenn man drauf klickt, soll das Label nach oben sliden und die Farbe bei der Validierung ändern.
    Textinput Animation Lösung

    Text mit Verlauf

    The quick brown fox jumps over the lazy dog

    Aufgabe: Es soll ein Text mit einem Verlauf gefüllt werden.
    CSS Verlauf im Text Lösung

    Warnsignal Animation

    Aufgabe: Animiere ein Farb- Transparent- Verlauf so, dass es wie ein Alarm aussieht.
    CSS animieter Alarm Lösung

    Kombination aus den letzten beiden Übungen

    The quick brown fox jumps over the lazy dog

    Aufgabe: Animiere einen Text so, dass es so aussieht, als ob ein Scan durchgeführt wird.
    CSS Scan-Text Animation Lösung

    SVG Animation

    cat svg animation

    Dem zu animierenden Objekt im SVG eine ID geben und diese mit CSS animieren.

    <path id="cat_head" d="M244.4,0l-21.2,12.2l-10.9,6.3c-3.8-1.2-7.8-1.9-12-1.9c-5.3,0-10.3,1-14.8,2.9l-8.3-4.8L156,2.5l3.9,24.1l3.9,23.8
               c0.1,18.5,16.4,33.4,36.5,33.4c20.2,0,36.5-15.1,36.5-33.6c0-1-0.1-1.9-0.1-2.9l3.8-23.2L244.4,0z M183,48c-5.3,0-9.5-3.2-9.5-7.1
               c0-3.9,4.3-7.1,9.5-7.1s9.5,3.2,9.5,7.1C192.5,44.8,188.3,48,183,48z M216,46.9c-5.3,0-9.5-3.2-9.5-7.1s4.3-7.1,9.5-7.1
               s9.5,3.2,9.5,7.1S221.3,46.9,216,46.9z"/>
    #cat_head{
      animation: headbang 2s ease infinite alternate;
    }
    @keyframes headbang {
      0% {
        transform: rotate(5deg);
        transform-origin: 90% 30%;
      }
      100% {
        transform: rotate(-5deg);
        transform-origin: 70% 30%;
      }
    }

    CSS Tutorial

    Voriger Schritt: CSS: Checkbox styling

    Zur Turtorial-Reihe: CSS Tutorial

    Nächster Schritt: responsive Navigation mit Burgermenü

  • Java Script Tutorial

    Java Script Tutorial

    In dieser Tutorial-Reihe lernst du die Grundlagen von Java Script. Von praktischen Übungen bis zur Theorie stelle ich dir, mein Wissen, kostenlos zur verfügung.

    Was ist Java Script?

    Java Script ist, wie der Name schon verrät, eine Scriptsprache, die überwiegend im Browser Verwendung findet. Sie kann CSS und HTML manipulieren und ermöglicht dadurch eine dynamische Website. Ein sehr bekanntes, aber unbeliebtes Beispiel, ist der Cookie Banner. Mit dem bestätigen der Cookies, lädt Java Script die einzelnen Scripte nach und speichert Cookies.

    Seit einigen Jahren expandiert Java Script, es kann damit eine App programmiert werden oder im Backend auf dem Server laufen, um z.B. Datenbankanfragen zu tätigen. 2015 kam ein großen Update zu JavaScript und ist unter ES6 bekannt, es hat die Sprache auf ein höheres Level gehoben.

    aktueller Standard – ES6

    Javascript ES6

    ES6 ist die Abkürzung für ECMAScript 6, ES6 ist der Zukünftige Standard für die Ausführung von JavaScript in aktuellen und kommenden Browsern und Servern. Zum Tutorial: JS ES6 Tutorial.

    Java Script und OOP

    JavaScript OOP Teaser

    Mit JavaScript ist es möglich Objekt Orientiert zu programmieren (OOP). Dies bedeutet das der Code eine modulare Struktur aufweist, der Vorteil bei dieser Programmierart ist die Wartbarkeit sowie die Erweiterbarkeit. Zum JavaScript: OOP – Klassen, Methoden und Vererbung Tutorial.

    Rekursion in JS

    Was ist rekursives Programmieren

    Kurz gesagt rekursives Programmieren bedeutet, dass eine Funktion oder Methode sich selbst aufruft. In diesem Tutorial findest du alles, was du wissen musst: Was ist rekursives Programmieren?.

    JS Hack: Clonen und manipulieren

    Javascript Funktionen clonen

    In Java Script ist es möglich Funktionen in eine Variable zu speichern und die Originale Funktion zu überschreiben. Dies ermöglicht es z.B. bei einem Videoplayer den Playbutton zu tracken. Zum JavaScript: Funktionen klonen & manipulieren Tutorial.

    Continue

    Was ist continue?

    In Schleifen können Labels gesetzt werden, dies sind Markierungen vor einer Schleife. Mit continue springt man zu diesem Label vor einer Schleife. Zum Tutorial: JavaScript – Was ist continue?.

    Zauberei

    JavaScript Sammlung Teaser

    Kleine Sammlung was JavaScript so alles kann. Zur Sammlung: JavaScript Magie.

    interaktive SVG

    svg interaktiv mit js

    Mit JavaScript kann man SVG’s interaktiv machen, z.B. Daten nachladen oder Schaltflächen einbauen. Bei diesem Beispiel lädt das SVG die neusten Artikel von diesem Blog und zeigt diese an. interaktives und sich selbst updatendes SVG

    geplante Tutorials 2021/22

    • Query Seletoren
    • JQuery
    • Basics (Variablen, if Bedinungen, rechnen, Schleifen, Funktionen)
    • Debuggen
    • Async / Sync
    • verketten
    • API
  • CSS Tutorial

    CSS Tutorial

    In dieser Tutorial-Reihe erkläre ich dir, das Basiswissen von CSS. Von Typografie bis zum Layout bekommst du hier, das Basiswissen, vermittelt.

    Was ist CSS?

    CSS ist eine Gastaltungs und Formatierungssprache, mit dieser Sprache kann man HTML Elemente stylen. Mit CSS kannst du Schrift, Farbe und Form einer Website definieren. CSS wird von allen Browser unterstützt und ist somit ein Web-Standart, den Standart definiert die World Wide Web Consortium. Der große Vorteil von CSS ist, es kann der Inhalt vom gestalterischen getrennt werden. Dadurch gewinnt man bei einer Website eine übersichtlichkeit und kann eine klare Struktur aufbauen.

    CSS Tutorials

    Styles definieren

    CSS Styles definieren

    Übersicht, wie du Styles auf HTML-Elemente anwendest. Von der Klasse bis zum hover Effekt. CSS Styles definieren

    Kombinationsmöglichkeiten in CSS

    CSS Klassen kombinieren Teaser

    Anleitung, wie du verschiedene Selektoren miteinander verknüpfst. Des weiteren eine Übung, wie du ein Teaser-Element baust. CSS Klassen kombinieren.

    das Flexbox System

    css flexbox tutorial teaser mit code

    Mit Flexbox kannst du die Website designen und gestalten. Mit diesem System ist es möglich ein dynamisches Design zu erstellen, sprich es passt sich der Bildschirmgröße an. CSS Flexbox Tutorial.

    Transitions versetzt starten

    CSS Transition Teaser

    Mit transitions kannst du einfache Animationen, mit CSS, erstellen. In diesem Tutorial, zeige ich dir, wie du diese verketten kannst und mehrere Effekte aneinander reihst CSS mehrere Transition versetzt starten.

    Checkbox stylen

    css checkbox styling

    Formelemente mit CSS zu stylen ist nicht gerade einfach, da dies Systemschaltflächen sind. Deswegen am Beispiel der Schwersten Schaltfläche ein Tutorial, wie du das Design änderst CSS: Checkbox styling.

    responsive Tabelle

    Simpler Hack wie man mit CSS und einem Wrapper eine Tabelle responsive macht (auf mobilen ‚Geräten horizontal scroll). CSS: responsive Tabellen

    Übungsaufgaben

    css animation verlauf uebungsaufgaben_teaser

    Ich habe ein paar CSS Fingerübungen geschrieben, hier kannst du diese nachmachen und dein CSS Wissen erweitern bzw. abfragen. CSS Übungsaufgaben [Animation & Verlauf]

    responsive Navigation mit Burgermenü

    teaser css navigation responsiv_v2

    Mit diesem Tutorial lernst du, wie du mit HTML/CSS eine responsive Navigation baust. Zum ein- und ausklappen der mobilen Navigation hast du ein Burger-Icon. responsive Navigation mit Burgermenü

    geplante Tutorials 2021

    • CSS in HTML einbinden
    • das Grid Stystem
    • Animationen mit CSS
    • Formelemente stylen
    • Pseudoklassen
    • Typografie/Schrift definieren
    • Farben und Verläufe
    • CSS Debuggen
  • LESS Tutorial

    LESS Tutorial

    LESS ist eine „Programmiersprache“, aus der CSS generiert werden kann. Die Sprache erweitert sozusagen CSS mit Funktionen und Variablen, wenn du tiefer eintauchst, wirst du noch Mixins kennen lernen und dir gewünscht haben, schon immer mit LESS gearbeitet zu haben.

    LESS Vorteile gegenüber von CSS

    Die 2 größten Vorteile für Anfänger sind Funktionen und Variablen, dadurch kann man CSS übersichtlicher und dynamischer machen. Du kannst z.B. ein Farbwert in eine Variable speichern und verwendest im restlichen LESS Code diese Variable, falls du dann mal eine neue Farbgebung ausprobieren möchtest, brauchst du nur die Variable zu ändern und an allen LESS Code Stellen wird dieser Farbwert benutzt. Man kann Funktionen definieren, z.B. einen Kreis zeichnen, an diese Funktion wird dann, über ein Parameter, ein Farbwert übergeben und diese Funktion generiert dann einen, immer gleichgroßen, Kreis mit unterschiedlichen Farben. Ich verwende auf meiner Website Funktionen um einen Schatteneffekt in allen Browser unterschiedlichen Werten zu generieren.

    .shadow(@param) {
      -webkit-box-shadow: @param;
      -moz-box-shadow:    @param;
      box-shadow:         @param;
    }

    Ich habe ein kleines Tool programmiert, mit diesem kannst du LESS Code ausprobieren: LESS im Browser compilieren.

    Tutorials zu LESS

    installieren, compilieren und minimieren

    LESS installieren & anwenden

    Um auf deinem Computer LESS Code zu CSS Compilieren, benötigst du Node.js und das dazugehörige Paket. Wie du die Programme installierst und den ersten LESS Code compilierst, lernst du in diesem Tutorial: LESS installieren und anwenden.

    in mehrere Dateien aufteilen

    LESS Dateien importieren

    Um in großen Projekten dein Code übersichtlich zu halten, empfiehlt es sich, den Code auf mehrere Dateien zu verteilen. Am besten eine Datei für Variablen, eine für Mixins und dann pro Feature eine Datei (Header, Footer oder Autorenbox). LESS Dateien importieren

    LESS Variablen

    LESS Variablen

    Das beste an LESS, die Variablen. In kürzester Zeit, das komplette Farbschema der Seite überarbeiten. LESS Variablen

    Mixins

    LESS Mixins Teaser

    Hier ist der Part für Fortgeschrittene, die Mixins. Du kannst damit ganze CSS Eigenschaften Vordefinieren und an eine Klasse dranhängen, des weiten sind Mixins über Parameter dynamisch gestaltbar. LESS Mixins

  • Vue.js – ein Projekt erstellen

    Vue.js – ein Projekt erstellen

    Zuerst muss ein Projekt über das CLI erstellt werden, dafür muss natürlich die CLI von Vue.js installiert werden. Danach speichern wir, das Prjekt, in eine GitHub Repo.

    CLI installieren

    Um die CLI von Vue.js zu installieren benötigst du NPM, NPM ist ein Paket-Verwalter. Diesen bekommst du wenn du Node.js installierst download (am besten LTS). Jetzt brauchst du noch eine vernünftige Konsole, GIT Bash ist dafür am besten geeignet, weil diese auch Linux Befehle unterstützt (download).

    Falls was nicht klappen will, starte deinen Rechner mal neu.

    Öffne jetzt die GIT Bash und installiere Vue.js CLI mit folgenden Befehl:

    npm install -g @vue/cli
    > core-js@2.6.10 postinstall C:\Users\Marc\AppData\Roaming\npm\node_modules\@vue\cli\node_modules\babel-polyfill\node_modules\core-js
    > node postinstall || echo "ignore"
    
    Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
    
    The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
    > https://opencollective.com/core-js
    > https://www.patreon.com/zloirock
    
    Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)
    
    
    > core-js@2.6.10 postinstall C:\Users\Marc\AppData\Roaming\npm\node_modules\@vue\cli\node_modules\babel-runtime\node_modules\core-js
    > node postinstall || echo "ignore"
    
    
    > core-js@3.4.5 postinstall C:\Users\Marc\AppData\Roaming\npm\node_modules\@vue\cli\node_modules\core-js
    > node -e "try{require('./postinstall')}catch(e){}"
    
    
    > @apollo/protobufjs@1.0.3 postinstall C:\Users\Marc\AppData\Roaming\npm\node_modules\@vue\cli\node_modules\@apollo\protobufjs
    > node scripts/postinstall
    
    
    > nodemon@1.19.4 postinstall C:\Users\Marc\AppData\Roaming\npm\node_modules\@vue\cli\node_modules\nodemon
    > node bin/postinstall || exit 0
    
    Love nodemon? You can now support the project via the open collective:
     > https://opencollective.com/nodemon/donate
    
    
    > ejs@2.7.4 postinstall C:\Users\Marc\AppData\Roaming\npm\node_modules\@vue\cli\node_modules\ejs
    > node ./postinstall.js
    
    Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)
    
    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules\@vue\cli\node_modules\fsevents):
    npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
    
    + @vue/cli@4.1.1
    added 1098 packages in 131.08s
    

    1098 Pakete installiert, jetzt können wir starten

    Projekt erstellen

    Navigiere nun in dein Projekt-Verzeichnis, bei mir ist es ein Projekte Ordner auf dem Desktop.

    cd Desktop/Projekte

    Erstelle nun über die CLI ein neues Projekt.

    vue create todo-pwa

    Bestätige jetzt die Frage, ob du ESLint und Babel verwenden willst, mit Enter.
    Jetzt musst du kurz warten bis alle Pakete installiert sind.
    Navigiere jetzt in den erstellten Ordner mit cd.

    cd todo-pwa

    Um zu testen ob alles geklappt hat führe „npm run serve“ aus.

    npm run serve

    Es müsste eine Armee aus Statusmeldungen folgen und zum Schluss eine Infobox in der steht das der Server gestartet ist und unter „http://localhost:8080/“ zu finden ist.

    first run vuejs

    Öffne nun dein Editor (ich verwende Atom download) und analysiere den generierten Code.

    todo pwa structure

    Code auf GitHub hochladen

    Wie Git & GitHub funktionieren habe ich in einem anderen Artikel beschrieben, deswegen gehe darauf nicht weiter ein.

    Kurze Anleitung:

    1. Repo erstellen
    2. Remote Config setzen
    3. pushen
    git remote add origin https://github.com/Snowflame/Vue-ToDo-PWA.git
    git push -u origin master

    pwa pushed to github

    Syntax highlighting

    Um im Atom Editor die Vue Templates richtig anzeigen zu lassen, musst du diesen kleinen Hack machen: File -> Config… ->

      core:
        customFileTypes:
          'text.html.basic': [
            'vue'
        ]

    unten an die Config hängen.

  • Vue.js ToDo PWA Tutorial

    Vue.js ToDo PWA Tutorial

    Ich habe mich bei einer Firma in Dresden, als React Entwickler, beworben. Um meine Flexibilität und Adaption von Neuem zu testen soll ich eine ToDo App in Vue.js entwickeln. In diesem Artikel beschreibe ich mein Vorgehen, wie ich die App plane.

    Die Aufgabe

    Die Aufgabe ist eine To-Do-App (Kurzbeschreibung, Fälligkeitsdatum, Unerledigt /Erledigt) mit ganz einfacher Funktionalität (Task hinzufügen / editieren / löschen). Die Umsetzung soll als Progressive Web App (PWA) mit dem JS-Framework Vue.Js und Material Design entwickelt werden. Die PWA soll sowohl auf einem Desktop als auch auf einem Smartphone bedienbar sein. (Responsive). Dabei soll so wenig wie möglich eigener CSS-Code geschrieben werden. Optische Vorgaben gibt es keine, da kannst du dich frei entfalten. Der Fokus liegt aber nicht auf dem Design, sondern auf der technischen Umsetzung. Bitte lege mind. einen Test an. Die Anwendung soll zusätzlich um 2 PWA-Features erweitert werden:

    1. Die Daten sollten im Local Storage des Browsers gespeichert werden.
    2. Wenn das Fälligkeitsdatum erreicht ist, sollte eine Push-Notification gesendet werden.

    Ergebnis

    Code: GitHub
    Demo: Demo

    Frameworks finden

    Als nächsten Schritt habe ich rausgesucht wie man eine PWA in Vue.js baut, dazu werde ich das CLI von NPM benutzen, mit der man eine Beispiel-PWA generieren kann. NPM CLI

    Jetzt fehlt noch das Material Design, ich habe mich entschieden ein NPM Paket zu verwenden, sprich im Internet nach „NPM Material Design Vue.js“ gesucht und auch sofort fündig geworden. Vue Material

    Die Push Notifications werde ich nativ implementieren, ähnlich wie der local Storage im Beispiel Code.

    Tutorials

    1. Projekt erstellen
    2. Klickdummy erstellen
  • JavaScript Magie

    JavaScript Magie

    Kleine Sammlung was JavaScript so alles kann.

    Funktion als return

    function Samstag() {
        return () => alert("Moin");
    }
    Samstag()();
    function startHealthCheck() {
      const id = setInterval( () => console.log("i'm alive", 200) );
      return () => clearInterval(id);
    }
    
    const stopIt = startHealthCheck();
    setTimeout(() => stopIt(), 3000);

    Funktion als Parameter mit zusätzlichen Argumenten

    function Sonntag(f) { 
      return (...args) => {
        console.log("called", args);
        let result = f(...args);
        console.log("called", args, ", returned", result);
        return result;
      };
    }
    Sonntag(Math.min)(3, 2, 1)

    Funktionen Zwischenspeichern

    let Montag = () => {
      console.log("Moin");
    }
    
    let MontagClone = Montag;
    
    Montag = () => {
      console.log("Hello");
      MontagClone();
    }
    
    Montag();
    Montag = MontagClone;
    Montag();

    rekursive Funktionen

    function factorial(n) { 
      if (n == 0) { 
        return 1; 
      } else { 
        return factorial(n - 1) * n; 
      } 
    }
    
    factorial(8)

    Array Wandler

    const Dienstag = (...nummern) => (nummern);
    Dienstag(1,2,3);
    [1,2,3]

    Summe der Argumente multipliziert mit Argument

    const Mittwoch = a => { return (...args) => { return a * args.reduce((b, c) => b + c) }};
    Mittwoch(4)(10,15);
    100

    Rekursion mit abbruch Funktion

    const a = b => { 
      return c => {
        return (c(b)) ? a(b * b)(c) : b
      }
    };

    Easymode

    const func = function(number) { 
      return function(argFunc) {
        if(argFunc(number)) {
          return func(number * number)(argFunc);
        } else {
          return number;
        }
      }
    };
    func(5)(function(number){
      return number < 50
    });
    625

    Hardmode

    const a = b => c => (c(b)) ? a(b * b)(c) : b;
    a(5)(b => b < 50);
    625

    rekursive Iframes

    function fuckUp(func){
    var id = Math.random();
    ifrm = document.createElement("IFRAME");
    ifrm.setAttribute("src", window.location.href+"?"+id);
    ifrm.style.width = 250+"px";
    ifrm.style.height = 250+"px";
    ifrm.id = id;
    code = document.createElement("script");
    code.innerHTML = "("+func.toString()+")("+func.toString()+");";
    ifrm.addEventListener('load', () => {document.getElementById(id).contentDocument.body.appendChild(code)}, true);
    document.body.appendChild(ifrm);
    }
    fuckUp(fuckUp);

    Hast du noch ein lustiges Script das hier aufgeführt werden sollte? Kommentar bitte

  • CSS Flexbox Tutorial

    CSS Flexbox Tutorial

    Flexbox ist der moderne Weg eine Seite zu layouten. Anhand von Beispielen zeige ich dir, wie du dynamische Element-Größen erstellst. Die Idee hinter Flexbox ist das dynamische Ändern von Größen der Unterelemente, damit die beste Größe benutzt wird. Der Flex Container passt sich dem verfügbaren Platz an und vergrößert bzw. verkleinert die Unterelemente.

    Ich zeige dir Anhand von Design, Produktübersicht und Gallery wie du mit Flexbox arbeiten kannst. Des weiteren erhälst du noch eine Übersicht aller Flexbox Eigenschaften und den Beschreibungen.

    Übersicht

    1. Basics
    2. Produktübersicht Beispiel
    3. Eigenschaften Container
      1. flex
      2. flex-direction
      3. flex-wrap
      4. justify-content
      5. align-items

    Basics

    Flex setzt sich aus einem Container und den Elementen zusammen. Dabei ist zu beachten, dass der Flex-Container nur eine Ebene unter sich selbst wirksam ist. Wenn du ein Container hast, werden nur die direkten Unterelemente davon etwas mitbekommen, die Elemente die in den Elementen sind bekommen nichts von Flex mit.

    <div class="flex-container">
      <div class="flex-element"></div>
      <div class="flex-element"></div>
      <div class="flex-element"></div>
    </div>

    Flexbox containerinfo

    Produktübersicht Beispiel

    In diesem Beispiel sollen 10 Produkte angezeigt werden. Die Kacheln sollen alle gleich Groß sein und den selben Abstand zwischen den Kacheln und dem Rand haben.

    Schritt 1 – die HTML Struktur

    Zuerst brauchen wir die HTML Struktur, die ein Container aufweist und 10 Produkt Kacheln.

      <div class="flex-container">
        <div class="product-tile">
          <img src="zucker.jpg" alt="Karotten">
          <h2>Zucker</h2>
          <span>1,10 €</span>
        </div>
        <div class="product-tile">
          <img src="milch.jpg" alt="Karotten">
          <h2>Milch</h2>
          <span>1,00 €</span>
        </div>
        <div class="product-tile">
          <img src="mandeln.jpg" alt="Karotten">
          <h2>Mandeln</h2>
          <span>4,00 €</span>
        </div>
        <div class="product-tile">
          <img src="käse.jpg" alt="Karotten">
          <h2>Käse</h2>
          <span>2,50 €</span>
        </div>
        <div class="product-tile">
          <img src="karotten.jpg" alt="Karotten">
          <h2>Karotten</h2>
          <span>2,00 €</span>
        </div>
        <div class="product-tile">
          <img src="fleisch.jpg" alt="Karotten">
          <h2>Fleisch</h2>
          <span>6,00 €</span>
        </div>
        <div class="product-tile">
          <img src="erdbeeren.jpg" alt="Karotten">
          <h2>Erdbeeren</h2>
          <span>3,10 €</span>
        </div>
        <div class="product-tile">
          <img src="eier.jpg" alt="Karotten">
          <h2>Eier</h2>
          <span>1,80 €</span>
        </div>
        <div class="product-tile">
          <img src="brot.jpg" alt="Karotten">
          <h2>Brot</h2>
          <span>2,40 €</span>
        </div>
      </div>

    Das sieht dann im Browser wie folgt aus: Produktübersicht plain HTML

    Schritt 2 – CSS Magic

    Jetzt stylen wir die Kacheln und den Container so, dass er nach einer ordentlichen Produktübersicht aussieht.

        .flex-container {
          display: flex;
          justify-content: space-between;
          flex-flow: row wrap;
          align-content: stretch;
          align-items: stretch;
        }
        .product-tile {
          border: 2px solid black;
          flex-grow: 1;
          flex-shrink: 1;
          flex-basis: 150px;
          margin: 0 12px 24px;
          flex-flow: row wrap;
          align-content: flex-start;
        }
        img {
          width: 100%;
        }

    Nach dem übertragen der CSS Attribute sieht dann unsere Produktübersicht wie folgt aus: Produktübersicht mit css flexbox

    Schritt 3 – leere Kacheln

    Das ist aber noch nicht das Ergebnis das wir haben wollen, es sollen alle Kacheln gleich groß sein und sollen den gleichen Abstand zu einander haben. Dafür werden leere Kacheln benötigt, am besten so viele wie Kacheln selbst vorhanden sind, aber ich rechne immer mit 2000px / Kachelbreite (Flex Basis). Sprich unsere Kachelbasis ist 150px deswegen brauchen wir jetzt 2000/150 = 13,3 Kacheln… sicher ist sicher also lieber 14.

    
        <div class="product-tile">
          <img src="brot.jpg" alt="Karotten">
          <h2>Brot</h2>
          <span>2,40 €</span>
        </div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>
        <div class="product-tile"></div>

    Jetzt müssen die leeren Kacheln noch unsichtbar werden.

    .product-tile:empty {
      order: 999999999999999999999;
      height: 0;
      border: 0;
    }

    Produktübersicht mit css flexbox und leeren tiles
    Demo öffnen

    Eigenschaften Container

    Display Flex

    Definiert den Container als Flex

    .container {
      display: flex;
    }

    Alternativ kann auch flex-inline verwendet werden. Wenn es als Layout verwendet werden soll, nimmt man flex. Wenn es z.B. in einem Artikel oder Navigation verwendet wird, nimmt man flex-inline.

    .container {
      display: flex-inline;
    }

    flex-direction

    Mit flex-direction gibt man die Flußweise an, z.B bei row fließen die Elmente von links nach rechts, bei row-reverse von rechts nach links, bei column von oben nach unten und bei column-reverse von unten nach oben.

    flex-direction: row

        .flex-container {
          display: flex;
          flex-direction: row;
        }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    flex-direction: row-reverse

    .flex-container {
      display: flex;
      flex-direction: row-reverse;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    flex-direction: column

    .flex-container {
      display: flex;
      flex-direction: column;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    flex-direction: column-reverse

    .flex-container {
      display: flex;
      flex-direction: column-reverse;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    flex-wrap

    Flex Wrap gibt ann wie die Elemente umbrechen. Sprich bei nowrap werden alle Elemente in einer Zeile angezeigt und werden gequetscht. Bei wrap werden die Elemente umgebrochen, wenn sie die Breite erreicht haben fängt eine neue Zeile an. wrap-reverse macht das gleiche wie wrap, bloß die Elemente werden invertiert, sprich das letzte Element wird als erstes Angezeigt und die Zeilen werden von unten nach oben aufgefüllt.

    flex-wrap: nowrap

    .flex-container {
      display: flex;
      flex-wrap: nowrap;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    flex-wrap: wrap

    .flex-container {
      display: flex;
      flex-wrap: wrap;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    flex-wrap: wrap-reverse

    .flex-container {
      display: flex;
      flex-wrap: wrap-reverse;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    justify-content

    Justify Content definiert den Platz zwischen den Elementen. Sprich es berechnet die dynamischen Abstände zwischen den Elementen wenn diese an der Hauptachse ausgerichtet sind.

    css justfy content Diagramm

    justify-content: flex-start

    .flex-container {
      display: flex;
      justify-content: flex-start;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    justify-content: flex-end

    .flex-container {
      display: flex;
      justify-content: flex-end;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    justify-content: center

    .flex-container {
      display: flex;
      justify-content: center;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    justify-content: space-between

    .flex-container {
      display: flex;
      justify-content: space-between;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    justify-content: space-around

    .flex-container {
      display: flex;
      justify-content: space-around;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    justify-content: space-evenly

    .flex-container {
      display: flex;
      justify-content: space-evenly;
    }
    Zucker
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    Mandeln
    Mandeln
    4,00 €

    align-items

    Align-Items ist die horizontale Version von Justify Content, es richtted die Elemente an der Horizontalen Line aus.

    CSS Flexbox Align Items

    align-items: stretch

    .flex-container {
      display: flex;
      align-items: strech;
    }
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    4,00 €

    align-items: flex-start

    .flex-container {
      display: flex;
      align-items: flex-start;
    }
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    4,00 €

    align-items: flex-end

    .flex-container {
      display: flex;
      align-items: flex-end;
    }
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    4,00 €

    align-items: center

    .flex-container {
      display: flex;
      align-items: center;
    }
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    4,00 €

    align-items: baseline

    .flex-container {
      display: flex;
      align-items: baseline;
    }
    Zucker
    1,10 €
    Milch
    Milch
    1,00 €
    4,00 €

    CSS Tutorial

    Voriger Schritt: CSS Klassen kombinieren

    Zur Turtorial-Reihe: CSS Tutorial

    Nächster Schritt: CSS mehrere Transition versetzt starten