The Dark Side of the Grid

A presentation at Webkongress Erlangen in September 2018 in Erlangen, Germany by Manuel Matuzovic

Slide 1

Slide 1

Slide 2

Slide 2

Kunsthistorisches Museum, Naturhistorisches Museum, Volksgarten und Parlament in Wien

Slide 3

Slide 3

Manuel Matuzovic • Frontend Developer aus Wien • Spezialisiert auf CSS, Performance und Accessibility @mmatuzo

Slide 4

Slide 4

Manuel Matuzovic • Frontend Developer aus Wien • Spezialisiert auf CSS, Performance und Accessibility • Schreibe Artikel, halte Vortr ge und Workshops @mmatuzo

Slide 5

Slide 5

Manuel Matuzovic • Frontend Developer aus Wien • Spezialisiert auf CSS, Performance und Accessibility • Schreibe Artikel, halte Vortr ge und Workshops • webclerks und CodePen Meetup in Wien @mmatuzo

Slide 6

Slide 6

Manuel Matuzovic • Frontend Developer aus Wien • Spezialisiert auf CSS, Performance und Accessibility • Schreibe Artikel, halte Vortr ge und Workshops • webclerks und CodePen Meetup in Wien • @mmatuzo auf Twitter @mmatuzo

Slide 7

Slide 7

Slide 8

Slide 8

The Dark Side of the Grid

Slide 9

Slide 9

Was ist CSS Grid Layout? CSS Grid ist ein auf Rastern basierendes Layout-System, das f r zweidimensionale Layouts designt wurde. @mmatuzo

Slide 10

Slide 10

Was ist CSS Grid Layout? CSS Grid ist ein auf Rastern basierendes Layout-System, das f r zweidimensionale Layouts designt wurde. @mmatuzo

Slide 11

Slide 11

Was ist besonders an Grid? @mmatuzo

Slide 12

Slide 12

Was ist besonders an Grid? • Das erste richtige Layout-System in CSS. @mmatuzo

Slide 13

Slide 13

Was ist besonders an Grid? • Das erste richtige Layout-System in CSS. • float, display: inline-block, position, display: table waren urspr nglich nicht f r das Bauen von Layouts konzipiert. @mmatuzo

Slide 14

Slide 14

Was ist besonders an Grid? • Das erste richtige Layout-System in CSS. • float, display: inline-block, position, display: table waren urspr nglich nicht f r das Bauen von Layouts konzipiert. • Irgendwie wie table-Layouts, aber responsive, flexibel und in CSS formuliert und nicht in HTML. @mmatuzo

Slide 15

Slide 15

Artikellayout f r ein fiktives Magazin. Quelle: http://juliabialko.com/magarticle/

Slide 16

Slide 16

Grids Geschichte im berblick @mmatuzo

Slide 17

Slide 17

Grids Geschichte im berblick • Fr he 90er: Erste Ideen, aber „zu komplex“ zu implementieren. @mmatuzo

Slide 18

Slide 18

Grids Geschichte im berblick • Fr he 90er: Erste Ideen, aber „zu komplex“ zu implementieren. • 1996: „frame-basiertes“ Layout-Modell. @mmatuzo

Slide 19

Slide 19

Grids Geschichte im berblick • Fr he 90er: Erste Ideen, aber „zu komplex“ zu implementieren. • 1996: „frame-basiertes“ Layout-Modell. • 2005: Advanced Layout Module (sp ter Template Layout Module). @mmatuzo

Slide 20

Slide 20

Grids in Microsofts Metro Design

Slide 21

Slide 21

Grids Geschichte im berblick @mmatuzo

Slide 22

Slide 22

Grids Geschichte im berblick • 2011: Microsoft liefert die erste Implementierung von Grid hinter dem -ms- Browserprefix in IE 10. @mmatuzo

Slide 23

Slide 23

Grids Geschichte im berblick • 2011: Microsoft liefert die erste Implementierung von Grid hinter dem -ms- Browserprefix in IE 10. • 2012 pr sentiert Microsoft dem W3C einen Entwurf der Spezifikation. @mmatuzo

Slide 24

Slide 24

Grids Geschichte im berblick • 2011: Microsoft liefert die erste Implementierung von Grid hinter dem -ms- Browserprefix in IE 10. • 2012 pr sentiert Microsoft dem W3C einen Entwurf der Spezifikation. • Die CSS Working Group beginnt an Microsofts Vorschlag zu feilen. @mmatuzo

Slide 25

Slide 25

Grids Geschichte im berblick • 2011: Microsoft liefert die erste Implementierung von Grid hinter dem -ms- Browserprefix in IE 10. • 2012 pr sentiert Microsoft dem W3C einen Entwurf der Spezifikation. • Die CSS Working Group beginnt an Microsofts Vorschlag zu feilen. • Bloomberg engagiert Igalia, um CSS Grid in Blink und WebKit zu implementieren. @mmatuzo

Slide 26

Slide 26

Grids Geschichte im berblick @mmatuzo

Slide 27

Slide 27

Grids Geschichte im berblick •J nner 2017: CSS Grid in Chromium 56 f r Android @mmatuzo

Slide 28

Slide 28

Grids Geschichte im berblick •J • Fr nner 2017: CSS Grid in Chromium 56 f r Android her M rz 2017: Chrome und Firefox @mmatuzo

Slide 29

Slide 29

Grids Geschichte im berblick •J • Fr nner 2017: CSS Grid in Chromium 56 f r Android her M rz 2017: Chrome und Firefox • Ende M rz 2017: Opera und Safari @mmatuzo

Slide 30

Slide 30

Grids Geschichte im berblick •J • Fr nner 2017: CSS Grid in Chromium 56 f r Android her M rz 2017: Chrome und Firefox • Ende M rz 2017: Opera und Safari • 17. Oktober 2017: Edge @mmatuzo

Slide 31

Slide 31

F E A T U R E S @mmatuzo

Slide 32

Slide 32

$ grids zeichnen .grid { display: grid; grid-template-columns: 150px 150px 150px; grid-template-rows: 100px 100px; } @mmatuzo

Slide 33

Slide 33

$ grids zeichnen .grid { display: grid; grid-template-columns: 150px 150px 150px; grid-template-rows: 100px 100px; } @mmatuzo

Slide 34

Slide 34

$ grids zeichnen .grid { display: grid; grid-template-columns: 150px 150px 150px; grid-template-rows: 100px 100px; } @mmatuzo

