Snippets
Fancy SVG Letter Animation
Today we’d like to show you a fancy little lettering animation made with SVG and anime.js. The idea is inspired by Jake Bartlett’s gorgeous opening animation for the “Shading Letters in Illustrator” Skillshare class by Jamie Bartlett. While we didn’t do any shading, we wanted to animate the stroke of each letter multiple times to achieve a similar effect.
The "Optimal Image Format" for Each Browser
Perhaps you’ve heard about the WebP image format? And how it’s a pretty good performance win, for the browsers that support it? Well that’s only for Blink-based browsers, at the moment. Estelle Weyl’s article Image Optimization explains the best image format for each browser:
Browser Optimal image format Chrome WebP IE 9+ / Edge JPEG-XR Opera WebP Safari JPEG-2000 And you can serve these formats through the
<picture><source type="">
syntax.Couple that complexity with the complexity of responsive images, and it really seems like outsourcing image delivery to a dedicated service seems like the way to go. At least above a certain scale.
Google Noto Fonts
When text is rendered by a computer, sometimes characters are displayed as “tofu”. They are little boxes to indicate your device doesn’t have a font to display the text.
Google has been developing a font family called Noto, which aims to support all languages with a harmonious look and feel. Noto is Google’s answer to tofu. The name noto is to convey the idea that Google’s goal is to see “no more tofu”. Noto has multiple styles and weights, and is freely available to all.
Print QR Codes For Easy URL References
Often regarded as an advertising eyesore, QR codes have their place in certain circumstances. One obvious example is providing an easily-scanned sigil on a printed Web page that enables the user to return to the live version without having to type the URL.
To create the matching QR code, we’ll use Google’s Chart API, which has four required components:
- The kind of chart information we want Google to deliver (
qr
, in our case);- The rendered size of the QR sigil, in pixels;
- The URL to encode;
- The form of character encoding to use.
We’d typically associate the URL with a heading element at the top of the page:
To create the printed result, we’ll provide a margin on the right side of the
h1
that is large enough for the heading, and then position a QR code in that area:
Code language: CSS
header h1 {
margin-right: 200px;
margin-bottom: 2rem;
line-height: 1.5;
}
Because the QR code will be unique to each page, this would be added as an embedded style sheet:
Code language: CSS
@media print {
header h1:after {
content: url(https://chart.googleapis.com/chart?cht=qr&chs=150x150&chl=http://yourdomain.com&choe=UTF-8);
position: absolute;
right: 0;
top: 0;
}
}
This approach has the downside of forcing the developer to enter a URL individually for each page into the API code. If your Web host is running PHP, you can provide the URL of the current page automatically:
Code language: CSS
@media print {
h1:after {
content: url(https://chart.googleapis.com/chart?cht=qr&chs=150x150
&chl=http://<?=$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];?>
&choe=UTF-8);
position: absolute;
right: 0;
top: 0;
}
}
I totally forgot about print style sheets
Aaron Gustafson recently sent a tweet to Indiegogo in which he pointed out that their order details pages aren’t usable when printed.
When I saw this tweet it struck me, because I realized that it has been a long time since I have optimized a page for print or even spared a thought on checking.
Maybe it’s due to the constant resizing of our browsers and making sure that our sites work perfectly in all shapes and sizes or maybe it’s just because I rarely print web pages myself. Whatever it is, I totally forgot about print style sheets and that’s bad.Optimizing web pages for print is important because we want our sites to be as accessible as possible, no matter the medium. We shouldn’t make assumptions about our users and their behavior. People still print web pages. Just think about articles or blog posts, recipes, contact information, and directions or real estate sites. Someone somewhere will eventually try to print one of the pages you made.
[See various tips and primer in link]
Print style tips from Jeremy Keith
I really wanted to make sure that the print styles for Resilient Web Design were pretty good—or at least as good as they could be given the everlasting lack of support for many print properties in browsers.
Here’s the first thing I added:
Code language: CSS
@media print {
@page {
margin: 1in 0.5in 0.5in;
orphans: 4;
widows: 3;
}
}
That sets the margins of printed pages in inches (I could’ve used centimetres but the numbers were nice and round in inches). The
orphans: 4
declaration says that if there’s less than 4 lines on a page, shunt the text onto the next page. Andwidows: 3
declares that there shouldn’t be less than 3 lines left alone on a page (instead more lines will be carried over from the previous page).I always get widows and orphans confused so I remind myself that orphans are left alone at the start; widows are left alone at the end.
I try to make sure that some elements don’t get their content split up over page breaks:
Code language: CSS
@media print {
p, li, pre, figure, blockquote {
page-break-inside: avoid;
}
}
I don’t want headings appearing at the end of a page with no content after them:
Code language: CSS
@media print {
h1,h2,h3,h4,h5 {
page-break-after: avoid;
}
}
But sections should always start with a fresh page:
Code language: CSS
@media print {
section {
page-break-before: always;
}
}
There are a few other little tweaks to hide some content from printing, but that’s pretty much it. Using print preview in browsers showed some pretty decent formatting. In fact, I used the “Save as PDF” option to create the PDF versions of the book. The portrait version comes from Chrome’s preview. The landscape version comes from Firefox, which offers more options under “Layout”.
For some more print style suggestions, have a look at the article I totally forgot about print style sheets. There’s also tips and tricks for print style sheets on Smashing Magazine. That includes a clever little trick for generating QR codes that only appear when a document is printed.
`font-display`, a CSS alternative to JavaScript font loading
The
font-display
property is landing in browsers, and this is a great introduction to using it:If you don’t know which option to use, then go with
swap
. Not only does it provide an optimal balance between custom fonts and accessibility of content, it provides the same font loading behavior that we’ve relied on JavaScript for. If you have fonts on the page that you’d like to have load, but could ultimately do without, consider going withfallback
oroptional
when usingfont-display
.Until it’s more widely supported, you can continue to use a JavaScript solution, but even then you can feature detect first:
Code language: JavaScript
if ("fontDisplay" in document.body.style === false) {
/* JavaScript font loading logic goes here. */
}