104
Designing the Conversation Aaron Gustafson @AaronGustafson slideshare.net/AaronGustafson

Designing the Conversation [SmashingConf 2016]

Embed Size (px)

Citation preview

Page 1: Designing the Conversation [SmashingConf 2016]

Designing the Conversation

Aaron Gustafson @AaronGustafson

slideshare.net/AaronGustafson

Page 2: Designing the Conversation [SmashingConf 2016]

IPowerful Phrases

Page 3: Designing the Conversation [SmashingConf 2016]

I’m$<em>really</em>$happy$to$see$you.

Emphasis

Page 4: Designing the Conversation [SmashingConf 2016]

Please$fill$out$the$form$below$to$contact$us.$

<strong>All$fields$are$required.</strong>

Strong Importance

Page 5: Designing the Conversation [SmashingConf 2016]

I’m really happy to see you.

Please fill out the form below to contact us. All fields are required.

Page 6: Designing the Conversation [SmashingConf 2016]

It's$a$terrible$movie$and$it$made$$200$million.$

<i>Go$figure!</i>$

She$is$admired$for$her$energy$and$<i$lang="fr">joie$de$

vivre</i>.

Alternate Voice or Mood

Page 7: Designing the Conversation [SmashingConf 2016]

For$12$years$and$running,$over$100,000$companies$have$adopted$

the$<b>Basecamp</b>$way$of$working.$Not$just$tried,$but$signed$

up,$said$“ahQha!”,$and$never$looked$back.$There’s$nothing$else$

like$<b>Basecamp</b>.

Stylistically Offset

Page 8: Designing the Conversation [SmashingConf 2016]

I$wrote$the$book$<cite>Adaptive$Web$Design</cite>.$If$you$like$

this$talk,$you’ll$find$inQdepth$information$about$semantics$(and$

a$whole$lot$more)$in$there.

Published Works

Page 9: Designing the Conversation [SmashingConf 2016]

A$ramp$embedded$in$staircase$of$Robson$Square$in$Vancouver,$

<abbr$ariaQlabel="British$Columbia">BC</abbr>.

Abbreviations & Acronyms

Page 10: Designing the Conversation [SmashingConf 2016]

Press$<kbd>Tab</kbd>$to$move$from$link$to$link$within$a$

document.$

The$<code>kbd</code>$element$is$used$to$indicate$keyboard$key$

names.

Keyboard & Code

Page 11: Designing the Conversation [SmashingConf 2016]

There$is$<span>nothing$particularly$interesting</span>$in$this$

sentence.

Generic Phrasing

Page 12: Designing the Conversation [SmashingConf 2016]

IIMindful Links

Page 13: Designing the Conversation [SmashingConf 2016]

A$ramp$embedded$in$staircase$of$<a$href="https://

en.wikipedia.org/wiki/Robson_Square">Robson$Square</a>$in$

Vancouver,$<abbr$ariaQlabel="British$Columbia">BC</abbr>.

Connecting Content

Page 14: Designing the Conversation [SmashingConf 2016]

<a$href="…"><b$class="hidden">You$can$</b>finish$reading<b$

class="hidden">$<cite>The$Web$Should$Just$Work$for$Everyone</

cite>$in$less$than$10$minutes</b></a>

Connecting Content

Page 15: Designing the Conversation [SmashingConf 2016]

To$illustrate$the$concept$of$layering$styles,$perhaps$it’s$best$

to$start$at$the$beginning:$with$no$style$applied. <a$href="#figureQ3Q3">Figure$3.3</a>$shows$the$lodging$article$

in$Safari$with$only$the$default$browser$styles$applied.$

…$

<figure$id="figureQ3Q3">$

$$…$

</figure>

Connecting Content

Page 16: Designing the Conversation [SmashingConf 2016]

<a$rel="bookmark"$href="…"><b$class="hidden">You$can$</b>finish$

reading<b$class="hidden">$<cite>The$Web$Should$Just$Work$for$

Everyone</cite>$in$less$than$10$minutes</b></a>

Creating Context

Page 17: Designing the Conversation [SmashingConf 2016]

<a$href="…"$hreflang="es"><b$class="hidden">Lea$esta$página$en$

$$</b>Español</a>

Creating Context