Slide 35

Slide 35

$ grids zeichnen @mmatuzo

Slide 36

Slide 36

Grid-Debugging in Firefox aktivieren

Slide 37

Slide 37

Grid-Debugging in Firefox aktivieren

Slide 38

Slide 38

$ grids zeichnen @mmatuzo

Slide 39

Slide 39

$ elemente platzieren .item { grid-column: 3; grid-row: 2; } @mmatuzo

Slide 40

Slide 40

$ elemente platzieren @mmatuzo

Slide 41

Slide 41

$ layouts „zeichnen“ .grid { display: grid; grid-template-columns: 1fr 1fr 200px; grid-template-areas: "header header header" "main main sidebar" "footer footer footer"; } @mmatuzo

Slide 42

Slide 42

$ layouts „zeichnen“ .grid { display: grid; grid-template-columns: 1fr 1fr 200px; grid-template-areas: "header header header" "main main sidebar" "footer footer footer"; } @mmatuzo

Slide 43

Slide 43

$ layouts „zeichnen“ .grid { display: grid; grid-template-columns: 1fr 1fr 200px; grid-template-areas: "header header header" "main main sidebar" "footer footer footer"; } @mmatuzo

Slide 44

Slide 44

$ layouts „zeichnen“ .grid { display: grid; grid-template-columns: 1fr 1fr 200px; grid-template-areas: "header header header" "main main sidebar" "footer footer footer"; } @mmatuzo

Slide 45

Slide 45

$ layouts „zeichnen“ header header header main main sidebar footer footer footer @mmatuzo

Slide 46

Slide 46

$ layouts „zeichnen“ .header { grid-area: header; } @mmatuzo

Slide 47

Slide 47

$ layouts „zeichnen“ .header { grid-area: header; } @mmatuzo

Slide 48

Slide 48

$ layouts „zeichnen“ header header header main main sidebar footer footer footer @mmatuzo

Slide 49

Slide 49

$ implizite grids .grid { display: grid; grid-template-columns: 150px 150px 150px; grid-template-rows: 100px 100px; grid-gap: 20px; grid-auto-rows: 100px; } @mmatuzo

Slide 50

Slide 50

$ implizite grids .grid { display: grid; grid-template-columns: 150px 150px 150px; grid-template-rows: 100px 100px; grid-gap: 20px; grid-auto-rows: 100px; } @mmatuzo

Slide 51

Slide 51

$ implizite grids @mmatuzo

Slide 52

Slide 52

Grid(-verwandte) Eigenschaften und Werte • display • justify-content • grid-column • grid-template-columns • align-content • grid-row • grid-template-rows • place-content • grid-area • grid-template-areas • grid-auto-columns • justify-self • grid-template • grid-auto-rows • align-self grid-auto-flow • place-self • min-content, max-content, fitcontent • grid-column-gap • • grid-row-gap • grid • grid-gap • grid-column-start • fr • justify-items • grid-column-end • repeat() • align-items • grid-row-start • minmax() • place-items • grid-row-end @mmatuzo

Slide 53

Slide 53

Grid(-verwandte) Eigenschaften und Werte • display • justify-content • grid-column • grid-template-columns • align-content • grid-row • grid-template-rows • place-content • grid-area • grid-template-areas • grid-auto-columns • justify-self • grid-template • grid-auto-rows • align-self grid-auto-flow • place-self • min-content, max-content, fitcontent • grid-column-gap • • grid-row-gap • grid • grid-gap • grid-column-start • fr • justify-items • grid-column-end • repeat() • align-items • grid-row-start • minmax() • place-items • grid-row-end @mmatuzo

Slide 54

Slide 54

Grid(-verwandte) Eigenschaften und Werte • display • justify-content • grid-column • grid-template-columns • align-content • grid-row • grid-template-rows • place-content • grid-area • grid-template-areas • grid-auto-columns • justify-self • grid-template • grid-auto-rows • align-self grid-auto-flow • place-self • min-content, max-content, fitcontent • grid-column-gap • • grid-row-gap • grid • grid-gap • grid-column-start • fr • justify-items • grid-column-end • repeat() • align-items • grid-row-start • minmax() • place-items • grid-row-end @mmatuzo

Slide 55

Slide 55

Cover des Albums „The Dark Side of the Moon“, 1973 erschienen.

Slide 56

Slide 56

PINK FLOYD FUN FACT #1 45 Million en verkau fte Tontr ger @mmatuzo

Slide 57

Slide 57

PINK FLOYD FUN FACT #1 45 Million en verkau fte Tontr ger The Dark Side of the Moon ist mit ber 45 Millionen verkauften Tontr gern auf Platz 3 der meistverkauften Alben weltweit. @mmatuzo

Slide 58

Slide 58

PINK FLOYD FUN FACT #1 45 Million en verkau fte Tontr ger The Dark Side of the Moon ist mit ber 45 Millionen verkauften Tontr gern auf Platz 3 der meistverkauften Alben weltweit. #1 Thriller von Michael Jackson (66 Millionen) #2 Back in Black von AC/DC (50 Millionen) @mmatuzo

Slide 59

Slide 59

V IS U E L L E R E I H E NF O L G E @mmatuzo

Slide 60

Slide 60

Visuelle Reihenfolge ndern @mmatuzo

Slide 61

Slide 61

Visuelle Reihenfolge ndern • Explizite Platzierung @mmatuzo

Slide 62

Slide 62

Visuelle Reihenfolge ndern • Explizite Platzierung • Order @mmatuzo

Slide 63

Slide 63

Visuelle Reihenfolge ndern • Explizite Platzierung • Order • Absolute Positionierung @mmatuzo

Slide 64

Slide 64

Visuelle Reihenfolge ndern • Explizite Platzierung • Order • Absolute Positionierung • Auto flow @mmatuzo

Slide 65

Slide 65

Visuelle Reihenfolge ndern • Explizite Platzierung • Order • Absolute Positionierung • Auto flow • Areas @mmatuzo

Slide 66

Slide 66

Visuelle Reihenfolge Sowohl die Tab-Reihenfolge als auch die Reihenfolge in der Screenreader Inhalte lesen folgen der Reihenfolge im DOM. @mmatuzo

Slide 67

Slide 67

@mmatuzo

Slide 68

Slide 68

@mmatuzo

Slide 69

Slide 69

@mmatuzo

Slide 70

Slide 70

