Date: 2025-02-26
This course is primarily focused on User Interfaces. But we will also touch on User Experience.
We have covered user interfaces since the beginning of the semester. This covers anything a user interacts with, from keyboards to touchscreens to sound or light.
User Experience is a more recent concept that User Interface. The term was coined in the 90s by Don Norman, a cognitive scientist hired by Apple and includes a broader definition to look at the entire experience of using a tool or product, not just its interface.
UI refers to the elements that a person interacts with. UX refers to what that person using the product or service takes away from their entire experience.
A UI designer is focused on the design of the tool. A UX designer is focused on the user’s experience of that tool.
Usability honeycomb, by Peter Moreville
This usability honeycomb is meant to point to the effective elements that contribute to good user experiences.
In this workshop demo I’ll show an example of building a single page website info page with an eye toward a good UX experience.
We’ll build a demo information site for a new project or company. It will feature text and icons and a way for someone interested to get in touch with us.
We’ll start by creating a basic webpage on Glitch.com
We’re going to do some information design and break down our content into logical sections. These sections are what I’m building, but you could have a different amount of sections, or different categories than mine here.
section.
<body>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</body
Now I’m going to give them each I.D.’s so I can assign them unique CSS if I’d like to.
<body>
<div id="header">1</div>
<div id="about">2</div>
<div id="values">3</div>
<div id="mission">4</div>
<div id="contact">5</div>
</body
`
s in the body, I could invent a class, and set each div to have that class as well.
for example:
...<div id="header" class="section">1</div>
<div id="about" class="section">2</div>
...
, I can use a special css indicator that says select all div that are children of the body.
It looks ilke this:
body > div {
width: 100%;
min-height: 30vh; }
Recall that vh stands for viewport units. I specified a minimum height instead of just a height. This will allow the page to scale to different screen sizes.
To help me debug, I’ll add a border property so I can properly see the edges of alls normally-invisible css box model.
border: solid 1px blue;
We haven’t yet put content in these blocks, but let’s get ready for it by adding CSS to center the content in each div horizontally and vertically. We’ll do this with flexbox.
We will set each section to be its own flexbox by adding in
display: flex;
We’ll justify-content to the center.
We’ll align-items to the center as well.
body > div {
width: 100%;
min-height: 30vh;
border: solid 1px blue;
display: flex;
justify-content: center;
align-items: center; }
Now we can go in and differentiate our sections with different colors.
You can decide your own palette of colors, or visit a website, for example w3Schools color palettes or coolors.co.
For simplicity and readability, I’m going to use a 4-color pallete: 1 bright stand-out color, 2 subtle background offwhite colors, and black for most text.
I start by giving a nice standout color background for the top header, and white to the text, that will contrast nicely. I could also add some font-size styling here as well.
I also want the elements inside my header to flow top to
bottom, so I’ll add flex-direction: column;
. Remember
that we set each individual block to be its own flexbox earlier in
our CSS.
#header {
background-color: #4040a1;
color: #ffffff;
flex-direction: column; }
For readability’s sake, we will have the rest of the page’s blocks alternate with white values. The background color is white by default, so we only need to pick an offwhite color as well and assign it to the alternating blocks. We’ll create a reusable class.
.bg-grey {
background-color: #f6f6f6 }
And then we can assign it to our alternating blocks inside
their div with class="bg-grey"
.
At this point we have the 5 sections, a header with some content. The top header is a bright color. The rest are alternating between white and grey.
Now that we have these differentiated sections, let’s subdivide them further still. We’ll break each of the middle blocks (2, 3 and 4) into two sections, made up of an icon on the left, and some text on the right.
Let’s assign each of these a class section and place 2 divs inside.
Example:
<div id="about" class="section">
<div class="small-div">
small</div>
<div class="big-div">
big</div>
</div>
We’ll also set the flex-direction of each of their containers to row. Note that again we didn’t need to set its display to felxbox since we used that trick at the beginning to set all child divs of body to be flexboxs already!
You can get started with Font-awesome without having to register.
Add the font-awesome stylesheet link in thesection before your own stylesheet link.
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
Go to the icons section of font-awesome and find an icon that you’d like to use.
Copy the class code it gives you. Let’s put it in one of the small-div sections.
You’ll see the icon is wayyyyy too small. Let’s add a special
class from font-awesome. We can add the class fa-10x
to make it 10 times as large. Let’s also add a color, the same as
your header background color, to the icon on our css.
Okay, we’re starting to get somewhere, but this won’t look good
on small screens yet. We can add flex-wrap: wrap;
to
our section class so when we’re on a small screen it will bump the
next div down.
Let’s make the details look nice.
We can add some padding.
.section > div {
padding: 30px;
}
Let’s also remove the margin around the body, which is about 2pixels by default on most browsers.
body {
margin: 0;
}
At this point I add in more dummy text and icons.
I’ll remove the border red line.
And our style sucks. It’s really bad and uninviting. Let’s fix our fonts first by looking on Google fonts.
We covered how to use Google fonts in a previous class. Remember that you must link to the font’s stylesheet prior to your own stylesheet in thesection of your html page.
This is done with your own team/collaborators. Fast, find your best goals. Not as favored as independent user interviews.
Convene at least five interviewees. Ask them questions relating to the design brief. This is considered the most ideal approach to follow when it’s feasible.
Example questions: - what challenges do they face? - what do they already use to accomplish that task/activity? - show them prototypes - what do they like/dislike about this plan? - what similar programs do they like? - what would they change?
The goal is to gather research/data, then update your design brief.
Now is the time to gather people to test your design. You’ll let them interact with your prototype, by pressing, clicking, potentially “even Wizard of Oz” approaches like we learned about from David Reinfurt’s test of the prototype Metrocard screens.
Like our earlier co-designing session it’s best to observe rather than engage in a back-and-forth conversation as you do not want to influence their actions. Ask questions to find out what the user likes, dislikes, finds intuitive, confusing, and whether it meets their needs.
Based on user usability testing you’ll go back to the design and refine it. You made need to do more usability testing.
Based on this work it’s time to build the interface by translating your revised prototype into code.
Like our earlier usability testing, after you’ve built the first version of the interface in code you’ll need to test and observe its use. Based on this you will likely need to do successive layers of building, refinement and testing until you get to a final version everyone is happy with.
Based on user usability testing you’ll go back to the design and refine it. You made need to do more usability testing.
Based on this work it’s time to build the interface by translating your revised prototype into code.
Like our earlier usability testing, after you’ve built the first version of the interface in code you’ll need to test and observe its use. Based on this you will likely need to do successive layers of building, refinement and testing until you get to a final version everyone is happy with.
Read An App Can Be A Home-Cooked Meal by Robin Sloan.
Requirements: - Navigation should work! You should be able to jump to different pages based on your buttons - Your application should have at least 4 screens - One of your screens could be an “Intro screen” - see examples, and/or a help screen or settings screen. - The interface should be “mobile first” meaning that it loads and looks good on a phone-sized device