Page 18: Designing the Conversation [SmashingConf 2016]

<a$href="giant.mp4"$type="video/mp4">Download$this$movie</a>

Creating Context

Page 19: Designing the Conversation [SmashingConf 2016]

<a$href="giant.mp4"$type="video/mp4"$download>Download$this$$movie</a>

Triggering Actions

Page 20: Designing the Conversation [SmashingConf 2016]

<a$href="mailto:[email protected]">Send$me$an$email</a>$

<a$href="tel:18009346489">Call$Comcast$Customer$Service</a>

Connecting Tools

Page 21: Designing the Conversation [SmashingConf 2016]

IIIEffective Organization

Page 22: Designing the Conversation [SmashingConf 2016]
Page 23: Designing the Conversation [SmashingConf 2016]

<h1>This$is$the$title$of$the$page</h1>$

…$

<h2>This$titles$a$section</h2>$

…$

<h3>This$titles$a$subsection</h3>$

…$

etc.

Headings

Page 24: Designing the Conversation [SmashingConf 2016]

<p>This$twist$is$what$<a$href="https://en.wikipedia.org/wiki/

John_Harsanyi">John$Harsanyi</a>—an$early$game$theorist—refers$

to$as$the$<a$href="https://en.wikipedia.org/wiki/

Veil_of_ignorance">“Veil$of$Ignorance”</a>$and$what$Rawls$found,$

time$and$time$again,$was$that$individuals$participating$in$the$

experiment$would$gravitate$toward$creating$the$most$egalitarian$

societies.</p>

Moving Focus

Page 25: Designing the Conversation [SmashingConf 2016]

<p$tabindex="0">Please$fill$out$the$form$below$completely.$

<strong>All$fields$are$required.</strong></p>

Moving Focus

Page 26: Designing the Conversation [SmashingConf 2016]

AccessibleRich Internet Applications

Page 27: Designing the Conversation [SmashingConf 2016]

<div$id="nav"$role="navigation">$

$$<ul>$

$$$$<li>$

$$$$$$<a$href="/about/"><b$class="hidden">A$Bit$</b>About<b$

class="hidden">$Me</b></a>$

$$$$</li>$

$ $ $ …$

$$</ul>$

</div>

Navigation Region

Page 28: Designing the Conversation [SmashingConf 2016]

๏banner ๏navigation ๏search ๏main ๏complementary ๏contentinfo

ARIA Landmark Roles

Page 29: Designing the Conversation [SmashingConf 2016]
Page 30: Designing the Conversation [SmashingConf 2016]

<header$class="banner"$role="banner"$id="top">$$<h1$class="banner_logo"><a$href="/"$rel="home"> $$$$24$ways$<span>to$impress$your$friends</span></a></h1>$

</header>

Page 31: Designing the Conversation [SmashingConf 2016]

<main$role="main">$

$$…$

</main>

Page 32: Designing the Conversation [SmashingConf 2016]

<nav$class="navigation"$role="navigation"$id="menu">$$<h1$class="hidden">Browse$24$ways</h1>$$<ul$class="nav$navQtopics">$

$$$$<li$class="nav_item"><a$href="/topics/business/" $$$$$$dataQicon="&#x2655;">Business</a></li>$

$$$$…$

$$</ul>$$…$

</nav>

Page 33: Designing the Conversation [SmashingConf 2016]

<footer$class="contentinfo"$role="contentinfo">$

$$<p$class="contentinfo_copyright">$

$$$$<small>&#169;$2005Q2016$24$ways$and$our$authors. $$$$<a$href="/about/#colophon">Colophon</a></small>$

$$</p>$

$$<p$class="contentinfo_social">$

$$$$<a$href="http://feeds.feedburner.com/24ways" $$$$$$rel="alternate">Grab$our$RSS$feed</a>$

$$$$<a$href="https://twitter.com/24ways"$rel="me">Follow$us $$$$$$on$Twitter</a>$

$$$$<a$href="/newsletter">Subscribe$to$our$newsletter</a>$

$$</p>$

</footer>

Page 34: Designing the Conversation [SmashingConf 2016]

๏banner - first header element not inside a sectioning element ๏navigation - nav ๏search ๏main - main ๏complementary - aside ๏contentinfo - first footer element not inside a sectioning element

HTML Landmarks

