Box Alignment defines how these properties work in other layout methods.
Slide 12
CSS BOX ALIGNMENT LEVEL 3
This module contains the features of CSS relating to the alignment of boxes within their containers in the various CSS box layout models: block layout, table layout, flex layout, and grid layout.
https://drafts.csswg.org/css-align/
Grid container height
stretch
center
http://codepen.io/rachelandrew/pen/jqdNoL
start
end
Slide 16
CSS GRID LAYOUT
“Unlike Flexbox, however, which is single-axis–oriented, Grid Layout is optimized for 2-dimensional layouts: those in which alignment of content is desired in both dimensions.”
https://drafts.csswg.org/css-grid/
Flexbox
Flexbox can wrap flex items onto multiple rows. A new row becomes a new flex container for the purposes of distributing space.
.cards { display:flex; flex-wrap: wrap; } .card { flex: 1 1 250px; margin: 5px; }
Slide 20
https://codepen.io/rachelandrew/pen/Gqvrwz
Slide 21
CSS Grid Layout
Create as many columns as will fit into the container with a minimum width of 200px, and a maximum of 1fr.
.cards { display:grid; grid-template-columns: repeat(auto-fill, minmax(200px,1fr)); grid-gap: 10px; }
Slide 22
https://codepen.io/rachelandrew/pen/Gqvrwz
Slide 23
minmax()
Slide 24
Slide 25
Slide 26
http://codepen.io/rachelandrew/pen/QKwvxJ
Slide 27
minmax()
Rows should be a minimum of 150px and a maximum of auto
.home-hero { display: grid; grid-gap: 1px; grid-auto-rows: minmax(150px, auto); }
Slide 28
CSS Grid auto-placement
Slide 29
Grid auto-placement <ul class="colors">
I have a list with all ye olde web safe colours in it.
Grid auto-placement
I auto-fill columns and rows with minmax()
.colors { display: grid; grid-template-columns: repeat(auto-fill,minmax(80px, 1fr)); grid-gap: 2px; grid-auto-rows: minmax(80px, auto); }
Slide 31
http://codepen.io/rachelandrew/pen/LRWPNp/
Slide 32
Grid auto-placement
Adding classes to some elements, by setting the value of grid-column-end and grid-row-end to span.
.white { grid-column: 1 / -1; grid-row: 3; } .black { grid-column: 1 / -1; grid-row: 6; } .span2 { grid-column-end: span 2; grid-row-end: span 2; } .span3 { grid-column-end: span 3; grid-row-end: span 3; } .tall4 { grid-row-end: span 4; }
Slide 33
Slide 34
Grid auto-placement
grid-auto-flow with a value of dense
.colors { display: grid; grid-template-columns: repeat(auto-fill,minmax(80px, 1fr)); grid-gap: 2px; grid-auto-rows: minmax(80px, auto); grid-auto-flow: dense; }
Slide 35
Slide 36
The source and display order disconnect.
Slide 37
https://caniuse.com/#feat=css-grid
Slide 38
http://cssgridgarden.com/
Slide 39
Slide 40
https://www.youtube.com/c/layoutland
Slide 41
https://gridbyexample.com/video/
Slide 42
Vanishing boxes with
display: contents
Slide 43
DISPLAY: CONTENTS
The element itself does not generate any boxes, but its children and pseudo-elements still generate boxes as normal. For the purposes of box generation and layout, the element must be treated as if it had been replaced with its children and pseudoelements in the document tree.
https://drafts.csswg.org/css-display/#box-generation
Slide 44
allow indirect children to become flex or grid items
Slide 45
display: contents
All elements are direct children of ‘wrapper’ except for the li elements.
display: contents
A two column grid. The h1, p and blockquote with a class of inset are all direct children.
.wrapper { max-width: 700px; margin: 40px auto; display: grid; grid-column-gap: 30px; grid-template-columns:1fr 1fr; } .wrapper h1, .wrapper p { grid-column: 1 / -1; } .inset { grid-column: 1 ; font: 1.4em/1.3 'Lora', serif; padding: 0; margin: 0; } .inset + p { grid-column: 2; }
Slide 47
http://codepen.io/rachelandrew/pen/gLborW
Slide 48
display: contents
The ul has a class of images. By applying display: contents the ul is removed and the li elements become direct children.
.images { display: contents; }
Slide 49
http://codepen.io/rachelandrew/pen/gLborW
Slide 50
https://caniuse.com/#feat=css-display-contents
Slide 51
Getting curvy with
CSS Shapes
Slide 52
CSS SHAPES
CSS Shapes describe geometric shapes for use in CSS. For Level 1, CSS Shapes can be applied to floats. A circle shape on a float will cause inline content to wrap around the circle shape instead of the float’s bounding box.
https://drafts.csswg.org/css-shapes/
CSS Shapes
Using clip-path to cut away part of an image
.balloon { float: right; width: 640px; height: 427px; shape-outside: ellipse(33% 50% at 460px); -webkit-clip-path: ellipse(28% 50% at 460px); clip-path: ellipse(28% 50% at 460px); }
Slide 60
http://codepen.io/rachelandrew/pen/vKJmXR
Slide 61
http://caniuse.com/#feat=css-shapes
Slide 62
https://bennettfeely.com/clippy/
Slide 63
Slide 64
Can I Use this with
Feature Queries
Slide 65
FEATURE QUERIES
The ‘@supports’ rule is a conditional group rule whose condition tests whether the user agent supports CSS property:value pairs.
https://www.w3.org/TR/css3-conditional/#at-supports
Slide 66
http://caniuse.com/#feat=css-featurequeries
Slide 67
Anything new in CSS you can use feature queries to detect support.
Slide 68
Feature Queries
@supports (display: grid) { .has-grid {
Checking for support of Grid Layout
/* CSS for grid browsers here */ } }
Slide 69
Feature Queries
@supports ((display: grid) and (shapeoutside: circle())) { .has-grid-shapes {
Test for more than one thing
/* CSS for these excellent browsers here */ } }
Slide 70
Using Feature Queries ▸ Write CSS for browsers without support ▸ Override those properties inside the feature queries ▸ See https://hacks.mozilla.org/2016/08/using-feature-queries-in-css/
Slide 71
Feature Queries
Write CSS for browsers without support, override that and add new CSS inside the feature query.
.balloon { border: 1px solid #999; padding: 2px; } @supports ((shape-outside: ellipse()) and ((clip-path: ellipse()) or (-webkit-clippath:ellipse()))) { .balloon { border: none; padding: 0; float: right; width: 640px; min-width: 640px; height: 427px; shape-outside: ellipse(33% 50% at 460px); -webkit-clip-path: ellipse(28% 50% at 460px); clip-path: ellipse(28% 50% at 460px); } }
Slide 72
http://codepen.io/rachelandrew/pen/vKJmXR
Slide 73
http://codepen.io/rachelandrew/pen/vKJmXR
Slide 74
Websites that enhance themselves as the platform improves.
Slide 75
Fancy introductions with
Initial Letter
Slide 76
INITIAL LETTER
Large, decorative letters have been used to start new sections of text since before the invention of printing. In fact, their use predates lowercase letters entirely. This [initial-letter] property specifies styling for dropped, raised, and sunken initial letters.
https://drafts.csswg.org/css-inline/#initial-letter-styling
Slide 77
Initial Letter
Make the initial letter four lines tall, one line above the content and 3 into the content.
h1+p::first-letter { initial-letter: 4 3; }
Initial Letter
Using feature queries to test for support before adding rules that style the first letter.
@supports (initial-letter: 3) or (webkit-initial-letter: 3) { h1+p::first-letter { font-weight: bold; initial-letter: 7 ; background-color: rgb(114,110,151); padding: 2em .5em; margin: 0 5px 0 0; color: #fff; border-radius: 50% ; float: left; shape-outside: margin-box; } }
Slide 84
http://codepen.io/rachelandrew/pen/LbEpPX
Slide 85
Upside down and back to front with
Writing modes
Slide 86
http://codepen.io/rachelandrew/pen/LbVQNW
Slide 87
Writing Modes .wrapper { display: grid; grid-template-columns: auto 1fr; grid-gap: 40px; } Using vertical-rl then flipping the text with a transform.
h1 { writing-mode: vertical-rl; transform: rotate(180deg); text-align: right; grid-column: 1; align-self: start; justify-self: start; }
Slide 88
http://codepen.io/rachelandrew/pen/LbVQNW
Slide 89
http://caniuse.com/#feat=css-writing-mode
Slide 90
Variables in CSS with
Custom properties
Slide 91
CSS CUSTOM PROPERTIES (CSS VARIABLES)
This module introduces a family of custom author-defined properties known collectively as custom properties, which allow an author to assign arbitrary values to a property with an author-chosen name, and the var() function, which allow an author to then use those values in other properties elsewhere in the document.
https://drafts.csswg.org/css-variables/
Slide 92
Custom Properties
Define variables then use them in CSS
:root { --primary: blue; --secondary: orange; } h1 { color: var(--primary); }
Slide 93
Custom Properties :root { --primary: blue; --secondary: orange; }
Can be tested for using feature queries
@supports (--primary: blue) { h1 { color: var(--primary); } h2 { color: var(--secondary); } }
Slide 94
http://codepen.io/rachelandrew/pen/mErpZA
Slide 95
http://caniuse.com/#feat=css-variables
Slide 96
Adding things up with
calc()
Slide 97
Basic mathematics in CSS
Slide 98
calc() <div class="wrapper"> <div class="box box1"> <p>…</p>
Three boxes, each with a div nested inside.
<div>height is defined by the flex container.</div> </div> <div class="box box2"> <div>height is 140px</div> </div> <div class="box box3"> <div>height is 14em</div> </div> </div>
Slide 99
calc()
Two of the outer boxes have a height, box1 is the height of the content inside.
Box3 will grow on hover.
.box2 { height: 140px; } .box3 { height: 14em; transition: height 0.5s ease; } .box3:hover { height: 30em; }
Slide 100
calc()
In the CSS for the inner box, we calculate the height as 50% - 20px.
.box > div { color: #fff; border-radius: 5px; position: absolute; bottom: 20px; right: 20px; width: 30%; height: calc(50% - 20px); }
Slide 101
http://codepen.io/rachelandrew/full/VmYYqM/
Slide 102
http://caniuse.com/#feat=calc
Slide 103
Staying put with
position: sticky
Slide 104
POSITION: STICKY
A stickily positioned box is positioned similarly to a relatively positioned box, but the offset is computed with reference to the nearest ancestor with a scrolling box, or the viewport if no ancestor has a scrolling box.
https://drafts.csswg.org/css-position/#sticky-pos
Slide 105
position: sticky
A dl with dt elements followed by multiple dd elements.
background-blend-mode
Blend more than one image, images plus a color.
.image { background-image: url(image.jpg), url(circles-dark.png); background-blend-mode: multiply; }
Slide 120
https://codepen.io/rachelandrew/pen/EQXMjp
Slide 121
mix-blend-mode
Blends an object or text with the background.
h1 { background-color: rgb(0,0,0); color: #fff; mix-blend-mode: multiply; }
Slide 122
https://codepen.io/rachelandrew/pen/MQEwEK
Slide 123
https://codepen.io/rachelandrew/pen/MQEwEK
Slide 124
filter
.blur img { filter: blur(2px); }
Add filters to objects with a line of CSS.
.brightness img { filter: brightness(0.3); } .contrast img { filter: contrast(250%); }
Slide 125
https://codepen.io/rachelandrew/pen/JprGYg
Slide 126
https://caniuse.com/#feat=css-backgroundblendmode
Slide 127
https://caniuse.com/#feat=css-mixblendmode
Slide 128
https://caniuse.com/#feat=css-filters
Slide 129
https://ilyashubin.github.io/FilterBlend/
Slide 130
Adding delight with
Animation
Slide 131
http://animista.net/
Slide 132
http://valhead.com/
Slide 133
CSS Transforms & Animations have excellent browser support.
Many font styles one font file with
Variable Fonts
Slide 138
Variable fonts ▸ Part of the OpenType font file specification ▸ Available as .otf or .ttf files ▸ In CSS use the font-variation-settings property ▸ CSS Fonts Level 4 Spec adds additional values to existing font properties