Kategorien
Code

Loading Indicator á la Youtube mit CSS

Loading-Balken
Der Plan

Nachdem ich eine vernüftige Ladeanimation gesucht habe, und bei allem immer irgendwie jQuery dranhängen musste, hab ich beschlossen, das ganze mal in lean zu lösen. Probleme dabei gibt es eigentlich nur im Bereich des Animationsstarts durch JS, dazu habe ich bei CSS-Tricks den passenden Tipp gefunden.

HTML:

<div class="loading-bar"></div>

CSS:

    .loading-bar {
        display: none;
        opacity: 0;
        position: absolute;

        top: 0;
        width: 100%;
        max-width: 100%;
        margin: 0;
        padding: 0;

        background: red;
        height: 0;
        animation-name: expand-width, fade;
        animation-duration: 1s, 4s;
        animation-delay: 0s, 1s;

        animation-iteration-count: 1;
    }

    .loading-bar.visible {
        display: block;
        opacity: 1;
        height: 2px;
    }

    @keyframes fade {
        from {
            height: 2px;
            opacity: 1;
        }
        to {
            height: 0;
            opacity: 0;
        }
    }

    @keyframes expand-width {
        from {
            width: 0;
        }
        to {
            width: 100%;
        }
    }

    @keyframes glow {
        from {
            box-shadow: 0 0 5px red,
            0 0 10px red,
            0 0 10px rgba(255, 165, 0, 1),
            0 0 20px rgb(255, 244, 0);
        }
        to {
            box-shadow: none;
        }

    }

    .loading-bar.visible:before {
        box-shadow: none;

        position: absolute;
        right: 0;
        content: "";
        display: block;
        height: 2px;
        width: 8px;
        animation-name: glow;
        animation-duration: 5s;
        animation-iteration-count: 1;
    }

 

Javascript:

    var links = document.querySelectorAll( 'a' ),
            linkslen = links.length;

    for ( var link = 0; link < linkslen; link++ ) {

        links[link].addEventListener( 'click', function ( e ) {
            var lb = document.querySelectorAll( '.loading-bar' )[0];
            lb.classList.remove( 'visible' );
            //noinspection SillyAssignmentJS
            // triggers reflow for animation restart
            lb.offsetHeight = lb.offsetHeight;
            lb.classList.add( 'visible' );
        }, false )
    }

Edit am 29.12.: Ich habe den Code mal ein bisschen lesbarer und einfacher gemacht. Dazu habe ich das innere DIV entfernt, dass CSS zusammengeführt und das JS ein bisschen lesbarer gemacht. Mein Partial aus meinem Hugo-Projekt habe ich mal als Gist online gestellt. Sichergestellt sein sollte, dass das Partial so eingefügt wird, dass .loading-bar direktes Kind-Element von BODY ist. Ansonsten müssen ggf. die Styles angepasst werden.

Kategorien
Code Webentwicklung

Do-It-Yourself oder intelligente Verzahnung – Wieviel Eigenleistung steckt in einem Software-Projekt?

Mauer - Stein auf Stein
Stein auf Stein – So ähnlich baut ein modernes Web-Projekt auf bestehenden Bibliotheken auf – oder?

Hintergrundinformation: Ich arbeite aktuell in der Firma an einem größeren Projekt, welches unter anderem die Entwicklung einer komplett JS-basierten Oberfläche zur Konfiguration und Abfrage von Maschinen und der Erstellung eines Angebots für Kunden enthält. Das Projekt läuft seit 8 (“initial commit”: 22. Juli)  Monaten und es arbeiten 2, stellenweise 3 Entwickler daran.

Ich habe mir mal den Spaß gemacht, nachzuschauen, wie viel Code da von unserer Firma drinsteckt:

Die Gesamtsumme aller “per Hand” bearbeiteten Daten beträgt knapp 600KB. Der Rest des Projekts setzt sich zusammen aus den benutzten Bibliotheken: cookie.jsEmber.jsFont AwesomeHandlebarsHolder.jshtml5shivjQueryjQuery ToolsjQuery UINormalize.cssspin.jsUnderscore.js, Grunt