@mmatuzo

Slide 71

Slide 71

Wenn die visuelle Reihenfolge nicht der Reihenfolge im DOM entspricht.

  1. Keyboard User tun sich schwer, zu erahnen, welches Element als n chstes fokussiert wird. @mmatuzo

Slide 72

Slide 72

Wenn die visuelle Reihenfolge nicht der Reihenfolge im DOM entspricht. 2. Benutzer von Bildschirmlupen sind irritiert, wenn der Bildausschnitt st ndig hin und her springt. @mmatuzo

Slide 73

Slide 73

@mmatuzo

Slide 74

Slide 74

@mmatuzo

Slide 75

Slide 75

Wenn die visuelle Reihenfolge nicht der Reihenfolge im DOM entspricht. 3. Wenn ein blinder Screenreader User gemeinsam mit einem sehenden User arbeitet und sie auf Inhalte in unterschiedlicher Reihenfolge stoßen, kann es zu Verwirrungen kommen. @mmatuzo

Slide 76

Slide 76

Wer navigiert mit dem Keyboard? @mmatuzo

Slide 77

Slide 77

Wer navigiert mit dem Keyboard? • Menschen, die aus physischen Gr nden keine Maus bedienen k nnen. @mmatuzo

Slide 78

Slide 78

Wer navigiert mit dem Keyboard? • Menschen, die aus physischen Gr nden keine Maus bedienen k nnen. • Menschen mit chronischen Erkrankungen, die k rperliche Belastung meiden sollten. @mmatuzo

Slide 79

Slide 79

Wer navigiert mit dem Keyboard? • Menschen, die aus physischen Gr nden keine Maus bedienen k nnen. • Menschen mit chronischen Erkrankungen, die k rperliche Belastung meiden sollten. • Jemand, der/die tempor r keine Maus verwenden kann (bspw. wegen einer Verletzung) @mmatuzo

Slide 80

Slide 80

Wer navigiert mit dem Keyboard? • Menschen, die aus physischen Gr nden keine Maus bedienen k nnen. • Menschen mit chronischen Erkrankungen, die k rperliche Belastung meiden sollten. • Jemand, der/die tempor r keine Maus verwenden kann (bspw. wegen einer Verletzung) • Poweruser (bspw. DeveloperInnen oder DesignerInnen 😉) @mmatuzo

Slide 81

Slide 81

Wer navigiert mit dem Keyboard? • Menschen, die aus physischen Gr nden keine Maus bedienen k nnen. • Menschen mit chronischen Erkrankungen, die k rperliche Belastung meiden sollten. • Jemand, der/die tempor r keine Maus verwenden kann (bspw. wegen einer Verletzung) • Poweruser (bspw. DeveloperInnen oder DesignerInnen 😉) @mmatuzo

Slide 82

Slide 82

Wer verwendet Screenreader? @mmatuzo

Slide 83

Slide 83

Wer verwendet Screenreader? • Blinde Menschen. @mmatuzo

Slide 84

Slide 84

Wer verwendet Screenreader? • Blinde Menschen. • Menschen mit Sehschw chen, die erg nzend einen Screenreader verwenden. @mmatuzo

Slide 85

Slide 85

Wer verwendet Screenreader? • Blinde Menschen. • Menschen mit Sehschw chen, die erg nzend einen Screenreader verwenden. • Menschen mit Lernschw chen. @mmatuzo

Slide 86

Slide 86

V I S U E L L E RE I H E N F OL GE E X P L I Z I TE P L A T Z I E R U N G @mmatuzo

Slide 87

Slide 87

Elemente platzieren In einem Grid kann man Elemente auf Linien vertikal und horizontal platzieren. Daf r gibt man die Anfangs- und/oder Endlinie an. @mmatuzo

Slide 88

Slide 88

Elemente platzieren In einem Grid kann man Elemente auf Linien vertikal und horizontal platzieren. Daf r gibt man die Anfangs- und/oder Endlinie an. • grid-column-start • grid-column-end • grid-row-start • grid-row-end @mmatuzo

Slide 89

Slide 89

$ elemente platzieren .item:nth-child(2) { grid-column-start: 4; grid-row-start: 2; } @mmatuzo

Slide 90

Slide 90

https://codepen.io/matuzo/pen/xaOgGg @mmatuzo

Slide 91

Slide 91

https://codepen.io/matuzo/pen/xaOgGg @mmatuzo

Slide 92

Slide 92

$ elemente platzieren .item:nth-child(1) { grid-column: 2; grid-row: 2; } .item:nth-child(2) { grid-column: 3; grid-row: 3; } ""... @mmatuzo

Slide 93

Slide 93

https://codepen.io/matuzo/pen/xaOgGg @mmatuzo

Slide 94

Slide 94

https://codepen.io/matuzo/pen/xaOgGg @mmatuzo

Slide 95

Slide 95

V I S U E L L E O R D E R RE I H E N F OL GE E I G E NS C H A F T @mmatuzo

Slide 96

Slide 96

$ order eigenschaft .item:nth-child(2) { order: 9; } .item:nth-child(5) { order: 6; } ""... @mmatuzo

Slide 97

Slide 97

https://codepen.io/matuzo/pen/dqpvXg @mmatuzo

Slide 98

Slide 98

https://codepen.io/matuzo/pen/dqpvXg @mmatuzo

Slide 99

Slide 99

V I S U E L L E RE I H E N F OL GE A U T O - F LO W @mmatuzo

Slide 100

Slide 100

https://s.codepen.io/matuzo/pen/pONEzJ @mmatuzo

Slide 101

Slide 101

https://s.codepen.io/matuzo/pen/pONEzJ @mmatuzo

Slide 102

Slide 102

$ auto-flow .grid { display: grid; grid-template-columns: repeat(3, 200px); grid-auto-rows: 80px; grid-gap: 20px; grid-auto-flow: dense; } @mmatuzo

Slide 103

Slide 103

$ auto-flow .grid { display: grid; grid-template-columns: repeat(3, 200px); grid-auto-rows: 80px; grid-gap: 20px; grid-auto-flow: dense; } @mmatuzo

Slide 104

Slide 104

https://s.codepen.io/matuzo/pen/pONEzJ @mmatuzo

Slide 105

Slide 105

https://s.codepen.io/matuzo/pen/pONEzJ @mmatuzo

Slide 106

Slide 106

V I S U E L L E RE I H E N F OL GE A R E A S @mmatuzo