Page 35: Designing the Conversation [SmashingConf 2016]

<div>$

$$This$is$simply$a$generic$division$of$content.$

</div>

Page 36: Designing the Conversation [SmashingConf 2016]

๏p - a paragraph ๏ol - a list of items whose order matters ๏ul - an list of items whose order doesn’t matter ๏li - an item in a list ๏dl - a list of terms and their associated definitions ๏dt - terms to be defined within a definition list ๏dd - descriptions of terms in a definition list ๏figure - referenced content (images, tables, etc.) ๏figcaption - caption for a figure

Alterna-divs

Page 37: Designing the Conversation [SmashingConf 2016]

๏article - a piece of content that can stand on its own ๏section - a section of a document or article ๏header - preamble content for a document, article, or section ๏footer - supplementary information for a document, article, or section ๏main - the primary content of a document ๏nav - navigational content ๏aside - complementary content

Alterna-divs

Page 38: Designing the Conversation [SmashingConf 2016]

IVFriendly Forms

Page 39: Designing the Conversation [SmashingConf 2016]
Page 40: Designing the Conversation [SmashingConf 2016]
Page 41: Designing the Conversation [SmashingConf 2016]

How does this photo make you feel?

� Embarrassing � Upsetting � Saddening � Bad Photo � Other

Page 42: Designing the Conversation [SmashingConf 2016]

How does this photo make you feel?

� Embarrassing � Upsetting � Saddening � Bad Photo � Other

Page 43: Designing the Conversation [SmashingConf 2016]

How does this photo make you feel?

� Embarrassing � Upsetting � Saddening � Bad Photo ◉ Other it’s embarrassing

Page 44: Designing the Conversation [SmashingConf 2016]

Please describe the photo

� It’s embarrassing � It’s a bad photo of me � It makes me sad

Page 45: Designing the Conversation [SmashingConf 2016]

Talk to your users like they talk

to one another

Page 46: Designing the Conversation [SmashingConf 2016]

Make it clear users need to respond

Page 47: Designing the Conversation [SmashingConf 2016]

“What’s your first name?”

Page 48: Designing the Conversation [SmashingConf 2016]

“Without your first name, I won’t know how to address you.

Could you please provide it?”

Page 49: Designing the Conversation [SmashingConf 2016]

“Reserve your spot”

Page 50: Designing the Conversation [SmashingConf 2016]

What’s$your$first$name?$

<input$name="first_name">

Page 51: Designing the Conversation [SmashingConf 2016]

<label>What’s$your$first$name?</label>$

<input$name="first_name">

Page 52: Designing the Conversation [SmashingConf 2016]

<label$for="first_name">What’s$your$first$name?</label>$

<input$id="first_name"$name="first_name">

Page 53: Designing the Conversation [SmashingConf 2016]

<label>$

$$What’s$your$first$name?$

$$<input$name="first_name">$

</label>

Page 54: Designing the Conversation [SmashingConf 2016]

<label$for="first_name">$

$$What’s$your$first$name?$

$$<input$id="first_name"$name="first_name">$

</label>

Page 55: Designing the Conversation [SmashingConf 2016]

<label$for="first_name">What’s$your$first$name?</label>$

<input$id="first_name"$name="first_name">

Page 56: Designing the Conversation [SmashingConf 2016]

Use the rightfield type

Page 57: Designing the Conversation [SmashingConf 2016]

<label$for="first_name">What’s$Your$First$Name?</label>$

<input$type="text"$id="first_name"$name="first_name">

Free Response

Page 58: Designing the Conversation [SmashingConf 2016]

<label$for="email">What’s$Your$Business$Email$Address?</label>$

<input$type="email"$id="email"$name="email">

Free Response: Email

Appearance Native Validation

Text Field Maybe

Page 59: Designing the Conversation [SmashingConf 2016]

Browsers ignore what they don’t

understand

Page 60: Designing the Conversation [SmashingConf 2016]

Progressive Enhancement

Page 61: Designing the Conversation [SmashingConf 2016]

<label$for="url">What’s$Your$Website’s$URL?</label>$

<input$type="url"$id="url"$name="url">

Free Response: URL

Appearance Native Validation

Text Field Maybe

Page 62: Designing the Conversation [SmashingConf 2016]

