- Design systems have lots of benefits, to name a few
- UI consistency & cohesion
- Faster production
- Shared vocabulary
- Easier to test
- Useful reference
- Future-friendly foundation
- Bake it in!
- Share between tools & environments
- Design tokens
- brand.ai
- http://photoshopetiquette.com/
- After a team has settled on syntax and code conventions, do a small coding project and then share results and talk about it
- Animation helps with perceived performance
- We overestimate passive waiting times
- Novel loaders can increase time people are OK with waiting
- We don't like things to appear suddenly
- Vue has good support for transitions
- Out-of-the-box stuff
- JS hooks
- FLIP
- Vue has a reactive system
- Nuxt makes page transitions easy (apparently)
- SVG! Built with MATH!
- Speed perception matters
- What's the ROI for waiting?
- Design states & transitions
- Fake it, be optimistic
- Change immediately, then check
- Icon fonts are a hack, use SVG
- We've had SVG since 1997
- SVGs can include
- Interactions & animations are more easy than you'd think
- SVG is great, SVG is for the web
- Juniors → Seniors → Directors
- Hated it, bad managers
- Wanted to do own stuff also
- If you love designing, being a director sucks
- First year independant
- No portfolio
- Aim for 60%/40% client/own
- Mexico 68 branding by Lance Wyman
I still design, but I don't like working with clients
–Karel Martens
- Too much energy spent on client work to do personal work
- Personal work is "loss-work"
- Cheating is a choice! Not a mistake
- Personal project
- Photograph buildings w/correct perspective and clean them up
- Put in different landscapes
- 6 months – 11 buildings
- You can't be prepared for the unexpected (duh)
- misplaced.design
- Personal project, One Shared House
- 16yo CS players can teach you AfterEffects
- Steal from other disciplines, avoid trends
- Get off your ass and use your hands
- In the end 40%/60% client/own
- But more satisfaction
We shape our tools and then our tools shape us
- No single person can create a pencil
- Chindōgu – ingenious gadgets that are in fact useless
- Hardware is fading in importance
- Coming up with the technology isn't the hardest part; adoption is
Humans are allergic to change
—Grace Hopper
- Tim Berners-Lee cheated on the adoption with the web by building on wide-spread technology
- Look for design principles when evaluating technology
- How does it fail?
- CSS shapes fail well
- Service Workers fail really well
- How well do web components fail? Depends...
- Who benefits from the technology?
- Users VS. developers
- Internal tools (sass, git etc) VS. external tools (jQuery, React)
- SSR can turn an external tool into an internal tool
- What are the assumptions in the technology?
- Software is political
- Being completely agnostic is really hard
- Technology in the specific is not inevitable, only in the general
- Something like the Web was inevitable, but not the specific Web we have
The street finds its own uses for things
—William Gibson
currentColor
is probably the first CSS variable--
is because it's the "empty prefix"- Main difference with static variables (like in Sass) is that they're dynamic and we can change them with
style=""
- Custom properties (another name for CSS variables) are inherited
- Limitations
- Can't concatenate (but coming later)
url()
is bugged--foo:;
is invalid--foo: ;
is valid
- Why not just use cascade for fallbacks?
- Fallbacks for when the var is not set
- "Invalid at computed-value time" error added to CSS
- Can only now if variable will be invalid after substitution
- Will fallback to initial value
- Cycles in vars make them invalid:
--size: calc(var(--size) + 1em);
height: var(--size); // will be initial
- Use with support queries
@supports (--css: variables) { } // or any var name & value
- In CSS we can go from number to unit, but not unit to number
--p: 33;
width: var(--p) vw;
won't work, value will be33 vw
width: calc(var(--p) * 1vw);
will work
- Variables can be animated and transitioned
- But, since the UA doesn't know the values it'll use "flip at 50%"
- In the future we'll be able to use CSS vars with JS in a better way
CSS.registerProperty()
- CSS variables enable theming independent of CSS structure
- Default default values
--colorD: var(--color, blue);
--colordD
is private by convention--color
is public but can be skipped
- CSS vars allow single value mixins
box-shadow: var(--s) red;
--s: 1px 1px 1px;
- CSS variables and SVG work well together
- CSS variables are a revolution for separation of style and behaviour
- We can create vars that help with mouse event, scrolling etc
--mouse-x
--mouse-y
--scrolling
- Goldman's Dilemma — would you do it?
- Perfectionism, both positive and negative
- Aim for gradual steps toward perfection
One of the basic rules of the universe is that nothing is perfect
—Stephen Hawking
- Can't fix impostorism but we can embrace it – symptom of gaining experience
- Measure yourself with your own yardstick
- Getting better?
- Old work is shit?
- Karoshin – death by overwork
@font-face
defines descriptors, we then define them as properties in selectorsunicode-range
, descriptor for allowed range of Unicode chars- Bad syntax, he's sorry
- We can use this when blending fonts, e.g. latin & japanese
- OpenType & CSS
feature-optional
, stylistic controlsfont-variant
, prefered, poor supportfont-feature-setting
, bad syntax, widespread supportfont-variant-numeric: diagonal-fractions | proportional-nums | tabular-nums;
font-variant-ligatures: discretionary-ligatures | none;
font-synthesis: // control how weight, italic is "faked"
font-kerning
- Subsetting fonts
- Glyphs, big space saving
- WOFF2, now with better space savings, uses brotli not gzip
- Balances decompression time & download speed
- Colored fonts!
- CSS4
font-palette
@font-palette-values
, defines colors per palette
- CSS4
- New generic font families, e.g.
emoji, math, fansong
font-weight
for backwards compatibility uses strings- Changes in a CSS4 module, number from 100-999
- Variable font support
- Custom weights, x-heights etc
- Values in descriptors take a range (in
@font-face
) font-weight: 100 900;
all the weights in just one font!
- Variable fonts are awesome, will be everywhere
- Tests are a good way to create more robust, future-friendly code
- Ensure quality
- Help when working with people (including yourself)
- Documents functionality but doesn't replace
- Make bugs easier to fix and find
- Starting to test is a "level up" moment
- How to Stop Hating Your Tests
- 68% of websites use web fonts
- https://helenvholmes.com/
- FOIT – flash of invisible text
- FOUT – flash of unstyled text
- Browser won't download web fonts until it gets to the first selector that uses it (web fonts dirty little secret)
- Will block for 3sec, painting invisible text but showing underlines, bullets etc => FOIT
- After 3sec will swap to fallback font, then after download switch to "real" font => FOUT
- Minimize FOUT
- Don't use web fonts 😏
- Download less
- Download even less (
unicode-range
) - Download less, earlier ("")
- Font face observer, take control from the browser
font-display: optional;
, what you really want- Match fallback with webfont so the FOUT is less jarring
font-display
block
: invisible for 3s, then fallback, then webfontswap
: immediately fallback, then webfontfallback
: invisible for 100ms, then fallback until 3s, then webfontoptional
: invisible for 100ms, then fallback or webfont whichever is available
- http://font-display.glitch.me/
- variable fonts; basically sorcery
- https://abookapart.com/products/practical-svg
- SVG isn't used as much as it should be
- Need to build a muscle memory – reach for SVG!
- Using vectors? SVG! Get rid of pixel anxiety
- No way to send the right amount of pixels to every user
- Data and charts
- Shape morphing
- Uses SMIL but that's going away
- Transition the
d
property - bodymovin
- Line drawings
- Animating UI
- SVG is the best icon system
- Just include the icon (no icon font or sprites)
- Do art!
- Turbulence filter
- Diagrams
- Headline Lockups
- SVG in the real world
- Print your vector data!
- Explaining your product