Slide 107

Slide 107

Beispiel: Mobiles Layout.

Slide 108

Slide 108

$ areas body { display: grid; grid-template-columns: minmax(auto, 480px); grid-template-areas: "header" "content" "ads" "newsletter" "comments" "related" "footer"; } @mmatuzo

Slide 109

Slide 109

$ areas body { display: grid; grid-template-columns: minmax(auto, 480px); grid-template-areas: "header" "content" "ads" "newsletter" "comments" "related" "footer"; } @mmatuzo

Slide 110

Slide 110

$ areas body { display: grid; grid-template-columns: minmax(auto, 480px); grid-template-areas: "header" "content" "ads" "newsletter" "comments" "related" "footer"; } @mmatuzo

Slide 111

Slide 111

$ areas body { display: grid; grid-template-columns: minmax(auto, 480px); grid-template-areas: "header" "content" "ads" "newsletter" "comments" "related" "footer"; } @mmatuzo

Slide 112

Slide 112

$ areas body { display: grid; grid-template-columns: minmax(auto, 480px); grid-template-areas: "header" "content" "ads" "newsletter" "comments" "related" "footer"; } @mmatuzo

Slide 113

Slide 113

$ areas body { display: grid; grid-template-columns: minmax(auto, 480px); grid-template-areas: "header" "content" "ads" "newsletter" "comments" "related" "footer"; } @mmatuzo

Slide 114

Slide 114

$ areas body { display: grid; grid-template-columns: minmax(auto, 480px); grid-template-areas: "header" "newsletter" "content" "ads" "comments" "related" "footer"; } @mmatuzo

Slide 115

Slide 115

https://s.codepen.io/matuzo/debug/ZMLpML @mmatuzo

Slide 116

Slide 116

https://s.codepen.io/matuzo/debug/ZMLpML @mmatuzo

Slide 117

Slide 117

15,7% der befragten Screenreaderuser verwenden immer oder oft ein Keyboard auf ihrem mobilen Endger t.

Slide 118

Slide 118

$ areas body { grid-template-columns: 1fr 400px; grid-template-areas: "header header" "newsletter newsletter" "content partners" "content related" "comments comments" "footer footer"; } @mmatuzo

Slide 119

Slide 119

$ areas body { grid-template-columns: 1fr 400px; grid-template-areas: "header header" "newsletter newsletter" "content partners" "content related" "comments comments" "footer footer"; } @mmatuzo

Slide 120

Slide 120

$ areas body { grid-template-columns: 1fr 400px; grid-template-areas: "header header" "newsletter newsletter" "content partners" "content related" "comments comments" "footer footer"; } @mmatuzo

Slide 121

Slide 121

$ areas body { grid-template-columns: 1fr 400px; grid-template-areas: "header header" "newsletter newsletter" "content partners" "content related" "comments comments" "footer footer"; } @mmatuzo

Slide 122

Slide 122

$ areas body { grid-template-columns: 1fr 400px; grid-template-areas: "header header" "newsletter newsletter" "content partners" "content related" "comments comments" "footer footer"; } @mmatuzo

Slide 123

Slide 123

$ areas body { grid-template-columns: 1fr 400px; grid-template-areas: "header header" "newsletter newsletter" "content partners" "content related" "comments comments" "footer footer"; } @mmatuzo

Slide 124

Slide 124

https://codepen.io/matuzo/pen/QVOXdR @mmatuzo

Slide 125

Slide 125

https://codepen.io/matuzo/pen/QVOXdR @mmatuzo

Slide 126

Slide 126

B EI WE M L I EG T DI E V E R A NT W OR T UNG ? @mmatuzo

Slide 127

Slide 127

Unsere Optionen @mmatuzo

Slide 128

Slide 128

Unsere Optionen • Source Order dynamisch bei jedem Breakpoint mit JS anpassen. 🙄 @mmatuzo

Slide 129

Slide 129

Unsere Optionen • Source Order dynamisch bei jedem Breakpoint mit JS anpassen. 🙄 • tabindex oder aria-flow-to allen Elementen zuweisen und entsprechend ordnen. 😭 @mmatuzo

Slide 130

Slide 130

Unsere Optionen • Source Order dynamisch bei jedem Breakpoint mit JS anpassen. 🙄 • tabindex oder aria-flow-to allen Elementen zuweisen und entsprechend ordnen. 😭 • Browsersniffing - Je nach Client/Ger tetyp unterschiedliches HTML ausliefern. 🤢 @mmatuzo

Slide 131

Slide 131

Unsere Optionen @mmatuzo

Slide 132

Slide 132

Unsere Optionen • Das Problem mindern indem man Skiplinks zur Verf gung stellt. 😐 @mmatuzo

Slide 133

Slide 133

Unsere Optionen • Das Problem mindern indem man Skiplinks zur Verf gung stellt. 😐 • Die visuelle Reihenfolge nicht ndern. 🙄 @mmatuzo

Slide 134

Slide 134

„Authors must use order and the grid-placement properties only for visual, not logical, reordering of content.“ – https://drafts.csswg.org/css-grid/#order-accessibility

Slide 135

Slide 135

Brilliant on the one hand for them trying to at least advise everybody in the right direction but really — come on. [⋯] Suggesting that we don’t all use it just because of this, i think, is wishful thinking. –Léonie Watson FF Conf 2016 https://www.youtube.com/watch?v=spxT2CmHoPk

Slide 136

Slide 136

Was machen wir also? @mmatuzo

Slide 137

Slide 137

Was machen wir also? • ber die Reihenfolge Gedanken machen noch bevor HTML oder CSS geschrieben wird. So fr h wie m glich eng mit den DesignerInnen zusammenarbeiten. @mmatuzo

Slide 138

Slide 138

Was machen wir also? • ber die Reihenfolge Gedanken machen noch bevor HTML oder CSS geschrieben wird. So fr h wie m glich eng mit den DesignerInnen zusammenarbeiten. • Mit sauber strukturiertem HTML beginnen. @mmatuzo

Slide 139

Slide 139

Was machen wir also? • ber die Reihenfolge Gedanken machen noch bevor HTML oder CSS geschrieben wird. So fr h wie m glich eng mit den DesignerInnen zusammenarbeiten. • Mit sauber strukturiertem HTML beginnen. • CSS mobile first schreiben und entsprechend das Layout anpassen. @mmatuzo

Slide 140

Slide 140

