Responsive web design
Andrei ANTAL
QUALITANCE
Tap That JOB 2017
CONTENTS
- Intro
- A bit of context
- Responsive web design features (hands on)
- Assignment
ABOUT ME
ANDREI ANTAL
Frontend Engineer @ QUALITANCE
- Web technologies enthusiast
- Community activist
- Occasional speaker
antal.a.andrei@gmail.com
@andrei_antal
Angular Bucharest
Next meetup - April 24th 2017 - TechHub
A bit of context
A bit of context
Responsive web design
Responsive web design
Definition
Responsive web design means designing your website so that it responds to your users environment based on screensize, platform and orientation.
Responsive web design
Definition
It looks diferent and things jiggle around, scale, re-order, appear, and disappear so it works well in your browser size or whatever device you’re using to view it...
Responsive web design
Responsive web design
Responsive web design
Responsive web design
Responsive web design
Responsive web design
Responsive web design
Responsive web design
Mobile vs. Adaptive vs. Responsive
Responsive web design
New ways of thinking
- Works on everything - Design for many sizes at once
- Clean design - reduce clutter, essential content only
- Design from the content out - Let content decide breakpoints
- Less Graphic files - CSS gradients, font icons
Design patterns
Layouts
Mostly Fluid
Design patterns
Layouts
Column Drop
Design patterns
Layouts
Layout Shifter
Design patterns
Layouts
Off Canvas
Design patterns
Navigation
Toggle Navigation
Design patterns
Navigation
<select> Navigation
Design patterns
Navigation
Footer Navigation
Design patterns
Navigation
Stacked Top Links Navigation
Design patterns
Navigation
Left Nav Flyout - aka Hamburger menu
Design patterns
Navigation
Priority+ Navigation
Design patterns
Navigation
Priority+ Navigation
Design patterns
Source order shift
Design patterns
Source order shift
RWD Components
-
Flexible, grid based layouts
- % widths and em units, not fixed pixels
-
Flexible images and media
- width/height not fixed
-
CSS3 Media Queries
- @media rule
Flexible layouts
Building the layout of a website with a flexible grid, capable of dynamically resizing to any width
Flexible layouts
Relative Viewport Lengths
- vw - Viewports width
- vh - Viewports height
- vmin - Minimum of the viewport’s height and width
- vmax - Maximum of the viewport’s height and width
.container {
width: 50vw;
height: 100vh;
}
Flexible layouts
Flexible grids
// HTML
<div class="container">
<section>...</section>
<aside>...</aside>
</div>
// CSS
.container {
width: 538px;
}
section,
aside {
margin: 10px;
}
section {
float: left;
width: 340px;
}
aside {
float: right;
width: 158px;
}
Flexible layouts
Flexible grids
target ÷ context = result
|
Flexible layouts
Flexible grids
section,
aside {
margin: 1.858736059%; /* 10px ÷ 538px = .018587361 */
}
section {
float: left;
width: 63.197026%; /* 340px ÷ 538px = .63197026 */
}
aside {
float: right;
width: 29.3680297%; /* 158px ÷ 538px = .293680297 */
}
Flexible layouts
Flexible grids
Flexible layouts
DEMO TIME
Flexible layouts
DOWNLOAD SOURCES:
goo.gl/mrbKGN
Flexible layouts
Choose your text editor:
Visual Studio Code
Atom
Sublime
Flexible layouts
Our application:
Flexible layouts
Flexible typeset
- Font of 100% (generally) corresponds to 16px
.nav li a:link {
color: #2b737a;
text-decoration:none;
font-size: 22px;
font-weight:100;
}
target ÷ context = result
22px ÷ 16px = 1.375em
|
Flexible layouts
Flexible typeset
.nav li a:link {
color: #2b737a;
text-decoration:none;
font-size: 1.375em;
/* 22px / 16px */
font-weight:100;
}
h2 24px ÷ 16px = 1.5em h3 20px ÷ 16px = 1.25em p 14px ÷ 16px = .875em
Flexible layouts
Flexible grid
Flexible layouts
Flexible grid
target ÷ context = result
___px ÷ 1280px = __%
Flexible layouts
Flexible grid
.site {
width: 100%;
/* 1280px / 1280px */
}
Flexible layouts
Flexible grid
Flexible layouts
Flexible grid
#heading {
background-color: #fff;
width: 960px;
margin: 1.5em auto;
text-align:right;
}
#heading {
background-color: #fff;
width: 75%;
/* 960px / 1280px */
margin: 1.5em auto;
text-align:right;
}
Flexible layouts
Flexible grid
#promowrapper {
margin: 0 auto;
width: 960px;
}
#promowrapper {
margin: 0 auto;
width: 75%;
}
Flexible layouts
Flexible grid
#content {
background-color: #fff;
width: 960px;
margin: auto;
}
.contentbox {
width: 300px;
float:left;
padding: 2em 30px 2em 0;
}
#content {
background-color: #fff;
width: 75%;
margin: auto;
}
.contentbox {
width: 31.25%;
float:left;
padding: 2em 30px 2em 0;
}
Flexible layouts
Flexible grid
Flexible grids
.contentbox {
width: 31.25%;
float:left;
padding: 2em 3.125% 2em 0;
/* 30px / 1280px */
}
Flexible layouts
Flexible grids
Flexible layouts
Flexible grids
#footercontent {
width: 75%;
margin: auto;
color: #fff;
}
Flexible layouts
Flexible images
Flexible layouts
Flexible images
#promo img {
margin: 2em 0;
max-width: 100%;
}
Flexible layouts
Media queries
Media queries provide the ability to specify different styles for individual browser and device circumstances -
apply uniquely targeted styles
// HTML
<!-- Separate CSS File -->
<link href="styles.css" rel="stylesheet" media="all and (max-width: 1024px)">
// CSS
/* @media Rule */
@media all and (max-width: 1024px) {...}
/* @import Rule */
@import url(styles.css) all and (max-width: 1024px) {...}
Media queries
@media screen and ( min-width: 500px ) and ( max-width: 800px ) {
/* CSS declarations */
}
This is for screen only (desktops, smartphones, not print)
media_type: all | aural | braille | handheld | print | projection | screen | tty | tv | embossed | speech
Media queries
@media screen and ( min-width: 500px ) and ( max-width: 800px ) {
/* CSS declarations */
}
The width of the window must be AT LEAST 500px
The width of the window must ALSO be NO MORE THAN 800px
media_feature: width | min-width | max-width | height | min-height | max-height | aspect-ratio | min-aspect-ratio | max-aspect-ratio | color | min-color | max-color | color-index | min-color-index | max-color-index | monochrome | min-monochrome | max-monochrome | resolution | min-resolution | max-resolution | scan | grid
Media queries
@media screen and ( min-width: 500px ) and ( max-width: 800px ) {
img {
border: 5px solid #!f;
}
}
Images will have a white border when the window is from 500px to 800px wide
Media queries
@media all and (max-width: 420px) {
section, aside {
float: none;
width: auto;
}
}
Media queries
DEMO TIME
Media queries
Media queries
@media screen and (max-width: 1100px) {
#navbox {
clear: left;
}
}
Media queries
@media screen and (max-width: 1100px) {
#navbox {
clear: left;
padding-top: 0;
}
}
Media queries
@media screen and (max-width: 1100px) {
#navbox {
clear: left;
padding-top: 0;
text-align: center;
}
}
Media queries
@media screen and (max-width: 500px) {
.logo {
}
.nav li {
}
.contentbox {
}
}
Media queries
@media screen and (max-width: 500px) {
.nav li {
display: block;
}
}
Media queries
@media screen and (max-width: 500px) {
.nav li {
display: block;
margin-left: 0;
padding-bottom: 5px;
}
}
Media queries
@media screen and (max-width: 500px) {
...
.logo {
float: none;
text-align: center;
}
}
Media queries
@media screen and (max-width: 500px) {
...
.contentbox {
width: 100%;
float: none;
padding: 1.5em 0 0 0;
}
}
RWD approaches
Progressive enhancement
Graceful degradation
ASSIGNMENT
Get the slides:
https://slides.com/andreiantal/ttj_1_responsive/
Link 1
Link 2
Link 3
Link 4
Banner
Article 1
Article 2
Article 3
Article 4
Footer
max 1024px
1. Desktop ( > 900px)
12px
12px
12px
16px
16px
16px
8px
8px
Banner
Article 1
Article 2
Footer
2. Tablet ( between 900px and 500px )
16px
16px
16px
Article 3
Article 4
Link 1
Link 2
Link 3
Link 4
Banner
Article 1
Footer
3. Phone (bellow 500px)
Link 1
Article 2
Article 3
Article 4
Link 2
Link 3
Link 4
NOTE: The assignment is not mandatory for TTJ completion. It is just an opportunity for you to practice what you've learned and get feedback on your work.
Send assignments (and any other questions) to:
andrei.antal@qualitance.com
SUBJECT: [TTJ] Assignment (Your name)
DEADLINE: Friday, 7 april 2017
Tap That Job Presentation #1 - Responsive web design
By Andrei Antal
Tap That Job Presentation #1 - Responsive web design
Tap That Job 2017 presentation - Responsive web design with Andrei Antal
- 1,462