Please describe the photo

� It’s embarrassing � It’s a bad photo of me � It makes me sad

Choose One

Page 63: Designing the Conversation [SmashingConf 2016]

Please$describe$the$photo$

<label>$

$$<input$type="radio"$name="reason"$value="embarrassing">$

$$It’s$embarrassing$

</label>$

<label>$

$$<input$type="radio"$name="reason"$value="bad$photo">$

$$It’s$a$bad$photo$of$me$

</label>$

<label>$

$$<input$type="radio"$name="reason"$value="saddening">$

$$It$makes$me$sad$

</label>

Choose One

Page 64: Designing the Conversation [SmashingConf 2016]

<label$for="reason">Please$describe$the$photo</label>$

<select$id="reason"$name="reason">$

$$<option$value="embarrassing">It’s$embarrassing</option>$

$$<option$value="bad$photo">It’s$a$bad$photo$of$me</option>$

$$<option$value="saddening">It$makes$me$sad</option>$

</select>

Choose One

Page 65: Designing the Conversation [SmashingConf 2016]

<label$for="volume">How$Loud$is$Spinal$Tap?</label>$

<input$type="range"$id="volume"$name="volume"$

$ $ $ $$$min="0"$max="11"$step="1"$

$ $ $ $$$>

Choose One: Number

Appearance Native Validation

Slider (Maybe) Maybe

Page 66: Designing the Conversation [SmashingConf 2016]

Don’t introduce unnecessary complexity

Page 67: Designing the Conversation [SmashingConf 2016]

Phone Number:

Page 68: Designing the Conversation [SmashingConf 2016]

<label$for="tel">What’s$Your$Business$Phone$Number?</label>$

<input$type="tel"$id="tel"$name="business_phone">

Free Response: Telephone

Appearance Native Validation

Text Field No

Page 69: Designing the Conversation [SmashingConf 2016]

We should work harderso our users don’t have to

Page 70: Designing the Conversation [SmashingConf 2016]

๏input[type=date]$

๏input[type=datetime] (global) ๏input[type=datetimeQlocal] (local) ๏input[type=month] (year & month) ๏input[type=week] (year & week) ๏input[type=time] (year & week)

Structured Data: Dates & Times

Page 71: Designing the Conversation [SmashingConf 2016]

Help users avoid (and fix)

errors

Page 72: Designing the Conversation [SmashingConf 2016]

Enable common information to be

auto-filled

Page 73: Designing the Conversation [SmashingConf 2016]

<label$for="name">What’s$Your$Name?</label>$

<input$id="name"$name="name"$required$ariaQrequired="true">

Keys for Auto-filling

Page 74: Designing the Conversation [SmashingConf 2016]

<label$for="ssn">What’s$Your$Social$Security$Number?</label>$

<input$id="ssn"$name="ssn"$required$ariaQrequired="true"$

$$$$$$$autocomplete="off"$

$$$$$$$>

Don’t Store All Values

Page 75: Designing the Conversation [SmashingConf 2016]

๏ name ๏ honorific-prefix ๏ given-name ๏ additional-name ๏ family-name ๏ honorific-suffix ๏ nickname ๏ username ๏ new-password ๏ current-password ๏ organization-title ๏ organization ๏ street-address ๏ address-line1 ๏ address-line2 ๏ address-line3 ๏ address-level4 ๏ address-level3

๏ address-level2 ๏ address-level1 ๏ country ๏ country-name ๏ postal-code ๏ cc-name ๏ cc-given-name ๏ cc-additional-name ๏ cc-family-name ๏ cc-number ๏ cc-exp ๏ cc-exp-month ๏ cc-exp-year ๏ cc-csc ๏ cc-type ๏ transaction-currency ๏ transaction-amount ๏ language

๏ bday ๏ bday-day ๏ bday-month ๏ bday-year ๏ sex ๏ url ๏ photo ๏ tel ๏ tel-country-code ๏ tel-national ๏ tel-area-code ๏ tel-local ๏ tel-local-prefix ๏ tel-local-suffix ๏ tel-extension ๏ email ๏ impp

Autofill Tokens

Page 76: Designing the Conversation [SmashingConf 2016]

๏For Addresses: ‣ shipping ‣ billing