Was machen wir also? @mmatuzo

Slide 141

Slide 141

Was machen wir also? • Das Layout testen indem man mit der Tab-Taste auf unterschiedlichen Bildschirmgr ßen durch die Seiten navigiert. @mmatuzo

Slide 142

Slide 142

Was machen wir also? • Das Layout testen indem man mit der Tab-Taste auf unterschiedlichen Bildschirmgr ßen durch die Seiten navigiert. • Wenn es Diskrepanzen in der Reihenfolge gibt, zur ck zum Source Code und das HTML anpassen. @mmatuzo

Slide 143

Slide 143

PINK FLOYD FUN FACT #2 736 Wochen in d e n C harts @mmatuzo

Slide 144

Slide 144

PINK FLOYD FUN FACT #2 736 Wochen in d e n C harts The Dark Side of The Moon war 736 Wochen in den amerikanischen Billboard Charts. Das sind mehr als 14 Jahre! @mmatuzo

Slide 145

Slide 145

DOKUMENTSTRUKTUR AB FLACHEN @mmatuzo

Slide 146

Slide 146

„I believe there will be a strong temptation, especially with Grid, to flatten out document structure in order that all elements become a child of the element with the Grid declared. Making layout simple, but at what cost?“ –Rachel Andrew (https://rachelandrew.co.uk/archives/2015/07/28/modern-css-layout-power-and-responsibility/)

Slide 147

Slide 147

$ dokumentstruktur abflachen <form> <div> <label for="name">What's your name?"</label> <input type="text" id="name" "/> "</div> <div> <label for="email">E-Mail"</label> <input type="email" id="email" "/> "</div> ""... @mmatuzo

Slide 148

Slide 148

$ dokumentstruktur abflachen … <fieldset> <legend>Shirt size"</legend> <div> <input type="radio" id="s" name="r"> <label for="s">S"</label> "</div> <div> <input type="radio" id="m" name="r"> <label for="m">M"</label> "</div> "</fieldset> "</form> @mmatuzo

Slide 149

Slide 149

https://s.codepen.io/matuzo/pen/BOWYLB?editors=1100 @mmatuzo

Slide 150

Slide 150

$ dokumentstruktur abflachen form { display: grid; grid-template-columns: max-content minmax(auto, 600px); grid-gap: 10px 20px; } @mmatuzo

Slide 151

Slide 151

https://s.codepen.io/matuzo/pen/BOWYLB?editors=1100 @mmatuzo

Slide 152

Slide 152

$ dokumentstruktur abflachen

<div> <label for="name">What's your name?"</label> <input type="text" id="name" "/> "</div> <div> <label for="email">E-Mail"</label> <input type="email" id="email" "/> "</div> @mmatuzo

Slide 153

Slide 153

$ dokumentstruktur abflachen

<div> <label for="name">What's your name?"</label> <input type="text" id="name" "/> "</div> <div> <label for="email">E-Mail"</label> <input type="email" id="email" "/> "</div> @mmatuzo

Slide 154

Slide 154

$ dokumentstruktur abflachen <fieldset> <legend strong>Shirt size"</legend strong> <div> <div> <input type="radio" id="s"> <label for="s">S"</label> "</div> <div> <input type="radio" id="m"> <label for="m">M"</label> "</div> "</div> "</fieldset> @mmatuzo

Slide 155

Slide 155

$ dokumentstruktur abflachen <fieldset> <legend strong>Shirt size"</legend strong> <div> <div> <input type="radio" id="s"> <label for="s">S"</label> "</div> <div> <input type="radio" id="m"> <label for="m">M"</label> "</div> "</div> "</fieldset> @mmatuzo

Slide 156

Slide 156

https://s.codepen.io/matuzo/pen/BOWYLB?editors=1100 @mmatuzo

Slide 157

Slide 157

Darstellung des Formulars ohne CSS

Slide 158

Slide 158

D O K U ME N T S T R U K TU R AB FL A C H E N S U B G RI D @mmatuzo

Slide 159

Slide 159

„A grid container that is itself a grid item can defer the definition of its rows and columns to its parent grid container, making it a subgrid.“ – https://drafts.csswg.org/css-grid-2/

Slide 160

Slide 160

$ dokumentstruktur abflachen div { display: grid; grid-template-columns: subgrid; } @mmatuzo

Slide 161

Slide 161

$ dokumentstruktur abflachen div { display: grid; grid-template-columns: subgrid; } @mmatuzo

Slide 162

Slide 162

Subgrid kommt erst mit Level 2 der Spezifikation

Slide 163

Slide 163

$ dokumentstruktur abflachen form > div, fieldset { display: inherit; grid-template-columns: inherit; grid-gap: inherit; grid-column: 1 / -1; } @mmatuzo

Slide 164

Slide 164

$ dokumentstruktur abflachen form > div, fieldset { display: inherit; grid-template-columns: inherit; grid-gap: inherit; grid-column: 1 / -1; } @mmatuzo

Slide 165

Slide 165

$ dokumentstruktur abflachen form > div, fieldset { display: inherit; grid-template-columns: inherit; grid-gap: inherit; grid-column: 1 / -1; } @mmatuzo

Slide 166

Slide 166

$ dokumentstruktur abflachen form > div, fieldset { display: inherit; grid-template-columns: inherit; grid-gap: inherit; grid-column: 1 / -1; } @mmatuzo

Slide 167

Slide 167

$ dokumentstruktur abflachen form > div, fieldset { display: inherit; grid-template-columns: inherit; grid-gap: inherit; grid-column: 1 / -1; } @mmatuzo

Slide 168

Slide 168

https://s.codepen.io/matuzo/pen/XPVMKe @mmatuzo

Slide 169

Slide 169

„display: contents causes an element's children to appear as if they were direct children of the element's parent, ignoring the element itself“ – https://caniuse.com/#search=contents

Slide 170

Slide 170

$ dokumentstruktur abflachen form > div, fieldset { display: contents; } @mmatuzo

Slide 171

Slide 171

$ dokumentstruktur abflachen form > div, fieldset { display: contents; } @mmatuzo

Slide 172

Slide 172

https://codepen.io/matuzo/pen/Mqrpbm @mmatuzo

Slide 173

Slide 173

display: contents; wird in allen großen Browsern außer Edge unterst tzt

Slide 174

Slide 174

Wegen eines Bugs entfernt display: contents; Elemente aus dem Accessibility-Tree.

Slide 175

Slide 175

Ohne display: contents; wird das legend Element vorgelesen.

Slide 176

Slide 176

Ohne display: contents; wird das legend Element vorgelesen.

Slide 177

Slide 177

Mit display: contents; wird das legend Element nicht vorgelesen.

Slide 178

Slide 178

Mit display: contents; wird das legend Element nicht vorgelesen.

Slide 179

Slide 179

$ dokumentstruktur abflachen .contents { display: contents; } @mmatuzo

Slide 180

Slide 180

$ dokumentstruktur abflachen .contents { display: contents; } @mmatuzo

Slide 181

Slide 181

$ dokumentstruktur abflachen .contents { display: contents; } @mmatuzo

Slide 182

Slide 182

PINK FLOYD FUN FACT #3 Mo nty Python and the Holy Grail @mmatuzo

Slide 183

Slide 183

PINK FLOYD FUN FACT #3 Mo nty Python and the Holy Grail Pink Floyd haben 1975 dabei geholfen, den Monty Python Film „Die Ritter der Kokosnuß“ zu finanzieren. Andere Investoren waren unter anderem Led Zeppelin und Genesis. @mmatuzo

Slide 184

Slide 184

C RO S S B RO WSER S U PPO RT @mmatuzo

Slide 185

Slide 185

Kurze Wiederholung der Geschichte @mmatuzo

Slide 186

Slide 186

Kurze Wiederholung der Geschichte • 2011: Microsoft liefert die erste Implementierung von Grid hinter dem -ms- Browserprefix in IE 10. @mmatuzo

Slide 187

Slide 187

Kurze Wiederholung der Geschichte • 2011: Microsoft liefert die erste Implementierung von Grid hinter dem -ms- Browserprefix in IE 10. • Chrome, Firefox, Opera, Safari und Edge implementieren Grid im Laufe des Jahres 2017. @mmatuzo

Slide 188

Slide 188

Eigenschaften: Level 1 vs. MS Spezifikation CR Level 1 Eigenschaft grid-template-columns grid-template-rows grid-template-areas grid-template grid-auto-columns grid-auto-rows grid-auto-flow grid grid-row-start grid-column-start grid-row-end grid-column-end IE10 Implementation -ms-grid-columns -ms-grid-rows x x x x x x -ms-grid-row -ms-grid-column x x CR Level 1 Eigenschaft grid-row grid-column grid-area grid-row-gap grid-column-gap grid-auto-flow grid-gap align-self justify-self IE10 Implementation x x x x x x x -ms-grid-column-span -ms-grid-row-span -ms-grid-column-align -ms-grid-row-align @mmatuzo

Slide 189

Slide 189

Eigenschaften: Level 1 vs. MS Spezifikation CR Level 1 Eigenschaft grid-template-columns grid-template-rows grid-template-areas grid-template grid-auto-columns grid-auto-rows grid-auto-flow grid grid-row-start grid-column-start grid-row-end grid-column-end IE10 Implementation -ms-grid-columns -ms-grid-rows x x x x x x -ms-grid-row -ms-grid-column x x CR Level 1 Eigenschaft grid-row grid-column grid-area grid-row-gap grid-column-gap grid-auto-flow grid-gap align-self justify-self IE10 Implementation x x x x x x x -ms-grid-column-span -ms-grid-row-span -ms-grid-column-align -ms-grid-row-align @mmatuzo

Slide 190

Slide 190

Eigenschaften: Level 1 vs. MS Spezifikation CR Level 1 Eigenschaft grid-template-columns grid-template-rows grid-template-areas grid-template grid-auto-columns grid-auto-rows grid-auto-flow grid grid-row-start grid-column-start grid-row-end grid-column-end IE10 Implementation -ms-grid-columns -ms-grid-rows x x x x x x -ms-grid-row -ms-grid-column x x CR Level 1 Eigenschaft grid-row grid-column grid-area grid-row-gap grid-column-gap grid-auto-flow grid-gap align-self justify-self IE10 Implementation x x x x x x x -ms-grid-column-span -ms-grid-row-span -ms-grid-column-align -ms-grid-row-align @mmatuzo

Slide 191

Slide 191

Eigenschaften: Level 1 vs. MS Spezifikation CR Level 1 Eigenschaft grid-template-columns grid-template-rows grid-template-areas grid-template grid-auto-columns grid-auto-rows grid-auto-flow grid grid-row-start grid-column-start grid-row-end grid-column-end IE10 Implementation -ms-grid-columns -ms-grid-rows x x x x x x -ms-grid-row -ms-grid-column x x CR Level 1 Eigenschaft grid-row grid-column grid-area grid-row-gap grid-column-gap grid-auto-flow grid-gap align-self justify-self IE10 Implementation x x x x x x x -ms-grid-column-span -ms-grid-row-span -ms-grid-column-align -ms-grid-row-align @mmatuzo

Slide 192

Slide 192

Eigenschaften: Level 1 vs. MS Spezifikation CR Level 1 Eigenschaft grid-template-columns grid-template-rows grid-template-areas grid-template grid-auto-columns grid-auto-rows grid-auto-flow grid grid-row-start grid-column-start grid-row-end grid-column-end IE10 Implementation -ms-grid-columns -ms-grid-rows x x x x x x -ms-grid-row -ms-grid-column x x CR Level 1 Eigenschaft grid-row grid-column grid-area grid-row-gap grid-column-gap grid-auto-flow grid-gap align-self justify-self IE10 Implementation x x x x x x x -ms-grid-column-span -ms-grid-row-span -ms-grid-column-align -ms-grid-row-align @mmatuzo

Slide 193

Slide 193

Eigenschaften: Level 1 vs. MS Spezifikation CR Level 1 Eigenschaft grid-template-columns grid-template-rows grid-template-areas grid-template grid-auto-columns grid-auto-rows grid-auto-flow grid grid-row-start grid-column-start grid-row-end grid-column-end IE10 Implementation -ms-grid-columns -ms-grid-rows x x x x x x -ms-grid-row -ms-grid-column x x CR Level 1 Eigenschaft grid-row grid-column grid-area grid-row-gap grid-column-gap grid-auto-flow grid-gap align-self justify-self IE10 Implementation x x x x x x x -ms-grid-column-span -ms-grid-row-span -ms-grid-column-align -ms-grid-row-align @mmatuzo

Slide 194

Slide 194

Eigenschaften: Level 1 vs. MS Spezifikation CR Level 1 Eigenschaft grid-template-columns grid-template-rows grid-template-areas grid-template grid-auto-columns grid-auto-rows grid-auto-flow grid grid-row-start grid-column-start grid-row-end grid-column-end IE10 Implementation -ms-grid-columns -ms-grid-rows x x x x x x -ms-grid-row -ms-grid-column x x CR Level 1 Eigenschaft grid-row grid-column grid-area grid-row-gap grid-column-gap grid-auto-flow grid-gap align-self justify-self IE10 Implementation x x x x x x x -ms-grid-column-span -ms-grid-row-span -ms-grid-column-align -ms-grid-row-align @mmatuzo

Slide 195

Slide 195

Eigenschaften: Level 1 vs. MS Spezifikation CR Level 1 Eigenschaft grid-template-columns grid-template-rows grid-template-areas grid-template grid-auto-columns grid-auto-rows grid-auto-flow grid grid-row-start grid-column-start grid-row-end grid-column-end IE10 Implementation -ms-grid-columns -ms-grid-rows x x x x x x -ms-grid-row -ms-grid-column x x CR Level 1 Eigenschaft grid-row grid-column grid-area grid-row-gap grid-column-gap grid-auto-flow grid-gap align-self justify-self IE10 Implementation x x x x x x x -ms-grid-column-span -ms-grid-row-span -ms-grid-column-align -ms-grid-row-align @mmatuzo

Slide 196

Slide 196

Eigenschaften: Level 1 vs. MS Spezifikation CR Level 1 Eigenschaft grid-template-columns grid-template-rows grid-template-areas grid-template grid-auto-columns grid-auto-rows grid-auto-flow grid grid-row-start grid-column-start grid-row-end grid-column-end IE10 Implementation -ms-grid-columns -ms-grid-rows x x x x x x -ms-grid-row -ms-grid-column x x CR Level 1 Eigenschaft grid-row grid-column grid-area grid-row-gap grid-column-gap grid-auto-flow grid-gap align-self justify-self IE10 Implementation x x x x x x x -ms-grid-column-span -ms-grid-row-span -ms-grid-column-align -ms-grid-row-align @mmatuzo

Slide 197

Slide 197

Features: Level 1 vs. MS Spezifikation Grid Features IE10 Implementation Box Alignment Module -ms-grid-column-align, -ms-grid-row-align Gaps x Areas Nicht implementiert Auto-placement Nur Explizite Platzierung @mmatuzo

Slide 198

Slide 198

Features: Level 1 vs. MS Spezifikation Grid Features IE10 Implementation Box Alignment Module -ms-grid-column-align, -ms-grid-row-align Gaps x Areas Nicht implementiert Auto-placement Nur Explizite Platzierung @mmatuzo

Slide 199

Slide 199

Features: Level 1 vs. MS Spezifikation Grid Features IE10 Implementation Box Alignment Module -ms-grid-column-align, -ms-grid-row-align Gaps x Areas Nicht implementiert Auto-placement Nur Explizite Platzierung @mmatuzo

Slide 200

Slide 200

Features: Level 1 vs. MS Spezifikation Grid Features IE10 Implementation Box Alignment Module -ms-grid-column-align, -ms-grid-row-align Gaps x Areas Nicht implementiert Auto-placement Nur Explizite Platzierung @mmatuzo

Slide 201

Slide 201

Features: Level 1 vs. MS Spezifikation Grid Features IE10 Implementation Box Alignment Module -ms-grid-column-align, -ms-grid-row-align Gaps x Areas Nicht implementiert Auto-placement Nur Explizite Platzierung @mmatuzo

Slide 202

Slide 202

$ browser support .grid { display: -ms-grid; -ms-grid-columns: 200px 200px; -ms-grid-rows: 130px 130px; display: grid; grid-template-columns: 200px 200px; grid-template-rows: 130px 130px; } @mmatuzo

Slide 203

Slide 203

$ browser support .grid { display: -ms-grid; -ms-grid-columns: 200px 200px; -ms-grid-rows: 130px 130px; display: grid; grid-template-columns: 200px 200px; grid-template-rows: 130px 130px; } @mmatuzo

Slide 204

Slide 204

$ browser support .grid { display: -ms-grid; -ms-grid-columns: 200px 200px; -ms-grid-rows: 130px 130px; display: grid; grid-template-columns: 200px 200px; grid-template-rows: 130px 130px; } @mmatuzo

Slide 205

Slide 205

$ browser support .grid { display: -ms-grid; -ms-grid-columns: 200px 200px; -ms-grid-rows: 130px 130px; display: grid; grid-template-columns: 200px 200px; grid-template-rows: 130px 130px; } @mmatuzo

Slide 206

Slide 206

Chrome 4 Elemente in einem 2 x 2 Grid ohne explizite Platzierung: Darstellung in Chrome und IE11

Slide 207

Slide 207

Chrome IE 11 4 Elemente in einem 2 x 2 Grid ohne explizite Platzierung: Darstellung in Chrome und IE11

Slide 208

Slide 208

$ browser support .item:nth-child(1) { .item:nth-child(3) { -ms-grid-column: 1; -ms-grid-column: 1; -ms-grid-row: 1; -ms-grid-row: 2; } } .item:nth-child(2) { .item:nth-child(4) { } -ms-grid-column: 2; -ms-grid-column: 2; -ms-grid-row: 1; -ms-grid-row: 2; } @mmatuzo

Slide 209

Slide 209

$ browser support .item:nth-child(1) { .item:nth-child(3) { -ms-grid-column: 1; -ms-grid-column: 1; -ms-grid-row: 1; -ms-grid-row: 2; } } .item:nth-child(2) { .item:nth-child(4) { } -ms-grid-column: 2; -ms-grid-column: 2; -ms-grid-row: 1; -ms-grid-row: 2; } @mmatuzo

Slide 210

Slide 210

$ browser support .item:nth-child(1) { .item:nth-child(3) { -ms-grid-column: 1; -ms-grid-column: 1; -ms-grid-row: 1; -ms-grid-row: 2; } } .item:nth-child(2) { .item:nth-child(4) { } -ms-grid-column: 2; -ms-grid-column: 2; -ms-grid-row: 1; -ms-grid-row: 2; } @mmatuzo

Slide 211

Slide 211

$ browser support .item:nth-child(1) { .item:nth-child(3) { -ms-grid-column: 1; -ms-grid-column: 1; -ms-grid-row: 1; -ms-grid-row: 2; } } .item:nth-child(2) { .item:nth-child(4) { } -ms-grid-column: 2; -ms-grid-column: 2; -ms-grid-row: 1; -ms-grid-row: 2; } @mmatuzo

Slide 212

Slide 212

4 Elemente in einem 2 x 2 Grid mit expliziter Platzierung: Darstellung in IE11

Slide 213

Slide 213

Chrome IE 11 6 Elemente in einem 2 x 2 Grid: Darstellung in Chrome und in IE11

Slide 214

Slide 214

Chrome IE 11 6 Elemente in einem 2 x 2 Grid: Darstellung in Chrome und in IE11

Slide 215

Slide 215

B RO WS E R S U PP O R T A U T O P REF I X E R ? @mmatuzo

Slide 216

Slide 216

Autoprefixer ignoriert standardm ßig Grid-Eigenschaften.

Slide 217

Slide 217

Autoprefixer ignoriert standardm ßig Grid-Eigenschaften.

Slide 218

Slide 218

$ autoprefixer module.exports = { plugins: [ require('autoprefixer')({ grid: true, }) ] } @mmatuzo

Slide 219

Slide 219

Autoprefixer mit grid: true Setting.

Slide 220

Slide 220

Autoprefixer mit grid: true Setting.

Slide 221

Slide 221

Gaps werden in IE 10 und 11 durch Spalten bzw. Reihen imitiert.

Slide 222

Slide 222

Gaps werden in IE 10 und 11 durch Spalten bzw. Reihen imitiert.

Slide 223

Slide 223

Autoprefixer Gotchas @mmatuzo

Slide 224

Slide 224

Autoprefixer Gotchas • grid-template oder grid-template-areas + grid-template-columns verpflichtend f r Gap-Support. @mmatuzo

Slide 225

Slide 225

Autoprefixer Gotchas • grid-template oder grid-template-areas + grid-template-columns verpflichtend f r Gap-Support. • Area Bezeichnungen m ssen einzigartig sein. @mmatuzo

Slide 226

Slide 226

Autoprefixer Gotchas • grid-template oder grid-template-areas + grid-template-columns verpflichtend f r Gap-Support. • Area Bezeichnungen m ssen einzigartig sein. • Negative Liniennummern wie grid-column: 1 / -1; werden nicht unterst tzt. @mmatuzo

Slide 227

Slide 227

Autoprefixer Gotchas @mmatuzo

Slide 228

Slide 228

Autoprefixer Gotchas • Die grid Kurzschreibweise wird nicht unterst tzt. @mmatuzo

Slide 229

Slide 229

Autoprefixer Gotchas • Die grid Kurzschreibweise wird nicht unterst tzt. • Die Verwendung von benannten Linien ist nicht m glich. @mmatuzo

Slide 230

Slide 230

Autoprefixer Gotchas • Die grid Kurzschreibweise wird nicht unterst tzt. • Die Verwendung von benannten Linien ist nicht m glich. • Man kann Endlinien nicht definieren. @mmatuzo

Slide 231

Slide 231

Autoprefixer Gotchas • Die grid Kurzschreibweise wird nicht unterst tzt. • Die Verwendung von benannten Linien ist nicht m glich. • Man kann Endlinien nicht definieren. • Kein Auto-Placement. @mmatuzo

Slide 232

Slide 232

11,42% IE Nutzer in Deutschland

Slide 233

Slide 233

11,6% IE Nutzer in sterreich.

Slide 234

Slide 234

Internet Explorer Unterst tzung stellt f r viele EntwicklerInnen noch eine große H rde da.

Slide 235

Slide 235

„I don’t think we owe it to any users to make it all exactly the same. Therefore we can get away with keeping fallbacks very simple. My hypothesis: users don’t mind, they’ve come for the content.“ –Hidde de Vries https://hiddedevries.nl/en/blog/2018-08-11-lets-serve-everyone-good-looking-content

Slide 236

Slide 236

Th ere is no d ar k sid e of t h e mo o n g r i d r e a l l y . M at te r of f ac t i t ' s al l da r k . PINK FLOYD: ECLIPSE @mmatuzo

Slide 237

Slide 237

Verantwortlicher Umgang mit Grid @mmatuzo

Slide 238

Slide 238

Verantwortlicher Umgang mit Grid • Eigenschaften wie grid-auto-flow: dense; oder andere Techniken, die die visuelle Reihenfolge ver ndern, bei interaktionsintensiven Komponenten vermeiden. @mmatuzo

Slide 239

Slide 239

Verantwortlicher Umgang mit Grid • Eigenschaften wie grid-auto-flow: dense; oder andere Techniken, die die visuelle Reihenfolge ver ndern, bei interaktionsintensiven Komponenten vermeiden. • Komponenten mit dem Keyboard testen. @mmatuzo

Slide 240

Slide 240

Verantwortlicher Umgang mit Grid • Eigenschaften wie grid-auto-flow: dense; oder andere Techniken, die die visuelle Reihenfolge ver ndern, bei interaktionsintensiven Komponenten vermeiden. • Komponenten mit dem Keyboard testen. • Nicht die Semantik verschlechtern und die Dokumentstruktur abflachen. @mmatuzo

Slide 241

Slide 241

Verantwortlicher Umgang mit Grid @mmatuzo

Slide 242

Slide 242

Verantwortlicher Umgang mit Grid • Wenn man Autoprefixer verwendet, dann so, dass zu jeder Zeit f r jede/n im Team klar ist, was warum passiert. @mmatuzo

Slide 243

Slide 243

Verantwortlicher Umgang mit Grid • Wenn man Autoprefixer verwendet, dann so, dass zu jeder Zeit f r jede/n im Team klar ist, was warum passiert. • Sicher gehen, dass die Komponenten auch in lteren / eingeschr nkteren Browsern funktionieren. @mmatuzo

Slide 244

Slide 244

Verantwortlicher Umgang mit Grid • Wenn man Autoprefixer verwendet, dann so, dass zu jeder Zeit f r jede/n im Team klar ist, was warum passiert. • Sicher gehen, dass die Komponenten auch in lteren / eingeschr nkteren Browsern funktionieren. • Die Macht von Progressive Enhancement ausnutzen. @mmatuzo

Slide 245

Slide 245

Danke manuel@matuzo.at @mmatuzo