If a website is unusable, the content is inaccessible to the user. So usability is something every website needs in some form. There are certain usability rules that one should know, even if it is only to break them. But rather than checking off as many usability guidelines as possible, it could be more useful to ask: For whom and for what purposes should the website be usable?
Usability is defined by effectiveness, efficiency, and satisfaction. But what is the relationship between these aspects? Sometimes it can be more efficient for the sake of raising the user’s interest, to make a website more complicated. Opaque navigation can make the user spend more time on the site. A website doesn’t have to be easy to use if using it creates positive emotions.
How much can we ask of the user? And what do they ask of us? Creating unusable websites can be a compromise or an exploration of the relationship between user and designer. It can be a concession that websites are never finished, that errors and bugs are always part of it. Why not embrace potential failure and choose experimentation over usability?
At the same time, making a website “harder to use” affects different users to a different degree. Issues of accessibility, digital literacy, and inclusiveness have to be considered. Not everything has to be for everyone. But it should be an active decision, whether or not a user gets lost on a website, for whom the site is accessible and if we want to fix or feed the bugs.
The course aims to redefine usability by creating a digital glossary. This will consist of small web experiments exploring different terms, which we will design and code individually or in groups. The course consists of an introduction to basic HTML, CSS, and JS, different inputs, coding sessions, and consultations. No prior coding experience is needed and students with no coding experience are especially encouraged to participate. Different entry points for different experience levels will be provided.
Create at least one entry for the (un)usability glossary.
A glossary entry consists of a term and its definition in the format of a website. Choose a term from the glossary list or pick your own word. There can be more than one entry for each term. Each entry is its own website, which will be linked from the glossary page.
An entry defines a term, by means of a text or an interaction concept. You can also question a usability term by doing the opposite of what the guideline suggests. Thus, each entry can be a reflection on the term but also your attitude towards it.
You decide how usable or unusable your website is. There’s room for errors, bugs and unfinished code.
Create at least one entry, but as many as you like. You can use one of the starter kits for different suggested words. Or you can start with a blank HTML boilerplate. Look for something in this assignment that is useful to you.
6 Fridays, from 10:00–15:00, as well as optional coding consultations from 15:30–17:30. The course takes place in presence, if possible.
08.04. | 22.04. | 29.04. | 06.05. | 20.05. | 27.05. | |
---|---|---|---|---|---|---|
10:00–12:00 | Introduction | Input: Form Follows Function → CSS |
Input: The User → CSS / JS |
Input: Redefining Usability → JS |
Input: Accessibility | Collective Coding |
13:00–15:00 | Input: Useful Basics → HTML, CSS |
Collective Coding |
Collective Coding |
Collective Coding |
Collective Coding |
Conclusion / Presentation |
15:30–17:30 | Coding Consultations [optional] | Coding Consultations [optional] | Coding Consultations [optional] | Coding Consultations [optional] | Coding Consultations [optional] | Coding Consultations [optional] |
Welcome! Check out the course schedule, the about text and the assignment to get started.
<tag> content </tag>
<a href="http://link.com" target="_blank"> This is the hyperspace. </a>
div {
color: red;
}
<div id="subtitle" class="text"> Some content inside. </div>
* {
borders: 1px solid black;
}
div {
background-color: red;
}
@media screen and (max-width: 800px) {
.element {
font-size: 18px;
}
}
when the browser is between 600px and 1200px wide (desktop):
@media screen and (min-width: 600px) and (max-width: 1200px){
.element {
font-size: 25px;
}
}
when the browser doesn’t support hove (mobile):
@media (hover: none){
.element:hover {
color: inherit;
}
}
:root {
--gapS: 5px;
--gapM: 10px;
--gapL: 20px;
--highlightColor: #0000FF;
}
.element{
color: var(--highlightColor);
margin: var(--gapS);
}
.element {
display: block;
}
.hidden {
display: none;
}
see also [Reference: Display & Visibility]
.element {
transform: translate(50%, 50%);
}
.element {
transform: translate(50%, 50%) rotateX(-12deg);
}
.element {
width: 200px;
transition: width 0.3s ease;
}
.element:hover {
width: 500px;
}
.element {
width: 200px;
color: red;
transition: width 0.3s, color 0.5s;
}
.element:hover {
width: 500px;
color: blue;
}
see also [Reference: CSS animations]
console.log('hi');
const message = 'hello';
console.log(message);
let counter = 1;
console.log(counter);
counter = counter + 1;
console.log(counter);
old JS: var
var message = 'hello';
console.log(message);
var counter = 1;
console.log(counter);
counter = counter + 1;
console.log(counter);
const number = 1;
const string = '1';
const boolean = false;
other data types in JS are e.g. undefined, null or objects
const logo = document.getElementById('logo');
const text = document.getElementsByClassName('text')[0];
const logo = document.getElementById('logo');
logo.style.backgroundColor = 'blue';
add / remove / toggle classes in JS:
const logo = document.getElementById('logo');
logo.classList.add('hidden');
change css-variable:
let root = document.documentElement;
root.style.setProperty('--highlightColor', 'red');
setTimeout(function(){
console.log('Finally here!');
}, 500);
const heading = document.getElementById('heading');
heading.innerHTML = 'New Heading';
const logo = document.getElementById('logo');
logo.addEventListener('click', function(){
console.log('the user clicked on the logo');
})
in HTML / JS:
<button onclick="myFunction()"> Click me! </button>
const circle = document.getElementById('circle');
document.body.addEventListener('mousemove', function(e){
const mouseX = e.clientX;
const mouseY = e.clientY;
console.log(mouseX, mouseY);
circle.style.top = mouseX + 'px';
circle.style.left = mouseY + 'px';
})
touchmove (mobile):
const circle = document.getElementById('circle');
document.body.addEventListener('touchmove', function(e){
const touch = e.touches[0];
const touchX = touch.clientX;
const touchY = touch.clientY;
console.log(touchX, touchY);
circle.style.top = touchX + 'px';
circle.style.left = touchY + 'px';
})
link mouse position to css-variable
const root = document.documentElement;
document.body.addEventListener("mousemove", e => {
root.style.setProperty('--mouse-x', e.clientX + 'px');
root.style.setProperty('--mouse-y', e.clientY + 'px');
});
function logHello() {
console.log('Hello World!');
}
logHello();
function with parameters:
function logSomething(params) {
console.log(params);
}
logSomething('Ciao World!');
const number = 5;
if(number < 5){
console.log('smaller than five');
} if else (number === 5) {
console.log('equals five');
} else {
console.log('higher than five or undefined');
}
[Reference: Comparison & Logical Operators]
const fruits = ['banana', 'apple', 'pear'];
console.log(fruits[0]);
const textElements = document.getElementsByClassName('text');
console.log(textElements[0]);
for (i = 0; i < 10; i++) {
// do something
}
const fruits = ['banana', 'apple', 'pear'];
for (i = 0; i < fruits.length; i++) {
const fruit = fruits[i];
console.log(i);
console.log(fruit);
}
const fruits = ['banana', 'apple', 'pear'];
for (const fruit of fruits) {
console.log(fruit);
}
const person = {
firstName: "Jane",
lastName: "Doe",
age: 25,
eyeColor: "brown"
};
console.log(person.firstName);
<link rel="stylesheet" href="css/style.css" </>
<link rel="stylesheet" href="./css/style.css" </>
from where the document is, go into the css folder
<link rel="stylesheet" href="../css/style.css" </>
from where the document is, go one folder back and go into the css folder
<link rel="stylesheet" href="/css/style.css" </>
from the root folder, go into the css folder