๏For Telephone Numbers: ‣ home ‣ work ‣ mobile ‣ fax ‣ pager

๏Universally: ‣ section-*

Autofill Token Modifiers

Page 77: Designing the Conversation [SmashingConf 2016]

<fieldset>$

$$<legend$tabindex="0">Ship$the$blue$gift$to…</legend>$

$$<p>$

$$$$<label$for="bQstreetQaddress">Address</label>$

$$$$<input$name="ba"$id="bQstreetQaddress"$

$$$$$$$$$$$autocomplete="sectionQblue$shipping$streetQaddress">$$</p>$

$$<p>$

$$$$<label$for="bQcity">City</label>$

$$$$<input$name="bc"$id="bQcity"$

$$$$$$$$$$$autocomplete="sectionQblue$shipping$addressQlevel2">$

$$</p>$

$$<p>$

$$$$<label$for="bQpostalQcode">Postal$Code</label>$

$$$$<input$name="bp"$id="bQpostalQcode"$

$$$$$$$$$$$autocomplete="sectionQblue$shipping$postalQcode">$

$$</p>$

</fieldset>

For Example

Page 78: Designing the Conversation [SmashingConf 2016]

[sectionQ]$(optional)$$

[shipping|billing]$(optional)$

[home|work|mobile|fax|pager]$(optional)$

[autofill$token$name]

Page 79: Designing the Conversation [SmashingConf 2016]

<label$for="shippingQmobile">Is$there$a$mobile$number$we$can$$

$$reach$you$on$regarding$delivery?</label>$

<input$type="tel"$id="shippingQmobile"$name="shippingQmobile" $$$$$$$autocomplete="sectionQred$shipping$mobile$tel">

Page 80: Designing the Conversation [SmashingConf 2016]

Let users know when a field is

required

Page 81: Designing the Conversation [SmashingConf 2016]

<p>Fields$marked$with$a$*$are$

$$<strong$id="required">required</strong>.</p>$

…$

<label$for="first_name">What’s$Your$First$Name?$

$$<b$role="presentation"$class="required">*</b>$

</label>$

<input$id="first_name"$name="first_name"$

$$$$$$$$$$required$

$$$$$$$$$$ariaQrequired="true"$

$$$$$$$$$$>

Required Fields

Page 82: Designing the Conversation [SmashingConf 2016]

<p><strong>All$of$the$fields$are$required.</strong></p>$

…$

<label$for="first_name">What’s$Your$First$Name?</label>$

<input$id="first_name"$name="first_name"$

$$$$$$$$$$required$

$$$$$$$$$$ariaQrequired="true"$

$$$$$$$$$$>

Required Fields

Page 83: Designing the Conversation [SmashingConf 2016]

<p><strong>All$of$the$fields$are$required.</strong></p>$

…$

<label$for="first_name">What’s$Your$First$Name?</label>$

<input$id="first_name"$name="first_name"$

$$$$$$$$$$required$

$$$$$$$$$$ariaQrequired="true"$

$$$$$$$$$$>

Required Fields

Page 84: Designing the Conversation [SmashingConf 2016]

Provide useful hints as to the

type of response you’re expecting

Page 85: Designing the Conversation [SmashingConf 2016]

<label$for="flight">What$flight$are$you$looking$for?</label>$

<input$id="flight"$name="flight"$

$ $ $ $pattern="DL\d{2,}"$

$ $ $ $placeholder="e.g.$DL5407"$

$ $ $ $>$

Suggesting a response

Page 86: Designing the Conversation [SmashingConf 2016]

Validatein the browser

Page 87: Designing the Conversation [SmashingConf 2016]

<label$for="first_name">What’s$Your$First$Name?</label>$

<input$id="first_name"$name="first_name"$

$$$$$$$$$$required$

$$$$$$$$$$ariaQrequired="true"$

$$$$$$$$$$>

Indicate Required Fields

Page 88: Designing the Conversation [SmashingConf 2016]

<label$for="email">What’s$Your$Business$Email$Address?</label>$

<input$type="email"$id="email"$name="email">

Use Native Validation

Page 89: Designing the Conversation [SmashingConf 2016]

<label$for="flight">What$flight$are$you$looking$for?</label>$

<input$id="flight"$name="flight"$

$ $ $ $pattern="DL\d{2,}"$

