Responsive Design
Layout, UI and UX
for all your users
Progressive Web Apps
Progressive Web Apps
What is responsive design
Progressive Web Apps
Why “responsive design”?
Progressive Web Apps
Progressive Enhancement
HTML
HTML
+
CSS
HTML
+
CSS
+
Javascript
If CSS supported
If JavaScript supported
Progressive Web Apps
Sizing elements matters
Progressive Web Apps
PWA golden rule
Never make users scroll horizontally
Progressive Web Apps
Viewport meta tag
<meta name="viewport" content="width=device-width, initial-scale=1">
Progressive Web Apps
max-width
img {
max-width: 100%;
}
img.foo {
width: 300px;
}
Progressive Web Apps
Relative sizing is not the (full) solution
One relative-sized layout for all
10% | 80% | 10% |
Too big on desktop, too small on mobile
Progressive Web Apps
Enter media queries
Can use media queries to select layouts
Progressive Web Apps
Media queries example
/* elements in common for phones and tablets */
@media (max-width: 480px) {
/* layout for phones */
}
@media (max-width: 720px) {
/* layout for tablets */
}
Progressive Web Apps
Mobile-first design
Progressive Web Apps
Media Queries: Select layout by device
Progressive Web Apps
Revisiting responsive design
Progressive Web Apps
Match breakpoints to content
Progressive Web Apps
Content-based media queries
Progressive Web Apps
Mobile first media queries
/* small */
@media (min-width: 480px) {
/* medium */
}
@media (min-width: 720px) {
/* large */
}
Progressive Web Apps
You can also use JavaScript
var min = '(min-width: 25em)';
if (window.matchMedia(min).matches) {
/* include something */
}
Progressive Web Apps
...and don't forget calc()
img.thumb {
margin-right: 10px;
max-width: 400px;
width: calc((100% - 10px) / 2);
}
img.thumb: last-of-type {
margin-right: 0;
}
Progressive Web Apps
Content first
Progressive Web Apps
Manipulating content
Progressive Web Apps
Keep it as simple as possible
Help users get to content
Progressive Web Apps
Content choice
Progressive Web Apps
Layout
Progressive Web Apps
The common way...
Progressive Web Apps
Resources
Resources
Progressive Web Apps
Lab Overview
Progressive Web Apps
Extra Credit: Flexbox
Progressive Web Apps
CSS Flexbox
Progressive Web Apps
CSS Flexbox: good support
Progressive Web Apps
CSS Flexbox: centering
.container {
display: flex;
height: 300px;
}
.child {
height: 100px;
margin: auto;
width: 100px;
}
Progressive Web Apps
Layouts for different viewports: 1
.container {
display: flex;
flex-flow: row wrap;
}
.child1, .child2, .child3, .child4, .child5 {
width: 100%;
}
Progressive Web Apps
Layouts for different viewports: 2
@media (min-width: 600px) {
.child2, .child3, .child4, .child5 {
width: 50%;
}
}
Progressive Web Apps
Layouts for different viewports: 3
@media (min-width: 800px) {
.container {
margin-left: auto;
margin-right: auto;
width: 800px;
}
.child1 { width: 60%; }
.child2 { width: 40%; }
.child3, .child4, .child5 { width: 33.33%; }
}
Progressive Web Apps
CSS Flexbox for ordering: 1
.container {
display: flex;
flex-flow: row wrap;
}
.child1, .child2, .child3 {
width: 100%;
}
Progressive Web Apps
CSS Flexbox for ordering: 2
@media (min-width: 600px) {
.child1 {
order: 2;
width: 60%;
}
.child2 {
order: 1;
width: 40%;
}
}
Progressive Web Apps
CSS Flex: more
Progressive Web Apps
CSS Grid
Progressive Web Apps
CSS Grid: get ready
Progressive Web Apps