Insgesamt werden beim ersten Laden des Projekts im Browser 580 KB abgerufen, dazu kommen noch ca. 62,7 KB aus (bisher unkomprimierten) Dateien, die erst später Nachgeladen werden (können). Das schließt allerdings keine Abfrage von Daten, sondern nur den Payload des Projekts ein. HTML, JS, CSS/LESS, Bilder.

Ich schwanke meinungstechnisch noch zwischen: “Cool wie effizient” und “oh, das ist aber wenig” (Das Quantität keine Qualitätsaussage ist, ist mir dabei durchaus bewusst). Zum Glück werden wir nicht nach KB bezahlt. (Ausnahmen bestätigen die Regel aber meistens ist das dann eher eine Bezahlung pro gespartem KB)

Wie ist das bei euch? Wie viele Libraries haben eure großen Projekte? Ist das Verhältnis von eigenem vs. fremdem Code bei euch auch so ähnlich oder entwickelt ihr alles “from Scratch”? Sieht das bei “Backend”-Projekten ähnlich aus?

Bild: CC0 von Martin Wessely via Unsplash.com

Kategorien
Releases Webentwicklung Werkzeuge

Webeditor auf Basis von Webtechnologien: Brackets [Sprint 31]

Brackets Startscreen
Brackets Sprint 31

Adobe entwickelt Brackets, einen Webeditor, mit Webtechniken: Node.jsHTML und Javascript. Brackets ist Open Source und bietet aus meiner einen vielversprechenden Ansatz. Mit LESS und meinem Workflow kann das Teil allerdings auf den ersten Blick nicht das anfangen, was ich persönlich brauche, aber ich werde den Editor mal im Auge behalten…

wiederentdeckt durch Jens Grochtdreis

Kategorien
Linklove

Centering in the Unknown

Centering in the Unknown

Kategorien
Webentwicklung

DRM in HTML5

In Sachen DRM bin ich ja grundsätzlich geneigt, jegliche DRM-Techniken abzulehnen. Daher wollte ich ich Alex auch gar nicht wiedersprechen, als er (genau wie ich auch schon) über das möglicherweise kommende HTML5-DRM gerantet hat.

Nun ist seitdem etwas Zeit vergangen und ich habe mir ein paar mehr Gedanken dazu gemacht.

Wenn man davon ausgeht, dass das DRM in HTML5 ein Standard sein soll, der es ermöglicht, Content (z.B. Streaming-Musik oder Filme) “sicher” vor Mitschnitt anzubieten, könnte das durchaus genug Potential bieten um lästigen Brückentechnologien wie Flash und Silverlight endlich den Gar auszumachen. Voraussetzung ist dabei natürlich, dass die Inhalte in möglichst offenen bzw. Plattformübergreifend funktionierenden Formaten übertragen werden.

Wenn ich mit plattformübergreifenden Standards das gleiche erreichen kann, wie aktuell mit Flash oder Silverlight, dann werden auch Nischenplattformen attraktiv. Ich kann auf Linuxrechnern mit einfachsten Mitteln Streaming-Angebote wahrnehmen, die sonst proprietäre Browser-Plugins benötigen. Oder mit BSD. Im Endeffekt: Meine Zielgruppe wächst um vermutlich 5-10% in eine Nische, die in der Regel als “nicht wirtschaftlich” eingeordnet wurde. Bietet dieser Nische die Möglichkeit, Paid Content wahrzunehmen. Kickstarter und andere Crowdfunding-Plattformen haben es gezeigt, dass hier ein Markt ist, der auch Geld auszugeben bereit ist.

Ich persönlich würde mich über eine flashfreie Version von z.B. RDIO oder Spotify mehr freuen als über eine Linux-App dafür. Und um hier mal einen Stallman zu pullen: Mir ist ein standardisiertes DRM, welches allen die Möglichkeit gibt, den Content zu nutzen lieber, als dieser Plugin-Wildwuchs mit vorprogrammierten (sic!) Sicherheitslücken.

[red_box]Lieber wäre mir auch, wenn gar kein DRM eingesetzt würde. Aber ich bin Realist genug, um zu sehen, dass das auf längere Zeit nicht verschwinden wird. Und dann lieber auf diese Weise.[/red_box]

Links

  1. World Wide Web Consortium takes next step with controversial DRM proposal, Defective by Design condemns decision — Free Software Foundation — working together for free software
  2. Tell W3C: We don’t want the Hollyweb | Defective by Design