$ $ $ $placeholder="e.g.$DL5407"$

$ $ $ $>

Use Custom Validation Schema

Page 90: Designing the Conversation [SmashingConf 2016]
Page 91: Designing the Conversation [SmashingConf 2016]

<label$for="email">Your$Email$Address</label>$

<input$id="email"$type="email"$name="email"$

$$$$$$$$$required$ariaQrequired="true"$

$$$$$$$$$ariaQinvalid="true"$

$$$$$$$$$ariaQdescribedby="emailQerror"$

$$$$$$$$$>$

<strong$id="emailQerror"$class="validationQerrorQmessage">$

$$Your$email$address$is$required</strong>

Provide Inline Error Messages

Page 92: Designing the Conversation [SmashingConf 2016]

Validateon the server

Page 93: Designing the Conversation [SmashingConf 2016]

<input type=“hidden” name=“price” value=“399.99”>

Page 94: Designing the Conversation [SmashingConf 2016]

<input type=“hidden” name=“price” value=“1”>

Page 95: Designing the Conversation [SmashingConf 2016]

Never trustthe client

Page 96: Designing the Conversation [SmashingConf 2016]

Summarize server-side errors

Page 97: Designing the Conversation [SmashingConf 2016]
Page 98: Designing the Conversation [SmashingConf 2016]

<div$role="alert">$

$$<p>There$were$errors$with$your$form$submission:</p>$

$$<ol>$

$$$$<li><a$href="#message">Message</a>$is$a$required$ $$$$$$field</li>$

$$$$<li><a$href="#name">Name</a>$is$a$required$field</li>$

$$$$<li><a$href="#email">Email</a>$is$a$required$field</li>$

$$</ol>$

</div>

Page 99: Designing the Conversation [SmashingConf 2016]

<div$role="alert">$

$$<p>There$were$errors$with$your$form$submission:</p>$

$$<ol>$

$$$$<li><a$href="#message">Message</a>$is$a$required$ $$$$$$field</li>$

$$$$<li><a$href="#name">Name</a>$is$a$required$field</li>$

$$$$<li><a$href="#email">Email</a>$is$a$required$field</li>$

$$</ol>$

</div>

Page 100: Designing the Conversation [SmashingConf 2016]

<div$role="alert">$

$$<p>There$were$errors$with$your$form$submission:</p>$

$$<ol>$

$$$$<li><a$href="#message">Message</a>$is$a$required$$$$$$$field</li>$

$$$$<li><a$href="#name">Name</a>$is$a$required$field</li>$

$$$$<li><a$href="#email">Email</a>$is$a$required$field</li>$

$$</ol>$

</div>

Page 101: Designing the Conversation [SmashingConf 2016]

<div$role="alert">$

$$<p>There$were$errors$with$your$form$submission:</p>$

$$<ol>$

$$$$<li><a$href="#message">Message</a>$is$a$required$ $$$$$$field</li>$

$$$$<li><a$href="#name">Name</a>$is$a$required$field</li>$

$$$$<li><a$href="#email">Email</a>$is$a$required$field</li>$

$$</ol>$

</div>

Page 102: Designing the Conversation [SmashingConf 2016]

<div$role="alert">$

$$<p>There$were$errors$with$your$form$submission:</p>$

$$<ol>$

$$$$<li><a$href="#message">Message</a>$is$a$required$ $$$$$$field</li>$

$$$$<li><a$href="#name">Name</a>$is$a$required$field</li>$

$$$$<li><a$href="#email">Email</a>$is$a$required$field</li>$

$$</ol>$

</div>

Page 103: Designing the Conversation [SmashingConf 2016]

<label$for="email">Your$Email$Address</label>$

<input$id="email"$type="email"$name="email"$

$$$$$$$$$required$ariaQrequired="true"$

$$$$$$$$$ariaQinvalid="true"$

$$$$$$$$$ariaQdescribedby="emailQerror"$

$$$$$$$$$>$

<strong$id="emailQerror"$class="validationQerrorQmessage">$

$$Your$email$address$is$required</strong>

Provide Inline Error Messages

Page 104: Designing the Conversation [SmashingConf 2016]

Thank you! @AaronGustafson

aaron-gustafson.com slideshare.net/AaronGustafson