One of the biggest perks of a career in Web Design is the potential for working remotely. As long as you have access to Wi-Fi, you can basically work from anywhere, whether it be from home, a co-working space, or even the beach — the world is your proverbial remote oyster.
Whether you’re new to the telecommuting game or a seasoned veteran, working solo comes with its own set of challenges and roadblocks. Design work, in particular, is a collaborative process with project managers, designers, writers, clients, and other stakeholders — each with their own needs and priorities. Fortunately, there are tonnes of fantastic tools out there that help designers and other team members stay on the same page throughout the course of a project. Let’s break down some of the best tools out there and how they can improve collaboration amongst your remote team.
Project Management and Collaboration for Design-Focused Work
Design-focused teams have different requirements for their tools than general marketing teams with designers sprinkled in. Whether your design teams’ goal is to do a better job of tracking revisions, streamline project workflows, or get more control over file annotation and review, these collaboration tools for designers will have you covered.
Cage
Cage combines the project and task-level views familiar from broad project management tools and adds awesome features specifically for design teams. No matter the size, design teams will love the ability to annotate media files right in the software to make feedback and requests more specific and save time going back and forth with team members or clients. Another great feature for design teams is the advanced asset management that keeps every necessary file readily accessible for anyone who needs it.
Visme
Visme makes creating easier. As a project management software with built-in media creation capabilities, it’s a unique offering for design teams looking to streamline workflows. Visme offers a variety of gorgeous templates for presentations, infographics, charts, web graphics, and more that give every stakeholder in the project a headstart on design work. It’s a perfect resource for teams who are working on a lot of projects simultaneously to keep assets organised.
General Project Management and Collaboration Tools
Larger marketing teams with a wider variety of projects need more robust project management tools than design-only teams. Some features remain necessary, such as assigning tasks to certain project members, retaining documents, and even conversing directly with other teammates, but general project management software is unlikely to have robust features that shine for design teams.
Asana
You’ve heard of Asana, right? Almost everyone has. It’s one of the top work management tools on the market. With a variety of built-in ways to organise and visualise work, Asana keeps every person in a project on the same page. Depending on the size of your team, and how much functionality you want, Asana can run a bit on the expensive side. However, with the Business Plan, there are nearly unlimited ways to customise and automate your workflows to help the whole team reach peak efficiency.
Basecamp
This year, Basecamp hit over 3 million account signups. It’s no wonder though, because Basecamp has everything a project needs to run smoothly — all in one place. Without ever leaving Basecamp, project teams can chat, check-in, organise files, schedule meetings or tasks, and generate to-do lists. Whether managing client projects, or internal projects, Basecamp is a great option for keeping everyone synced up.
Meeting Tools, Virtual Offices, Communication Hubs
Though some project management platforms and other tools have communication capabilities built right in, teams that are working remotely often need a little extra help to stay in touch. Whether your team currently relies on email, instant messaging, phone calls, or virtual meetings, there’s a tool out there to make collaboration and communication easier.
Slack
Tired of trying to reach the elusive “Inbox Zero”? Slack‘s here to help. The great thing about Slack is that teams can organise conversations into channels, and individuals only need to follow those conversations that are important to their work. When done well, Slack can help keep design teams collaborative, but also on task. Slack also integrates with an enormous number of apps that makes it a fantastic place to centralise all your team’s efforts.
Twist
Twist offers a slightly different take on team chats than Slack. Less of an instant messaging service for distributed teams (although, it does that too), Twist combines the traditional structure of an email inbox with the topical, conversation threads of instant messaging.
One of the things we love about Twist is that it doesn’t show whether people are on- or off-line. This sounds daunting at first, and I’m sure you’re thinking, “But what if I need an immediate answer?” However, think of the remote work stress this small detail can alleviate from your team members. Less pressure to be constantly connected, taking more focused time out to dig deep on important projects, and getting back in the loop quickly and easily when needed.
StormBoard
Ready to make your meetings truly collaborative? Stormboard is a digital workspace where teams can have meetings, discuss projects, and collaborate on specific tasks regardless of where they are in the world. This browser based tool combines the ideas of conference calls, collaborative whiteboards and project management into one easy-to-use tool. Collaborators can even edit the board under discussion in real time and display their ideas to the team, rather than trying to explain them without visualisation.
Design Libraries & Document Organisation
A great design can take hours, days, weeks, even months to get right. Beyond the final asset, streamlined workflows, new templates, creative learnings, and more can come from the completion of one design project. Having a good design library ensures that an entire team can work collaboratively on the most recent version of important internal or external assets.
InVision
InVision‘s motto is “Design better. Faster. Together.” and it offers lots of great tools built specifically to empower design teams. One of the best is the Design System Manager, which allows teams to centralise their design assets into one place as visuals as well as in code. As guidelines, assets, and images change over time, the advanced versioning system allows creative iteration without losing previous work and the capability to make notes to keep the entire team on the same page when changes are made.
Abstract
Abstract integrates with tools designers already use like Sketch and Adobe XD, making it easy to import files that are already completed or in progress, but need more collaboration.
Combining the principles of project management and design libraries, Abstract allows collaborators to work from master files to iterate and create new designs without losing the original version, get feedback from other project members, and ultimately land on the best design. When designs are finalised and approved, they can be passed over to the developer without the guesswork, thanks to a Git-inspired workflow that saves time and frustration.
Collaborative Proofing and Editing Tools
For many teams, workflows aren’t simple. Whether you’re an in-house designer, agency, or freelance creative, a typical project will have multiple checkpoints and approvals before being finalised. Having the right proofing and editing tools that allow for pinpoint feedback and annotation create a faster, less hazardous road to project completion.
GoVisually
Whether you’re working as a creative freelancer, with an in-house design team, or as a collaborative agency, project delivery and approval can quickly become a cumbersome process. GoVisually streamlines this process with pinpoint annotations directly on designs to eliminate confusion and misunderstanding. Centralised feedback makes sure every project stakeholder stays up to date with the latest changes and revisions, allowing approvals to happen in real-time.
Bonus feature: it integrates with Slack to make communication and notification even faster.
RedPen
Version tracking? Check. Live annotations? Check. Unlimited collaborators? Check. Created by designers, for designers, RedPen knows what design teams need for maximum efficiency. With the click of a mouse, any project member can give feedback that easily turns into a collaborative discussion about the best next steps for each design. The best thing about RedPen is that it’s simple, effective, and impressively easy to use. You don’t even have to create an account to get started.
Figma
Figma takes everything you love about any design software you’ve ever used and mashes it all together in one responsive, interactive, collaborative tool. Teams can design and prototype with a single tool, with no coding required. Figma brings the intention of your designs to life, making it easy to test the effectiveness of your work before bringing in the development team. Collaboration has never been easier. Invite who you want, when you want, and project members can view or edit designs at the same time — all while never losing control over the version history of the task. If your design team is looking for more ways to work together while staying fast and focused, Figma is the best of the best.
Bugherd
If you’re a web designer, or working on a team that’s responsible for a website, Bugherd is a must-have tool. The software acts as a layer on top of your website allowing project members (even those with minimal tech-savvy) to report bugs or issues without a long chain of back-and-forth emails. When an issue is identified, team members simply click on the element to report an issue to developers. With one click, developers can identify the pertinent what, where, and why of the bug and get down to solving the problem faster.
Bonus: it integrates with other apps you likely already use like Slack and Basecamp so your team can maintain their normal workflows, but with superpowers.
Tools For Your Own Personal Sanity
I know from experience that remote work can be tough. With teams spread out all across the globe, it’s easy to feel isolated — there are a million distractions no matter where your “office” is. Luckily, as remote work becomes more common, so do tools that can help us stay focused, remain on task, and ultimately have a better work-from-anywhere experience.
Serene
Distractions abound, no matter where you’re working from. Serene lets you set predefined goals, helping you break your day into achievable sections. On top of helping you break down your big goals into smaller tasks, Serene helps remote workers focus by blocking distracting and wasting websites. The app will even play soothing music meant for focus, if that’s your thing.
Figure It Out Chrome Extension
As a remote entrepreneur, I can’t count on two hands and both feet the number of times I’ve had to Google something like, “time difference from Zurich to California.” At least, until I found the Figure It Out Chrome Extension. Using the extension or the web-version I can input all my team members locations and see, at a glance, what time it is for them when we need to schedule a meeting or find time to collaborate.
Take a Break, Please
Last but not least, remote work can be really hard to disconnect from. You start working on a task or project, and before you know it, four hours have gone by without a break. For your own sanity and personal health, it’s important to remember to get up, stretch, take a walk, something to get away from the screen for just a few minutes. This simple act can reduce task, project, or even job-level burnout. I recommend all remote workers download this app and take a break, please.
The Bottom Line on Remote Design Team Collaboration
Design is rarely a task that lives in a vacuum, and we need the knowledge, feedback, support, and sometimes approval of others — this all requires a collaborative effort.
No matter what type of team you work with, how big or how small, there is a tool (or a stack of tools) that will help improve workflows, productivity, and collaboration. Many of these tools offer free trials so that you can get a sense of the operational improvements, or roadblocks, adopting each software might introduce.
Give some of them a try and see how you can level up your remote design team’s collaboration with small additions that make a big impact during this trying time.
While good use of type helps people to read, great typography can do so much more. Typography can eloquently articulate an idea and colourfully communicate a message in ways which are as powerful as any illustration or photograph.
I’m someone who loves cinema as much as I admire typography. Few things inspire me as much as seeing movie poster typography which either evokes the atmosphere of a film and adds to the telling of its story.
More recently, typography in Quentin Tarantino’s film posters perfectly reflects the atmosphere and character of his movies. In Pulp Fiction, the title’s Aachen Bold typeface is as hardboiled as the film itself. For Once Upon a Time in Hollywood, although the typesetting of the iconic sign deviates from reality as much as other parts of the film, the poster conjures up the spirit of Hollywood.
Saul Bass is possibly the best-known graphic designer of his era and for 1950s and ’60’s Hollywood he created movie posters which are as recognisable as the sign itself. For his poster design for Hitchcock’s Vertigo in 1958, Bass used hand-cut typography which evokes German expressionist films of the 1920s. In 1960, Bass’s slashed title typography for Pyscho — again for Alfred Hitchcock — is both clever and obvious. While Saul Bass is often incorrectly credited with designing one of my favourite film posters from West Side Story, — Bass did design the title sequence — the poster was actually designed by Joseph Caroff who also created James Bond’s famous 007 logo.
Although we don’t yet have the same control over typography on the web as we do in print, new file formats, font delivery services, and web fonts have meant far more typographic flexibility than we had ten years ago. Typography controls in CSS have helped us be more creative with type too. On top of basic font style properties, we can now reliably fine-tune OpenType figures, hyphenation, ligatures, and even kerning.
It’s rare to find such creative uses for type online, studying the work of graphic designers and talented typographers can open our eyes to what we can achieve using today’s type technologies. One of my personal favourite designers and typographers is Herb Lubalin, and learning about him and his work has transformed my own approach to typography.
Herb Lubalin was an American graphic designer who spent his career designing everything from advertising, posters, and even postage stamps. He was fascinated by the look of words and how typographic design can make them sound. Lubalin understood how by combining art, copy, and typography, graphic designers add conviction when communicating messages. He said:
“The better people communicate, the greater will be the need for better typography-expressive typography.”
— Herb Lubalin
Having narrowly passed the entrance exam to the Cooper Union art school in New York, Herbert (Herb) Lubalin was fired from his first job as a graphic artist for asking for a $2 per week raise. In pre-war American advertising agencies, the job of a layout artist was simply to place headlines, copy, and images into available space, but that changed after WW2 with an influx of immigrant designers from Europe. They included Austrian Herbert Bayer, Russian Mehemed Fehmy Agha, and Belarusian Alexey Brodovitch.
These designers imported new processes which brought art directors, layout artists, and writers together to form the creative teams made popular by the famous advertising creative director Bill Bernbach in the 1960s and 1970s.
In 1945, Lubalin became art director at Sudler & Hennessey — a creative studio which specialised in the pharmaceutical industry — where he led a team of designers, illustrators, and photographers. The process which Lubalin established first at Sudler & Hennessey and from 1964 in his own studio is fascinating. He drove the design process by making “tissues” — pen and ink sketches which established the spacial arrangement of its elements — and detailed notes on typographic designs including typeface choices, sizes, and weights.
At the start of any new project, Lubalin began by sketching arrangements of headlines, copy, and images onto tissue paper. Then, he’d lay another tissue on top to refine his ideas, then another, and another, to rapidly develop his design. After his assistants recovered discarded tissues from the floor or trash, they became collectors’ items.
Lubalin was an obsessive perfectionist about typography. For “Let’s talk type” — a trade advertisement for Sudler & Hennessey — Lubalin precisely placed the only paragraph. This copy sits perfectly on the baseline alongside the word “let” and its size and leading allow for the descender from the letter “y” above.
Lubalin was equally as precise about the placement of text in a poster which announced the Avant Garde anti-war poster competition. He would frequently take a scalpel blade to type, adjusting the spacing between letters and altering the height of ascenders and descenders to fit his designs. Letters in the headline for “No More War” are precisely sized and aligned. The tracking of the uppercase blue standfirst creates a block of copy which perfectly fits into its space.
In “The fourth of July means picnics…” Lubalin used perspective to represent the road ahead. This meant considering the tracking of every line of text, sometimes altering words to fit the design. Working with Lubalin’s designs wasn’t easy, and as one of his assistants later described:
“To make everything line up, you’ve got to do it over and over again, and then, if the client alters the text, you’ve got to redo the whole thing. To him (Lubalin,) it was worth it. How long it took or how much it cost wasn’t as important to him as it was to other designers.”
Because of his relentless conviction as well as his talent, Lubalin went on to become one of the most celebrated graphic designers and typographers of the twentieth century. There’s plenty we can learn from how he approached his work and his conviction that design can compellingly communicate.
There are two books on Herb Lubalin and his work you should add to your collection. “Herb Lubalin: Art Director, Graphic Designer and Typographer” (1985) by Gertrude Snyder and Alan Peckolick is out of print, but good copies are available on eBay. Better still is “Herb Lubalin: American Graphic Designer” (2013) by Adrian Shaughnessy and published by Unit Editions. A limited edition of 2000, Shaughnessy’s book features hundreds of examples of Lubalin’s work.
Pre-Formatting Headlines
Headlines are a perfect place to begin being more adventurous with type. Expressive typography needn’t need fancy fonts. You can create an eye-catching headline by using different styles and weights found within many everyday font families. Look for extended families like Montserrat — designed by Julieta Ulanovsky and available on Google Fonts — with its variety of weights ranging from thin and light, to extra-bold, and even black.
For this first Herb Lubalin inspired design, my headline uses black and light weights from this sans-serif typeface. Negative tracking (letter-spacing) and tight leading (line-height) combine to create a block of type which demands attention.
In the past, developing headlines like this involved hard-coding the design into your HTML by adding breaks between individual words, like this:
<h1><strong>UK's <br>
best-<br>
selling <br>
car</strong> <br>
during <br>
the <br>
1970s</h1>
Other times, you might use wrap each word with an inline span element and then change its display property to block:
Instead of these presentational elements, I add explicit line breaks in my HTML:
<h1><strong>UK's
best-
selling
car</strong>
during
the
1970s</h1>
Browsers ignore anything more than a single space between words, so on small viewports, this headline reads like a sentence. I only need foundation styles which style its colours, size, and weights, as well as the negative tracking and tight leading which makes this headline distinctive:
Whereas HTML’s pre element respects pre-formatted text and presents it exactly as written in a document, the CSS white-space property enables similar results without sacrificing semantics. Of the six available white-space values, these are the four I use these most often:
white-space: normal;
Text fills line-boxes and breaks as required
white-space: nowrap;
The text won’t wrap, and it may overflow its container
white-space: pre;
Explicit line-breaks are respected, text breaks with new lines and br elements
white-space: pre-wrap;
White-space is respected, but the text will also wrap to fill line-boxes
I only need the effects of the white-space property on larger viewports, so I isolate it with a media query:
Using several styles from one font family adds visual interest. My Lubalin-inspired design incorporates light, bold, and black weights, plus condensed and regular styles of this sans-serif typeface to produce a variety of text-treatments.
First, I need two structural elements to accomplish my design, main and aside:
<main>…</main>
<aside>…</aside>
While the main element includes my headline and running text, the aside contains four images in a division and five articles about versions of the classic Cortina:
<aside>
<div>
<img src="img-1.svg" alt="Ford Cortina Mark 1 front profile">
<img src="img-2.svg" alt="Ford Cortina Mark 3 rear">
<img src="img-3.svg" alt="Ford Cortina Mark 4 front">
<img src="img-4.svg" alt="Ford Cortina Mark 5 rear profile">
</div>
<article>…</article>
<article>…</article>
<article>…</article>
<article>…</article>
<article>…</article>
</aside>
First, I specify the styles of paragraphs in each of my articles using pseudo-class selectors. Each paragraph uses a different combination of font styles and weights, with mixed-case and uppercase letters:
article:nth-of-type(1) p {
font-family: 'light';
text-transform: uppercase; }
article:nth-of-type(2) p {
font-family: 'bold-condensed';
font-weight: 600;
text-transform: uppercase; }
article:nth-of-type(3) p {
font-family: 'bold-condensed';
font-weight: 600; }
article:nth-of-type(4) p {
font-family: 'light';
text-transform: uppercase; }
article:nth-of-type(5) p {
font-family: 'bold-condensed';
font-weight: 600; }
With those foundation styles in place for every screen size, I introduce layout to the aside element which will be visible on for medium-size screens. For layouts like this, where elements don’t overlap, I often grid-template-areas for their simplicity. This design has nine grid areas. While I could give these areas names which describe the content I’ll place into them — for example, “mark-1” — instead I use letters which makes moving items around my grid a little easier:
@media (min-width: 48em) {
aside {
display: grid;
grid-template-areas:
"a b c"
"d e f"
"g h i";
grid-gap: 1.5rem; }
}
I need to place the four images into my template areas, and not the division which contains them. I change the display property of that element to contents, which effectively removes it from the DOM for styling purposes:
aside div {
display: contents; }
I place those images using area names. Moving them into another area only involves referencing a different area name and no change to their order in my HTML:
On small and medium-size screens, the main and aside elements stack vertically in the order they appear in my HTML. The extra space available in larger viewports allows me to place them side-by-side so visual weight is balanced across both sides of a screen. First, I apply a five-column symmetrical grid to the body element:
Then, I place both main and aside elements using line numbers. This creates an asymmetrical design with a column of white space between my main content and the articles which support it:
CSS Grid is now the best tool to use for implementing inspired layouts, and its powerful properties are also useful for developing intricate typographic designs.
My header contains a headline followed by two paragraphs and their order in HTML means they make sense when read without any styling applied:
I ordered my HTML for a semantic sentence structure, rather than any visual presentation, so to allow me to reorder the elements visually, I add Flexbox properties to my header and a flex-direction value of column:
header {
display: flex;
flex-direction: column; }
By default, elements appear in the order they occur in HTML, but in my design, the last paragraph in this header appears first, above the headline.
The default order value for all elements is 0, so to change the position of this paragraph without altering my HTML, I add a negative value of -1, which places it at the top:
header p:last-of-type {
order: -1; }
My design for medium-size screens includes two large bands of background colours, developed using a CSS gradient. So next, I change the foreground colours of my headline and paragraphs to contrast them against this new background:
The unusual alignment of the three elements in this header is possible by combining CSS Grid with Flexbox. Although it might not be obvious at first, I place the headline and paragraphs in this header onto a four-column symmetrical grid. Leaving one column in the first and last rows empty creates a dynamic diagonal which adds interest to this header:
While the first — which appears at the bottom of my header — leave the first column empty:
header p:first-of-type {
grid-column: 2 / -1; }
The final paragraph—now placed at the top of the header — spans the first three columns, leaving a space on the left:
header p:last-of-type {
grid-column: 1 / 4; }
It’s unusual to see rotated text elements on the web, but when you do, they’re often memorable and always a nice a surprise. I want my headline rotated anti-clockwise, so I add a transform which rotates it negatively by 30 degrees and moves it vertically down by 150px:
transform-origin specifies the point around which transforms happen. You can choose an origin in the centre or any of the four corners of an element — top-left (0 0), top-right (100% 0), bottom-right (100% 100%) or bottom-left (0 100%). You might also specify an origin in pixels, em, or rem units.
For an extra element of surprise, I add a subtle transition to that transform and reduce the amount of rotation when someone passes their cursor over my headline:
In my next Lubalin-inspired design, I combine an ordered list of Cortina models with a multi-coloured headline to make a powerful statement with this header:
This headline includes three lines of text. Whereas I previously avoided using additional elements, to style these lines differently I need three inline span elements:
The most semantic choice to mark up my list of Cortina models and the years during which they were manufactured, is an ordered list. To strongly emphasise each model name, I enclose them within strong elements, which deliver semantic value as well as a bold appearance from default browser styles:
For small viewports, I need only a few foundation styles. The large font size and minimal leading create a solid block of text. Then, I change the span element’s display value from inline to block and use pseudo-class selectors to change the foreground colours of the first and third lines:
Conveniently, there’s no need to specify column or row numbers for each list-item because CSS Grid arranges them automatically because of normal flow. To add greater emphasis, I change the strong elements’ display values to block and set them in uppercase:
Centring an element both horizontally and vertically used to be tricky, but thankfully, Flexbox has made this alignment trivial to implement. Flexbox has two axes — main axis and cross axis — which change direction if you change the default flex-direction value from a row.
The flex-direction of my header remains row, so I align-items centre on the cross axis (vertical,) then justify-content centre along the main axis (horizontal:)
With content now entered in the header, I apply a grid which contains three columns and two rows. Their dimensions will be defined by their content and will resize automatically:
header > div {
display: grid;
grid-template-columns: repeat(3, min-content);
grid-template-rows: auto auto; }
The three multi-coloured lines in the headline are the foundation for this header design. I want to place them into specific columns and rows in this grid, so I add display: contents; to the headline:
h1 {
display: contents; }
Then, I place that multi-coloured text into columns and rows using line numbers:
I want the text in my header to appear vertical, so I rotate each span clockwise by 180 degrees, then change their writing-mode to vertical left–right:
The headline and ordered list in my design form a solid block. To pack these elements tightly together, I change the list’s display property from grid to block. Then, I align content in each list-item to the right, so they sit on my headline’s baseline:
ol {
display: block; }
li {
text-align: right; }
SVG And Text
It’s taken me a long time to appreciate SVG and to become familiar with how to get the best value from it, and I’m still learning. SVG is capable of producing far more than basic shapes, and one of its most exciting features is the text element.
Like HTML text, SVG text is accessible and selectable. It’s also infinitely styleable by using clipping paths, fills including gradients, filters, masks, and strokes. Adding text to SVG is just like including it in HTML, using the text element. Only content inside these text elements is rendered by browsers, and they ignore anything outside them. You can add as many text elements as you need, but my next headline needs only one:
<svg>
<text>'70's best-selling Cortina British car</text>
</svg>
SVG includes a set of properties and attribute values which can be applied to text. Many SVG properties — like letter and word spacing, and text-decoration — are also in CSS. But it’s styling features unique to SVG which help to make SVG text so appealing.
For example, textLength sets the width of rendered text, which will shrink and stretch to fill the space depending on the lengthAdjust value you choose.
textLength
The text will be scaled to fit. Set textLength in percentages or use any numerical values. I prefer to use text-based units, em or rem.
lengthAdjust
Defines how the text will be compressed or stretched to fit the width defined in the textLength attribute.
When used directly on a text element, SVG properties act the same as inline styles:
<svg>
<text textLength="400">'70's best-selling Cortina British car</text>
</svg>
But just as with inline styles, the best value is achieved by styling SVG elements using CSS, whether in an external stylesheet or embedded in HTML. You can even use a style element in an external SVG file or a block of SVG included alongside HTML:
HTML has its span element and SVG includes a similar element which is useful for separating text into smaller elements so they can be styled uniquely. For this headline, I divide the content of the text element between six tspan elements:
By splitting my headline into multiple elements, I’m able to style each individual word. I can even position them precisely within my SVG, according to the baseline or even relative to each other.
x is the horizontal starting point for the text baseline;
y is the vertical starting point for the text baseline;
dx shifts text horizontally from a previous element;
dy shifts text vertically from an earlier element.
For my headline, I position the first tspan element 80px from the top, then each subsequent element appears 80px below it:
tspan elements are useful for precise positioning and individual styling, but they’re not without accessibility concerns. Assistive technology pronounce tspan elements as individual words and even spell them when a tspan wraps a single letter. For example, a screen reader will pronounce this series of tspan elements:
We shouldn’t inconvenience people who use assistive technology or worse make our content inaccessible because of our styling choices. So avoid using tspan unnecessary and never for single letters.
Stroking Text With CSS And SVG
Adding a stroke often helps legibility when text is placed in front of a background image, and it can also make subtle and striking results. You won’t find an official way to stroke text in any CSS specification. But there is an experimental property which uses a Webkit vendor prefix and is widely supported by contemporary browsers.
text-stroke is shorthand for two properties: text-stroke-color and text-stroke-width. For my stroked headline, I first set foundation typography styles for family, size, and weight, then adjust the leading and tracking:
Although text-stroke is an experimental property and not in a W3C specification, now that browsers have implemented it, there’s little chance of it being removed. But if you’re still concerned about supporting a legacy browser, consider using a feature query to test for text-stroke support and provide an appropriate fallback for them.
SVG has stroke properties too, plus a few options which aren’t available in CSS. If you need more options and the widest browser support, SVG is the answer. My SVG header includes six tspan elements:
On top of foundation typography styles, I add the equivalent SVG properties for text-stroke-color and text-stroke-width. I also reduce the opacity of my stroke, which is an option unavailable in CSS:
text {
stroke: #fff;
stroke-width: 1.5px;
stroke-opacity=".8"; }
SVG includes other properties which fine-tune aspects of a stroke. Unlike CSS, SVG strokes can be dashed using the stroke-dasharray property. Alternate values define filled areas and blank areas, so the dashes around my headline text are one unit filled, then ten units blank:
text {
stroke-dasharray: 1, 10; }
Should you need more complex patterns, add extra numbers to the pattern, so a stroke-dasharray value of 1, 10, 1 results in a dashed stroke which is 1 (filled,) 10 (blank,) 1 (filled,) 1 (blank,) 10 (filled,) 1 (blank,) and repeats.
Optimize SVG Accessibility
CSS typography controls are now more powerful than ever, but there are occasions when a design calls for more than styled HTML text. Image replacement techniques have fallen out of fashion, but SVG — whether in an external file or inline within HTML — can deliver scalable text effects. SVG can also be useful for overall performance when optimised well and can be made accessible.
This header contains two typefaces. One is Magehand, a decorative retro-style script by Indonesian type designer Arief Setyo Wahyudi. The other is Mokoko, a slab serif by London-based Dalton Maag which is available in seven weights from thin to black.
Embedding these two fonts in both Web Open Font Format (WOFF) and WOFF2 formats would add over 150kb to my page. Whereas, by converting these fonts to outlines in a graphics editor and delivering the header as an optimised SVG image would add only 17kb.
The order of these paths matters, because just as in HTML, elements are stacked in the order they’re written. SVG includes a set of properties and attribute values which can be applied to any element. I use the fill property to colour each path in my header:
SVG files are frequently smaller than bitmap images or the combined size of several font files, but they nevertheless need careful optimisation to achieve the best performance.
Every element, handle, and node increases the size of an SVG file, so replace paths with basic shapes like circles, ellipses, or rectangles where possible. Simplify curves to reduce the number of nodes and use fewer handles. Popular graphic software like Adobe Illustrator, Affinity Designer, and Sketch export files bloated by unoptimised elements and unnecessary metadata. But, tools like SVGOMG by developer Jake Archibald will strip away unneeded items and can often reduce SVG file size substantially.
SVG images which contain text outlines can also be made accessible by using alternative text and ARIA properties. When linking to an external SVG file, add alternative text as you should with any non-decorative image:
<img src="header.svg"
alt="Cortina. '70s best-selling British car">
The best way to help people who use assistive technology is to embed SVG into HTML. Add an ARIA role and a descriptive label and screen readers will treat the SVG as a single element and read the label description aloud:
<svg role="img" aria-label="Cortina. '70s best-selling British car">
…
</svg>
Adding a title element helps assistive technology to understand the difference between several blocks of SVG, but this title won’t be displayed in a browser:
<svg>
<title>Cortina. '70s best-selling british car</title>
</svg>
When there are several blocks of SVG in a document, give each one a unique ID and add that to its title:
<svg>
<title id="header">…</title>
</svg>
ARIA has several attributes which help SVG accessibility. When SVG is purely decorative and has no semantic value, hide it from assistive technology by adding an aria-hidden attribute:
<svg aria-hidden="true">
…
</svg>
For my design, I use SVG in place of an HTML heading. To replace the missing semantics for assistive technology, use an ARIA role attribute and a value of heading. Then add a level attribute which matches the missing HTML:
<svg role="heading" aria-level="1">
…
</svg>
Clipping Type
The CSS background-clip property defines whether an element’s background extends underneath its border-box, padding-box, or content-box, according to the CSS box model:
border-box
Background extends to the outside edge of the border (and underneath the border).
padding-box
Background extends to the outside edge of the padding only.
content-box
The background is rendered within (clipped to) the content box only.
But, there’s one more value which offers many more opportunities for inspiring typography. Using text as a value for background-clip clips an element’s background to the space occupied by the text it contains.
In my next example, the brake disk background image is visible only where there’s text in the headline. When my headline includes more content or its text size increases, more of that background image will be visible:
You can apply the text value for background-clip to any element except the :root, HTML. As support forbackground-clip is limited, I use a feature query which delivers those styles only to supporting browsers:
In SVG, the defs element stores graphical objects which can be referenced from elsewhere in a file. These include the patterns which contain my images and I add one for each letter:
Content in the defs element is not rendered directly and to display it I reference them with either a use attribute or url. My SVG contains one path for each of the seven letters in the word “Cortina,” and I fill each path with a pattern using its unique ID:
Image elements allow either bitmap or vector images to be rendered within an SVG. My design incorporates three car part blueprint images which I link to using a standard href attribute:
These three car part pattern images fill each letter, and the result is a striking headline design which demands attention.
Combining Techniques
There’s no doubt that Herb Lubin had a masterful ability to make type talk. For this final Lubin-inspired example, I put together the techniques I’ve demonstrated to create a compelling design for this classic ’70s Ford.
To develop this design, I need two structural elements which should be very familiar by now, a main and aside:
<main>…</main>
<aside>…</aside>
My main element contains a header element with an SVG headline followed by a division which includes my running text. I add an ARIA role and level to my headline to ensure its SVG text is accessible:
Lubalin’s designs are often energetic, so to fill my main element with energy, I apply grid properties and use three columns and five rows to develop an asymmetrical layout.
This design is dominated by an outline of the charismatic Cortina, and a text-based background image which covers the main element. I scale this SVG to fill the element’s background, and change the background-origin so it appears only behind the content and not its border or padding:
main {
background-image: url(main.svg);
background-origin: content-box;
background-position: top right;
background-repeat: no-repeat;
background-size: 100% 100%; }
Leaving columns around my header and text division empty creates negative space which helps to lead someone’s eye around the composition. The header occupies the first two of my three columns while the division fills the last two:
One of the benefits of using the SVG text element is the ability to position text according to its baseline or relative to each elements. My headline SVG includes two text elements for the name of this car, and a third for the period it was manufactured. I want to place this final text element precisely 250px from the left and 60px from the top of my SVG:
This dazzling design becomes more memorable on larger viewports when the text-based SVG background image and my Cortina outline fit alongside each other. I apply a two-column symmetrical grid to the body element:
On the web, inspiring typography should be attractive and readable, but the readability of running text can easily be affected by the background behind it.
The backdrop-filter applies CSS filter effects to elements behind the text. These filters include blur, brightness and contrast, and colour effects which can all help to make the running text more readable against either background images, graphics, or patterns.
Apply one or multiple filters using the same CSS filter syntax I demonstrated in a previous issue:
main {
backdrop-filter: brightness(25%); }
main {
backdrop-filter: brightness(25%) contrast(50%); }
backdrop-filter is part of the Filter Effects Module Level 2 specification. It already has solid support in contemporary browsers, although some still require the Webkit vendor prefix:
main div {
-webkit-backdrop-filter: blur(3px);
backdrop-filter: blur(3px); }
NB: Smashing members have access to a beautifully designed PDF of Andy’s Inspired Design Decisions magazine and full code examples from this article. You can also buy the PDF and examples from this along with every other issue from Andy’s website.
However, even that doesn’t seem to be enough to meet the worldwide demand for video content. In a study, HubSpot states that 43% of people want to see more video content in the future.
However, as always, creating online content is never enough. You have to back it up with SEO optimized practices that make your business and digital content more visible and accessible by target audiences.
Let’s find out how marketers can adopt a few strategies to make their video content and SEO practices get in sync for a higher return on investment.
How to get your videos picked up for featured snippets
As video content takes over the digital platforms, how can Google stay behind the trend? Google’s algorithm is adjusting and updating to incorporate the new way of how people are producing and consuming digital content via videos.
Most of us have seen the video featured snippets on Google search engine results, at one point or another.
Besides, in “A reintroduction to Google’s featured snippets,” the tech giant talks about how featured snippets don’t necessarily have to be textual. According to the newly launched video featured snippets, the search engine directly takes to the specific point in the video where it answers or provides a solution to your query.
Google is continually working to improve the efficiency, accuracy, and intuitiveness of its search engine algorithm. This means, as a business functioning in the digital times, you have to keep up with the latest industry practices and trends to continue enjoying the attention of your audience and facilitating them.
In 2020, you would see more video featured snippets. Here are the three most effective ways that will help you get your videos picked up for featured snippets.
Organize your video content into relevant sections
This is very important!
One of the significant aspects of ranking your content high on search engine result pages, like Google, is to deliver value for your readers. You should make it easy and simple for audiences to find the answer to their queries. And a great way to do this is to divide your content into discrete sections that all deliver value for different search queries.
You must organize the video into clear segments and help Google understand what your video is about and how it can help visitors.
For example, a video on the Ketogenic diet may include the following sections:
What is a keto diet?
Keto-friendly food items
Benefits of following the keto diet
A keto diet plan
Adopting this practice will make it easy for search engines to use specific clips from the video as a featured snippet when relevant to a query.
Optimize the video for SEO
As marketers around the world are investing more and more into producing video content, not optimizing your videos for the SERPS means missing out on a substantial section of potential viewers.
The title, description, and tags tell Google what your video is all about. This assists the algorithms in increasing the visibility of your video content when it’s relevant to a particular search query.
So, other than publishing your videos with discrete sections, you should also make sure it is optimized for SEO.
Besides, according to research by HubSpot, where they studied 165 videos featured snippets, around 80% of them contained a keyword in the title of the video. This means that traditional SEO practices are also useful and very important for video content.
Include a transcript for every video
YouTube has become one of the major players in the market for publishing and consuming video content. A lot of businesses these days prefer first to publish their explainer, 2D animation, corporate and other videos on YouTube, and then have it embedded elsewhere.
Even though the captions or subtitles that YouTube generates automatically are quite good, but it’s not the best. The platform falls short now and then.
How building your YouTube channel can boost your SEO results
YouTube’s popularity as a search engine is going off the charts.
Based on the data from Jumpshot, it is fair to say that we need to broaden our views on what ‘search’ means for digital users. According to the data, YouTube is the third most popular search engine after Google web search and Google images. It is even twice more commonly used than Bing.
As more and more people start to use YouTube to search for things, it is highly recommended for marketers to publish tailored and optimized content, particularly for YouTube.
It has become too big for businesses to ignore anymore.
Luckily, the increasing demand for producing video content is brilliantly being met by some of the professional video production company. Making it very easy for marketers to create and share valuable, customized video content.
It’s very simple. The more videos you put out there, the stronger your YouTube channel gets, and the more visible you become.
You can even direct a chunk of this traffic to your website and nourish them to become your leads and customers.
Besides, you can even increase your organic Google traffic by publishing SEO optimized YouTube videos.
Considering YouTube is owned by Google, in 2020, we should see even more YouTube videos in our search results.
How embedding YouTube videos will help with bounce rate
If people love videos so much, why not give them more of it.
Your website and blog posts are a couple of places where the majority of people come to find out some specific information. Hence, it is highly recommended to embed video content on your website and blog posts, as relevant. Besides, it not only improves the experience of your website visitors and delivers additional value for blog readers, but it also significantly improves your bounce rate.
There are many reasons for the high bounce rate, including:
The webpage doesn’t meet the expectations of the visitors.
The web design is not appealing, user-friendly, or intuitive enough.
The user rather too quickly found what they were looking for and had no reason to continue looking around.
However, one of the effective ways to improve your website’s bounce rate is to embed YouTube videos.
Besides, you don’t necessarily have to use your own videos all the time. You can embed any YouTube video that is relevant to your content and adds value for visitors, by mentioning the source.
Wrap up
As the people across the globe continue to share and consume information through videos, it becomes more and more important for businesses and brands to tap into the highly aesthetic medium of expression. Falling behind in producing video content, today means missing out on several opportunities of engaging with your target audience and improving your organic visibility on search engine result pages. Hence, make sure you are not only creating exciting videos for your audience but also following these strategies to make the best out of your investment in video content.
I was debugging some CSS last week, and I think that post is missing something important: your attitude.
Now – I’m not a very good CSS developer yet. I’ve never written CSS professionally and I don’t understand a lot of basic CSS concepts (I think I finally understood for the first time recently how position: absolute works). And last week I was working on the most complicated CSS project I’d ever attempted.
While I was debugging my CSS, I noticed myself doing some bad things that I normally would not! I was:
• making random changes to my code in the hopes that it would work • googling a lot of things and trying them without understanding what they did • if something broke, reverting my changes and starting again
This strategy was exactly as effective as you might imagine (not very effective!), and it was because of my attitude about CSS! I had this unusual-for-me belief that CSS was Too Hard and impossible for me to understand. So let’s talk about that attitude a bit!
It’s super unfortunate this specific bug (a difference in z-index behavior between Chrome and Firefox) is what was giving Julia a hard time. Those kind of cross-browser differences are fewer and farther between these days, thankfully. I’m certainly sympathetic to CSS being super tricky sometimes, and it can be that way without dealing with an actual browser bug.
But I like the sentiment: if you go into a tricky problem with a positive I can do this attitude starting with the basics, you can do it.
I think literally everything in life is easier and better with a better attitude. Food tastes better! Reminds me of my favorite mis-remembered quote from good ol’ Uncle Iroh from The Last Airbender:
The best tasting tea is the tea you drink when you are in a good mood.
Every week users submit a lot of interesting stuff on our sister site Webdesigner News, highlighting great content from around the web that can be of interest to web designers.
The best way to keep track of all the great stories and news being posted is simply to check out the Webdesigner News site, however, in case you missed some here’s a quick and useful compilation of the most popular designer news that we curated from the past week.
Note that this is only a very small selection of the links that were posted, so don’t miss out and subscribe to our newsletter and follow the site daily for all the news.
21 Must-Have Tools for Graphic Designers in 2020
Stop Using Google Analytics on your Website
5 Essential Skills for Web Developers Today
‘Zoombombing’ is a Horrifying New Trend
‘Do You Miss the Office’ Noise Generator
8 Top Illustration Resources to Level up your Project
61 Best Web Developer Portfolio Examples
Microsoft Edge Overtakes Mozilla Firefox to Become Second Most-used Browser
The Ultimate Guide to Information Architecture
High-Converting Landing Page Examples from 2019 and 2020
Things Markdown Got Wrong
Font Books
5 Most Common WordPress Attacks in 2020
Dear Internet: We Must Ban Targeted Advertising Immediately
4 Personal Website Ideas for Designers & Why They Work
10 Trends Shaping Popular Dribbble Shots Right Now
How to Work Remotely When it Matters Most
When Does it Make Business Sense to Use a Microsite?
Open Source Fonts are Love Letters to the Design Community
Why Design-isms are a Problem
How to Customize your New Slack Interface
Tips, Interviews, and Resources to Guide You in your Remote Work
The Keys to Flow and How to Find your Focus
6 Fatal Mistakes Made by Ad Tech Giants in the 2010s
Sensible Design: Making Ethically Personalized Digital Products
Want more? No problem! Keep track of top design news from around the web with Webdesigner News.
Chase McCoy wrote a nifty post about the “gap problem” when making a grid of items. His argument might be summarized like this: how should we space elements with margins in CSS? He notes that the gap property isn’t quite ready for prime time when it comes to using it with flexbox, like this:
.grid {
display: flex;
gap: 10px;
}
Right now, using gap with flexbox is only supported in Firefox and I’ve already caught myself forgetting about that in a few projects. So watch out for that.
Make a grid with a 10px gap between each column and row.
Each column should have a minimum width (150px).
Each column should also be equal width (1fr).
The grid should auto-fill as many columns that can fit.
The nifty thing about all this is that our grid is now effectively responsive because of minmax — if you resize the browser, then the grid will snap down into fewer columns, just like this:
No media queries at all! Although sure, there’s a few other ways that you could get this to work but I think this is neat not just because we’re avoiding media queries — instead, it’s because it teaches us to think in a new way when designing and building components.
Chase continues:
With this technique, instead of using breakpoints to specify the screen size where your items should stack, you specify the minimum size an element should be before it stacks. I like this because it encourages developers to think about responsive design in terms of behaviors instead of screen sizes.
“Behaviors instead of screen sizes” is such a great way to think about component design! A lot of the problems I’ve encountered when making components for a design system is when I’ve been thinking about screen sizes — mobile, tablet, desktop, etc. — and trying to make those components fit within those constraints.
Thinking in behaviors is always more effective because there are so many things that can impact a component beyond what screen or device width we’re working with. Perhaps we want that component to fit inside another component. Or we want to align some helper text to the side of it for comparison.
Either way, thinking about behaviors instead of screen sizes isn’t really going to be fully impossible until we have container queries, as Chris writes:
Container queries are always on the top of the list of requested improvements to CSS. The general sentiment is that if we had container queries, we wouldn’t write as many global media queries based on page size. That’s because we’re actually trying to control a more scoped container, and the only reason we use media queries for that now is because it’s the best tool we have in CSS. I absolutely believe that.
I’ve been coding web animations and helping others do the same for years now. However, I have yet to see a concise list of tips focused on how to efficiently build animations, so here you go!
I will be using the GreenSock Animation Platform (GSAP). It provides a simple, readable API and solves cross-browser inconsistencies so that you can focus on animating. The code and concepts should be understandable even if you’ve never used GSAP. If you’d like to familiarize yourself with the basics of GSAP first so that you can get the most out of this article, the best place to begin is GSAP’s getting started page (includes a video).
Tip #1: Use an animation library
Some developers think that using an animation library is wasteful because they can just use native browser technologies like CSS transitions, CSS animations or the Web Animations API (WAAPI) to accomplish the same thing without loading a library. In some cases, that’s true. However, here are a few other factors to consider:
Browser bugs, inconsistencies, and compatibility: An animation library, like GSAP, solves these for you and is universally compatible. You can even use motion paths in IE9! There are many problematic areas when it comes to cross-browser issues, including handling transform-origin on SVG elements, path stroke measurements, 3D origins in Safari, and many more that we don’t have the space to list.
Animation workflow: Building even moderately complex animations is much faster and more fun with a tool like GSAP. You can modularize animations, nest them as deeply as you want, and have their timing adjusted automatically. This makes it so much easier to experiment. Trust me: once you try building an animation sequence in CSS and then in GSAP, you’ll see what I mean. Night and day! Future edits are faster too.
Animate beyond the DOM: Canvas, WebGL, generic objects, and complex strings can’t be animated with native technologies. Using one consistent tool for all your animations is much cleaner.
Runtime control: Using a good animation library can enable you to pause, resume, reverse, seek through, or even gradually change the speed of an entire animation sequence. You can control each transform component independently (rotation, scale, x, y, skew, etc.). You can also retrieve those values at any time as well. JavaScript animations give you ultimate flexibility.
Easing options (bounce, elastic, etc.): CSS only gives you two control points for eases. GSAP’s CustomEase lets you literally create any ease you can imagine.
Lag smoothing: GSAP can prioritize absolute timing or adjust things on the fly to avoid jumps if the CPU gets bogged down.
Advanced capabilities: Using GSAP, it’s easy to morph SVGs, add physics/inertia, edit motion paths directly in the browser, use position-aware staggers, and more.
Most of the top animators in the industry use a tool like GSAP because they’ve learned these same things over the years. Once you get beyond very basic animations, a JavaScript library will make your life much, much easier and open up entirely new possibilities.
Tip #2: Use timelines
A good animation library will provide some way of creating individual animations (called tweens) and a way to sequence animations in a timeline. Think of a timeline like a container for your tweens where you position them in relation to one another.
By default in GSAP, tweens added to a timeline will wait for the previous tweens to complete before running. The +=0.5 adds an additional offset or delay of a half-second as well, so the second tween will start 0.5 seconds after the first tween finishes no matter how long the first tween’s duration is.
To increase the amount of time between the tween to 1 second, all you need to do is change the +=0.5 to +=1! Super easy. With this approach, you can iterate on your animations quickly without worrying about doing the math to combine previous durations.
Tip #3: Use relative values
By “relative values” I mean three things:
Animate values relative to their current value. GSAP recognizes += and -= prefixes for this. So x: "+=200" will add 200 units (usually pixels) to the current x. And x: "-=200" will subtract 200 from the current value. This is also useful in GSAP’s position parameter when positioning tweens relative to one another.
Use relative units (like vw, vh and, in some cases, %) when values need to be responsive to viewport size changes.
Use methods like .to() and .from() (instead of .fromTo()) whenever possible so that the start or end values are dynamically populated from their current values. That way, you don’t need to declare start and end values in every tween. Yay, less typing! For example, if you had a bunch of differently-colored elements, you could animate them all to black like gsap.to(".class", {backgroundColor: "black" }).
Tip #4: Use keyframes
If you find yourself animating the same target over and over in a row, that’s a perfect time to use keyframes! You do so like this:
No timeline necessary! To space out the tweens we just use the delay property in each keyframe. (It can be negative to create overlaps.)
Tip #5: Use smart defaults
GSAP has default values for properties like ease ("power1.out") and duration (0.5 seconds). So, the following is a valid tween that will animate for half a second.
gsap.to(".box", { color: "black" })
To change GSAP’s global defaults, use gsap.defaults():
// Use a linear ease and a duration of 1 instead
gsap.defaults({ ease: "none", duration: 1 });
This can be handy, but it’s more common to set defaults for a particular timeline so that it affects only its children. For example, we can avoid typing duration: 1 for each of the sub-tweens by setting a default on the parent timeline:
We mentioned this briefly in the third tip, but it deserves its own tip.
If you have multiple elements that share the same class of .box, the code above will animate all of the elements at the same time!
You can also select multiple elements with different selectors by using a more complex selector string:
gsap.to(".box, .circle", { ... });
Or you can pass an array of variable references as long as the elements are of the same type (selector string, variable reference, generic object, etc.):
var box = document.querySelector(".box");
var circle = document.querySelector(".circle");
// some time later…
gsap.to([box, circle], { ... });
Tip #7: Use function-based values, staggers, and/or loops
Function-based values
Use a function instead of a number/string for almost any property, and GSAP will call that function once for each target when it first renders the tween. Plus, it’ll use whatever gets returned by the function as the property value! This can be really handy for creating a bunch of different animations using a single tween and for adding variance.
GSAP will pass the following parameters into the function:
The index
The specific element being affected
An array of all of the elements affected by the tween
For example, you could set the movement direction based on the index:
Or you could choose items from an array:
Staggers
Make your animations look more dynamic and interesting by offsetting the start times with a stagger. For simple staggered offsets in a single tween, just use stagger: 0.2 to add 0.2 seconds between the start time of each animation.
You can also pass in an object to get more complex stagger effects, including ones that emanate outward from the center of a grid or randomize the timings:
It can be helpful to loop through a list of elements to create or apply animations, particularly when they are based on some event, like a user’s interaction (which I’ll discuss later on).
To loop through a list of items, it’s easiest to use .forEach(). But since this isn’t supported on elements selected with .querySelectorAll() in IE, you can use GSAP’s utils.toArray() function instead.
In the example below, we are looping through each container to add animations to its children that are scoped to that container.
Tip #8: Modularize your animations
Modularization is one of the key principles of programming. It allows you to build small, easy-to-understand chunks that you can combine into larger creations while still keeping things clean, reusable, and easy to modify. It also lets you to use parameters and function scope, increasing the re-usability of your code.
Functions
Use functions to return tweens or timelines and then insert those into a master timeline:
function doAnimation() {
// do something, like calculations, maybe using arguments passed into the function
// return a tween, maybe using the calculations above
return gsap.to(".myElem", { duration: 1, color: "red"});
}
tl.add( doAnimation() );
Nesting timelines can truly revolutionize the way you animate. It lets you sequence really complex animations with ease while keeping your code modular and readable.
function doAnimation() {
const tl = gsap.timeline();
tl.to(...);
tl.to(...);
// ...as many animations as you'd like!
// When you're all done, return the timeline
return tl;
}
const master = gsap.timeline();
master.add( doAnimation() );
master.add( doAnotherAnimation() );
// Add even more timelines!
Here’s a more complex demo showing the same technique using a Star Wars theme by Craig Roblewsky:
CodePen Embed Fallback
Wrapping your animation-building routines inside functions also makes recreating animations (say, on resize) a breeze!
var tl; // keep an accessible reference to our timeline
function buildAnimation() {
var time = tl ? tl.time() : 0; // save the old time if it exists
// kill off the old timeline if it exists
if (tl) {
tl.kill();
}
// create a new timeline
tl = gsap.timeline();
tl.to(...)
.to(...); // do your animation
tl.time(time); // set the playhead to match where it was
}
buildAnimation(); //kick things off
window.addEventListener("resize", buildAnimation); // handle resize
Effects
With effects, you can turn a custom animation into a named effect that can be called anytime with new targets and configurations. This is especially helpful when you have standards for your animations or if you are going to be calling the same animation from different contexts.
Here’s a super-simple “fade” effect to show the concept:
// register the effect with GSAP:
gsap.registerEffect({
name: "fade",
defaults: {duration: 2}, //defaults get applied to the "config" object passed to the effect below
effect: (targets, config) => {
return gsap.to(targets, {duration: config.duration, opacity:0});
}
});
// now we can use it like this:
gsap.effects.fade(".box");
// Or override the defaults:
gsap.effects.fade(".box", {duration: 1});
Tip #9: Use control methods
GSAP provides many methods to control the state of a tween or timeline. They include .play(), .pause(), .reverse(), .progress(), .seek(), .restart(), .timeScale(), and several others.
Using control methods can make transitions between animations more fluid (such as being able to reverse part way through) and more performant (by reusing the same tween/timeline instead of creating new instances each time). And by giving you finer control over the state of the animation, it can help with debugging as well.
Here’s a simple example:
One amazing use case is tweening the timeScale of a timeline!
CodePen Embed Fallback
Use case: interaction events that trigger animations
Inside of event listeners for user interaction events, we can use control methods to have fine control over our animation’s play state.
In the example below, we are creating a timeline for each element (so that it doesn’t fire the same animation on all instances), attaching a reference for that timeline to the element itself, and then playing the relevant timeline when the element is hovered, reversing it when the mouse leaves.
CodePen Embed Fallback
Use case: Animating between multiple states of a timeline
You may want a set of animations to affect the same properties of the same elements, but only in certain sequences (e.g. active/inactive states, each with mouseover/mouseout states). It may get tricky to manage. We can simplify it by using states of a timeline and control events.
Use case: Animating based on the scroll position
We can easily fire animations based on the scroll position by using control methods. For example, this demo plays a full animation once a scroll position has been reached:
You can also attach the progress of an animation to the scroll position for more fancy scroll effects!
But if you’re going to do this, it’s best to throttle the scroll listener for performance reasons:
Hot tip: GreenSock is working on a plugin to make scroll-based animations even easier! You’re in for quite a treat. Keep your eyes peeled for news.
Bonus tip: Use GSAP’s plugins, utility methods, and helper functions
GSAP plugins add extra capabilities to GSAP’s core. Some plugins make it easier to work with rendering libraries, like PixiJS or EaselJS, while other plugins add superpowers like morphing SVG, drag and drop functionality, etc. This keeps the GSAP core relatively small and lets you add features when you need them.
Plugins
MorphSVG morphs between any two SVG shapes, no matter the number of points, and gives you fine control over how the shapes are morphed.
CodePen Embed Fallback
DrawSVG progressively reveals (or hides) the stroke of an SVG element, making it look like it’s being drawn. It works around various browser bugs that affect typical stroke-dashoffset animations.
MotionPath animates anything (SVG, DOM, canvas, generic objects, whatever) along a motion path in any browser. You can even edit the path in-browser using MotionPathHelper!
CodePen Embed Fallback
GSDevTools gives you a visual UI for interacting with and debugging GSAP animations, complete with advanced playback controls, keyboard shortcuts, global synchronization and more.
CodePen Embed Fallback
Draggable provides a surprisingly simple way to make virtually any DOM element draggable, spinnable, tossable, or even flick-scrollable using mouse or touch events. Draggable integrates beautifully (and optionally) with InertiaPlugin so the user can flick and have the motion decelerate smoothly based on momentum.
CodePen Embed Fallback
CustomEase (along with CustomBounce and CustomWiggle) add to GSAP’s already extensive easing capabilities by enabling you to register any ease that you’d like.
SplitText is an easy to use JavaScript utility that allows you to split HTML text into characters, words and lines. It’s easy to use, extremely flexible, works all the way back to IE9, and handles special characters for you.
CodePen Embed Fallback
ScrambleText scrambles the text in a DOM element with randomized characters, refreshing new randomized characters at regular intervals, while gradually revealing your new text (or the original) over the course of the tween. Visually, it looks like a computer decoding a string of text.
CodePen Embed Fallback
Physics2D lets you tween the position of elements based on velocity and acceleration as opposed to going to specific values. PhysicsProps is similar but works with any property, not just 2D coordinates.
CodePen Embed Fallback
Utility methods
GSAP has built-in utility methods that can make some common tasks easier. Most are focused on manipulating values in a particular way, which can be especially helpful when generating or modifying animation values. The ones that I use most often are .wrap(), .random, .interpolate(), .distribute(), .pipe(), and .unitize(), but there are many others you might find helpful.
Helper functions
In a similar light, but not built into GSAP’s core, are some helper functions GreenSock has created over the years to deal with specific use cases. These functions make it easy to FLIP your animations, return a random number based on an ease curve, blend two ease curves, and much more. I highly recommend checking them out!
Conclusion
You’ve made it to the end! Hopefully, you’ve learned a thing or two along the way and this article will continue to be a resource for you in the years to come.
As always, if you have any questions about GSAP, feel free to drop by the GreenSock forums. They’re incredibly helpful and welcoming! As an employee of GreenSock, that’s where I hang out often; I love helping people with animation-related challenges!
You know what sucks? Having to navigate through dozens of tools, all on separate dashboards, just to get one job done.
Nowadays, there’s a tool for everything, and while that’s amazing, it’s very overwhelming sometimes. Oftentimes, some tools are forgotten about completely.
How on earth do we tackle this situation? I mean, as time goes on, your digital tool belt will most likely expand.
This whole headache of remembering which tools you and your team use, logins, and so on will only get worse.
Unless, of course, you use Teamstack.
What is Teamstack? Other than being the answer to all your problems, Teamstack is a cloud identity and access management platform that provides your workforce with secure, convenient access.
It works with 500+ applications, greatly simplifying the entire process.
By automating the ability for employees, contractors, and customers to access the apps you use every day, working together becomes a seamless experience.
But this is just the tip of the iceberg. There are loads of features that will get you admittedly more excited than you should be about work. Don’t worry, we’re going to cover those down below.
Single Sign On (SSO) and Form Based Authentication (FBA)
Having to make an account for everyone is… exhausting. I know it, you know it, everyone knows it. Teamstack knows that, too.
That’s why you and your entire team of hard-working individuals can use single sign-on via SAML.
Form-based authentication provides Teamstack with their own way to authenticate logins via web form. FBA is currently available through web browsers, but it’ll soon support mobile apps via IOS and Android.
Multi-factor authentication
Weak or compromised passwords are the most common reason security is compromised. Teamstack wants to prevent that from happening, so they promote a multi-factor authentication method as their standard.
Multiple factor types
Apply different authentication factors that range across different security levels for your entire organization in order to protect against unauthorized access, all while providing user flexibility..
Policy-based MFA enforcement
Set user/application policies in order to implement additional authentication factors for sensitive applications or individual users and give access only to those who need it.
Prevent unauthorized access
Define failed MFA challenges and protect your company from unauthorized access.
Context based denials
Restrict access to certain applications based on contextual data. From high-risk locations, to certain IP-addresses, you can input many different factors that can restrict access to any user.
Secure Cloud Directory
When dealing with a large number of employees, security and privacy can get out of hand easily.
With Teamstack’s Cloud Directory, it is easy to manage anything from users and groups to permission levels and authentication methods.
The web interface also allows you to secure store users and passwords.
Real-Time Synchronization
Don’t worry about missing out on anything!
TeamStack makes sure that your data is synchronized in real time, keeping you on top of all your applications.
Moreover, this amazing feature makes the onboarding process a piece of cake and it protects you against any users looking to bamboozle you.
Customizable User and Group Profiles
Call Teamstack your right hand man, because this feature makes your life a whole lot easier.
All user and group profiles are highly customizable, allowing you to set specific policies and settings.
This will ensure you have total control over your company and each team in particular.
User Lifecycle Management
When working with a large number of tools and colleagues, it’s important to keep up with lifecycle management.
With Teamstack, you can easily gain an overview and manage all the different stages (Active, Suspended, Invited and Archived) of the user lifecycle.
One-click provisioning
One-click provisioning allows you to add and remove people from certain tool integrations.
Why is this helpful? Take a look below:
Increased security
Instead of going through a huge process of adding and deleting accounts, it’s as simple as 1 single click. This ensures that anyone that might want to do harm can be taken care of quickly.
Streamlined onboarding and offboarding
We all know how much of a headache can be. Going through and adding a user to every single tool you use is exhausting, to say the least.
At least it was until now.
Teamstack’s one-click provisioning makes the onboarding and offboarding process literally as easy as a click.
Group-based provisions
Have an entire group of people that need/no longer need to use a tool? No worries. Add and remove entire groups of people with automated group-based application provisioning.
Reduce IT complexity
Thanks to one-click provisioning, the complexity of application management is greatly reduced. Now, all of your provisioning is done from a single source.
Integrations
As mentioned before, Teamstack supports over 500 applications which greatly simplifies anyone’s work. Essentially, the list of integrations is massive, and it grows constantly.
Any tool you can think of is most likely on that list.
Pricing
Now for the question that’s on everyone’s mind: How much is it?
Well, you might be thinking that a tool as useful as this would cost a boat-load. But the truth is, it’s actually surprisingly cheap.
As you can see, the plans are quite affordable.
They have a free plan to give it a try, and for first time users, the basic plan is free for the first six months.
Even for the professional plan, only 4€ per person per month is an incredible deal.
To top it all off, they also offer custom plans that can scale to anyone. TeamStack truly is a life-saver.
Conclusion
For anyone in any industry, online tools have quickly become unavoidable. As time goes on, the list of tools you use will most likely grow.
That means that anyone you add to your team will bring a list of tools with them, too. It can get complicated to say the least.
From all this info, it’s clear to see that Teamstack is an essential tool on anyone’s toolbelt.
Not only are you getting an incredibly powerful tool, but it costs pennies compared to other tools out there. So check it out and let them know that we sent you.
Experts have predicted for the market of Digital Therapeutics (DTx) to reach $7.8 in value by 2025, with video gaming to be the industry’s largest driver. DTx can provide many benefits, offering new healthcare options for patients with unfit needs, and may even help reduce their dependence on prescription medicine.
By using software-powered algorithms, DTx combines surgical tools and digital software to alleviate symptoms of ADHD, Autism, Multiple Sclerosis (MS), anxiety and major depression, Opioid and Substance Use Disorder, Essential Tremors, and Parkinson’s Disease. In the future, DTx will be powerful enough to help patients with Lupus, ICU delirium, and traumatic brain injuries.
While the new technology is powerful and provides new medicinal insights, remember that it’s always important to consult with your doctor before using – or changing – your medication. Here’s how DTx works.
As previously mentioned, video games may help to play patient build key skills to shape their working memory, executive functioning, and selective functioning. I’ll explain further. Your working memory is what gives you the ability to recall information, such as a to-do list. You use your executive functioning skills to manage your emotions, pay attention, and plan. Lastly, your selective attention skills give you the reach to process, filter, and respond to competing stimuli.
When combined, such as in the Akili Interactive’s Selective Stimulus Management Engine (SSME), medicinal gameplay can go on to help patients with their symptoms of Autism, ADHD, major depression, and MS. SSME gameplay was specifically designed to get the player in touch with their key skills (working memory, executive functioning, and selective attention). The engine was also built on adaptive algorithms that adjust to each player’s individual skillset. As the player advances through the game, their sensory and motor stimuli are deployed. Doing so targets and activates key areas of the brain, building new neurological links as they continue practising the game.
On the other hand, gaming with biofeedback operators completely differently.
Specifically designed to treat anxiety, depression, ADHD, and Autism, gaming with biofeedback can measure a wide range of the patient’s vitals. For example, biofeedback gaming systems are built with heart rate monitors, respirometers, temperature gauges, skin conductance level monitors, galvanic skin responders, and eye trackers. This form of gameplay adapts to the player’s state of mind and requires mindful responses from the patient to continue advancing through the game’s map.
For example, in the instance the patient becomes more anxious through gameplay, Mighteor technology requires the patient to independently relax before continuing with the game. On the other hand, Quotient technology slows gameplay as the patient’s attention wanders. This requires the patient to practice selective focus so that their gameplay can return back to normal speed.
However, this isn’t all. Developers are working on new gaming engines, such as the Spatial Navigation Engine (SNAV) and Affective Engine (AAFF) to help patients with Lupus, ICU delirium, and traumatic brain injuries.
The future of Digital Therapeutics will also include cutting-edge therapies to provide digital, cognitive-behavioural counselling to complement outpatient treatment. In 2018, Pear Therapeutics launched the first 2 virtual rehabilitation platforms to gain FDA approval. Their reSET platform helps patients overcome Substance Use Disorder, and the reSET-0 platform helps with Opioid Use Disorder (OUD).
In 2019, VRHealth, an Israeli startup, began diving into virtual reality to treat pain management – another way gaming is used as medicine. VRHealth found that Immersive Virtual Reality experiences distract patients from their pain. When combined with physical therapy, the patient can find the root of their underlying issues.
More interestingly, Digital Therapeutics also has a market for eye tracking, voice markers, and neurologic music therapy. Eye-tracking can help patients streamline Autism diagnosis and symptom levels; voice markers may help track Alzheimer’s, depression, schizophrenia, and Parkinson’s disease; and neurologic music therapy can improve the patient’s motor, speech, and cognitive function after receiving a disease or injury.
Overall, video games as medicine can help patients practice essential skills from attention and memory to relaxation, all while having fun. Still, these aren’t the only benefits Digital Therapeutics provide. Read more below for the full scoop on software-powered medicine.
There are a lot of negative emotions swirling around right now: fear; stress; frustration; anxiety; depression. And what’s worse is that it feels like there’s no escape from them.
We don’t know how long the coronavirus crisis is going to last, so we can’t allow these negative emotions to overwhelm us day in and day out. It’s not sustainable. What’s more, there’s a direct correlation between negativity and productivity. So, when you’re feeling bad about something, you’re more likely to lose focus. And when you give in to distractions and allow yourself to procrastinate, you feel guilty about not doing the things you said you would do. It’s a vicious cycle.
Here’s what I’m going to suggest: We’ve had some time to adjust to the new “normal”. We might not know everything about the virus, but we at least know what we’re in for for the foreseeable future. So, let’s try and take back some control over our own personal worlds and stay positive as best we can.
Let’s look at some ways to bring some positive energy into our lives and our businesses during this crisis:
1. Limit Your Exposure to Social Media and News Apps
Right now, coronavirus is all anyone is talking about. There’s no way to stop the news cycle or to clear up our social media feeds until we get through the crisis. But that doesn’t mean you need to be fully entrenched in coronavirus talk — especially when you’re trying to focus on your work and stay positive.
I don’t know how many of you do this normally, but focus apps are great for this. Which ones you use depends on where your weightiest distractions come from.
For instance, I use Boomerang to silence my Gmail inbox during the day.
Not only does this silence work emails when I need to focus, but it keeps coronavirus news alerts and marketing messages from getting in the way.
While there are some great distraction-blocking apps for iOS, Android, and Windows devices (Freedom is probably the best out there), you have to pay for them. So, what I do to keep costs down is use my devices’ distraction-free modes to block access to social media.
2. Connect with Other Freelancers
As freelancers, most of us don’t have a workplace of colleagues we interact with on a regular basis. But that doesn’t mean we don’t need to connect with our peers — especially now when things in our businesses might not be as predictable and stable as we’ve become accustomed to.
Let’s look at an example of when this might come in handy:
I’ve seen too many messages on Facebook from freelancers asking what to do if a client wants to cut their rates or a prospect suggests paying practically nothing for a whole lot of work.
The justification is always that these are uncertain times and they need to cut back. But what they’re really doing is devaluing the work that freelancers do. And if freelancers set the precedent now that they’ll build a website for a couple hundred dollars, it’s going to be hard justifying raising rates again when things return to normal.
So, having a community of designers and other creatives to turn to right now is critical. Not only does it give you a place to work through these kinds of unique circumstances in your business and get the support you need, but it gives you a safe space to vent about what’s going on.
Facebook Groups are a good place to find these communities. You can also look for local Meetups that bring together creatives (virtually) on a weekly or monthly basis.
3. Spend Quality Time with Friends and Family
For many of us who worked from home before the coronavirus, isolation is nothing new. That said, the coronavirus has thrown a wrench in the works for all of us, regardless of our living situation:
If you live and work alone, for example, self-isolation is normal. However, you no longer have the ability to break out of your home after work or on the weekends and this is something that many freelancers need to bring a much-needed balance to their lives.
So, what do you do?
If you’re feeling more isolated than usual, reach out to those closest to you and do some Facetiming. Even a few minutes a day can help break the monotony and loneliness of being alone 24/7 and give you the positive lift you need.
If you live with a roommate, partner, or your family, on the other hand, your home is now inundated with “noise” that wasn’t there before. Whereas before your loved ones served as a break from work, you’re all now working and studying and living on top of each other. If you need a break from anything, it’s probably them.
So, what do you do?
If you feel overwhelmed and stressed by the full house, it might be a good idea to set a strict schedule, rules, and boundaries.
It might require you to cut back on how many hours you work, but you can at least be more productive when you have a dedicated time and space to work. In turn, you can emerge from your workspace and go back to enjoying the time you have with your housemates and loved ones.
4. Keep Working Even If You’re Not “Working”
If your work has been compromised by the coronavirus, it’s a good idea to keep busy.
I’m not telling you to go out there and hustle and start a new business venture. Instead, fill your daily schedule with activities that make you feel hopeful and get you excited about your business. Even if you move the needle just a little bit, the progress you make now is going to feel great.
Think about how hard it is to find time to do work on your business normally. Wouldn’t it feel good to throw a little love its way while you have the time? You could:
Redesign your website;
Refresh your portfolio;
Improve your social media presence;
Grow your LinkedIn professional network;
Tighten up your processes and automate what you can.
Even if clients have hit the “Pause” button on projects or it’s just that revenue is coming in more slowly than usual, keep your business moving in a positive direction. It’ll give you something to look forward to once things return to normal and you can go full speed ahead again.
5. Make Time for Something Fun Every Day
When you’re stuck in one place and told not to do the things you’d normally do or see the people you’d normally see or visit the places you’d normally go, it sucks. It’s easy to feel like fun, in general, has been cancelled.
But there are ways to find joy and stay positive in your home despite the chaos going on outside. Here are some things I’ve seen others do that might inspire your own daily dose of fun:
Host a virtual bingeathon and sync up with your friends so you all watch the show at the same time. (Tiger King, anyone?)
Load up your Instagram feed with a bunch of feel-good accounts (for when you make time to look at your social during the day). For me, puppies, food, and beautiful travel destinations keep me happy.
Music is a known mood lifter and focus booster. If you find yourself getting distracted by your surroundings or caught up by coronavirus-related news, turn on music that gets you moving — emotionally and physically.
Getting some fresh air is another way to clear your mind and reset your mood. Just make sure to adhere to distancing guidelines and stay-at-home orders when you do.
Wrap-Up
I know it’s not easy to stay positive right now, but you’re not just fighting to make it through this crisis in good health and in one piece. You have to think about how your mood is affecting your business. You can’t do much about the coronavirus’s impact on the economy (except to more closely manage your finances), but you can make choices now that put you in the best position to weather the storm and be ready to hit the ground running once the chaos clears.