Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Frontend Magic mit CSS Houdini

Frontend Magic mit CSS Houdini

Jörg Neumann

February 24, 2022
Tweet

More Decks by Jörg Neumann

Other Decks in Programming

Transcript

  1. JÖRG NEUMANN THEMEN  Frontend Technologies  Mobile Development 

    Machine Learning  Consulting, Coaching, Training KONTAKT  Mail: [email protected]  Twitter: @JoergNeumann  GitHub: https://github.com/JoergNeumann  Blog: www.HeadWriteLine.BlogSpot.com
  2. WORKLETS HINTERGRUND  Logik in Form einer JavaScript Klasse 

    Wird im Browser registriert und läuft in seinem eigenen Kontext  Läuft nur auf lokalem Server oder über HTTPS in Produktion  Fremde Worklets entweder als Package lokal installieren oder über ein CDN verlinken  Weitere Infos hier
  3. CSS PAINT API HINTERGRUND  Mit eigener Logik in den

    Rendering-Prozess eingreifen  Rendern von background, background-image, border-image, mask-image  Zur Manipulation steht ein Subset der Canvas API zu Verfügung W3C STATUS  Status: Candidate Recommendation
  4. CSS LAYOUT API HINTERGRUND  Mit eigener Logik in den

    Layout-Prozess eingreifen  Logik wird ebenfalls in Form von Worklets implementiert und registriert W3C STATUS  Status: First Public Working Draft
  5. CSS LAYOUT API class FancyLayout { static get inputProperties() {

    return ['--exampleVariable']; } static get childrenInputProperties() { return ['--exampleChildVariable']; } static get layoutOptions() { return { childDisplay: 'normal', sizing: 'block-like' }; } intrinsicSizes(children, edges, styleMap) { /* ... */ } layout(children, edges, constraints, styleMap, breakToken) { /* ... */ } }); registerLayout('fancyLayout', FancyLayout );
  6. CSS LAYOUT API <!DOCTYPE html> <head> <style> body { display:

    layout(masonry); --padding: 5; --columns: 4; } </style> </head> <body> <script> if (CSS.layoutWorklet) { CSS.layoutWorklet.addModule(fancylayout.js'); } </script> <div> … </div> </body> Worklet im Browser registrieren Layout zuweisen und konfigurieren
  7. CSS ANIMATION WORKLET HINTERGRUND  Erweitert die Web Animations API

     Reagieren auf User Events (scroll, hover, click, ...)  Gute Performance, da Animation in einem dedizierten Thread läuft W3C STATUS  Status: First Public Working Draft
  8. CSS TYPED OM HINTERGRUND  Der Zugriff auf CSS Properties

    erfolgt meist untypisiert  Houdini führt ein neues typisiertes Objektmodell für den Umgang mit CSS ein W3C STATUS  Status: Working Draft
  9. TYPED OBJECT MODEL ERMITTELN VON WERTEN MANIPULATION VON WERTEN //

    CSSOM getComputedStyle(el).getPropertyValue('width') // '50px' // Typed OM el.computedStyleMap().get('width') // CSSUnitValue {value: 50, unit: 'px'} // CSSOM el.style.setProperty('transform', 'translate(' + x + 'px, ' + y + 'px)‘) // Typed OM el.attributeStyleMap.set('transform', new CSSTranslate(CSS.px(x), CSS.px(y)))
  10. FAZIT HOUDINI ROCKT!  Erweiterung des CSS Standards  Custom

    Properties  Custom Paintings  Custom Layouts  Custom Animations  Typisierter Zugriff auf CSS  Mehr Symantik  mehr Flexibilität im Design
  11. &

  12. RESSOURCEN  Houdini Specifications https://drafts.css-houdini.org  Google Chrome Labs Houdini

    Samples https://github.com/GoogleChromeLabs/houdini-samples https://googlechromelabs.github.io/houdini-samples  CSS Properties & Values API https://web.dev/css-props-and-vals  CSS Paint Polyfill https://github.com/GoogleChromeLabs/css-paint-polyfill  Tutorials & Worklet Library https://houdini.how