Evolution of CSS

45
Evolution of CSS Part 1 : History, Layout, Variables ++ Ecaterina Moraru — 7 December 2013 —

description

Talk at Winter Web Workshop, 7-8 Dec 2013, Iasi, Romania, http://www.eventbrite.com/e/winter-web-workshop-tickets-7122374213

Transcript of Evolution of CSS

Page 1: Evolution of CSS

Evolution of CSSPart 1: History, Layout, Variables ++

Ecaterina Moraru — 7 December 2013 —

Page 2: Evolution of CSS

Agenda

What is CSS?

How the language evolved?

Some techniques and their usage:

LayoutVariables ++

Why it needed to evolve?

·

·

·

··

·

2

Page 3: Evolution of CSS

What is CSS?

Page 4: Evolution of CSS

Cascading Style Sheets (CSS) is a style sheetlanguage used for describing the presentationsemantics (the look and formatting) of a documentwritten in a markup language.

Its most common application is to style web pageswritten in HTML and XHTML, but the language canalso be applied to any kind of XML document,including plain XML, SVG and XUL.

— Wikipedia

”4

Page 5: Evolution of CSS

Syntax

The property is an identifier that defines which feature is considered

The value describe how the feature must be handle by the engine

A property and value pair is called a declarationDeclarations are grouped in blocksEach block is preceded by a selectorThe pair selector-declarations block is called a rule

·

·

·

·

·

·

Source: MDN CSS, WP CSS 5

Page 6: Evolution of CSS

A simple syntax doesn't make an easy language

— Hugo Giraudel, CSS is easy... syntactically, 2013

“ ”

6

Page 7: Evolution of CSS

Why is CSS !important?

Separation of concerns (structure, presentation, behavior)

Easier to maintain sitesShare style sheets across pagesHelps pages load fasterTailor pages to different environmentsSeparation of development roles (designer, developer)

Handles the styling of the interface

Not using just text, but adding beautiful effectsReplaces images with native featuresLayout

With CSS you can achieve anything (most of things)

·

·····

·

···

·7

Page 8: Evolution of CSS

Web Without CSS

This is a motherfucking website.And it's fucking perfect.

Seriously, what the fuck else do you want?You probably build websites and think your shit is special. You think your 13 megabyte paralax-ative home page is going to get you some fuckingAwwward banner you can glue to the top corner of your site. You think your 40-pound jQuery file and 83 polyfills give IE7 a boner because itfinally has box-shadow. Wrong, motherfucker. Let me describe your perfect-ass website:

Shit's lightweight and loads fastFits on all your shitty screensLooks the same in all your shitty browsersThe motherfucker's accessible to every asshole that visits your siteShit's legible and gets your fucking point across (if you had one instead of just 5mb pics of hipsters drinking coffee)

Well guess what, motherfucker:

You. Are. Over-designing. Look at this shit. It's a motherfucking website. Why the fuck do you need to animate a fucking trendy-ass banner flagwhen I hover over that useless piece of shit? You spent hours on it and added 80 kilobytes to your fucking site, and some motherfucker jabbing at iton their iPad with fat sausage fingers will never see that shit. Not to mention blind people will never see that shit, but they don't see any of yourshitty shit.

You never knew it, but this is your perfect website. Here's why.

It's fucking lightweightSource: motherfuckingwebsite

Page 9: Evolution of CSS

How it evolved?

Page 10: Evolution of CSS

History

The CSS specifications are maintained by W3C's CSSWG

1990, Jan HTML proposed by Tim Berners-Lee1999, Dec 24 HTML 4.01 Recommendation2013, Aug06

HTML 5 Candidate Recommendation (13+ WD since Jan 2008)

1994, May CSS proposed by Håkon Wium Lie and Bert Bos1996, Dec 17 CSS 1 Recommendation1998, May 12 CSS 2 Recommendation1999, Jun CSS 3 earliest drafts2011, Jun 07 CSS 2.1 Recommendation (WD 2002, CR 2004, WD 2005, CR

2007, CR 2009, WD 2010, PR 2011)10

Page 11: Evolution of CSS

Rather than attempting to shove dozens ofupdates into a single monolithic specification, it

will be much easier and more efficient to be able toupdate individual pieces of the specification.

Modules will enable CSS to be updated in a moretimely and precise fashion, thus allowing for a

more flexible and timely evolution of thespecification as a whole...

— W3C, 2012

”11

Page 12: Evolution of CSS

History

Unlike a large single specification, CSS 3 is divided into modules

Due to the modularization, different modules have different stability andstatuses

Each module (50+) can level up independently

2011, Jun 07 CSS Color Module Level 3 REC2011, Sep 29 Selectors Level 3 REC2011, Sep 29 CSS Namespaces Module REC2012, Jun 19 Media Queries REC2013, Nov 07 CSS Style Attributes REC

·

·

·

12

Page 14: Evolution of CSS

CSS Module Timelines Themes W3C Heat Gray Blue

meyerweb.com

CascadingStyle SheetsLevel 2Revision 1(CSS 2.1)SpecificationCSS StyleAttributesMedia QueriesCSS MobileProfile 2.0SelectorsLevel 3SelectorsLevel 4CSSConditionalRules ModuleLevel 3CSS VariablesModule Level1CSS Valuesand UnitsModule Level3CSS Color

Cascading Style Sheets, level 2 revision 1Cascading Style Sheets, level 2 revision 1Cascading Style Sheets, level 2 revision 1Cascading Style Sheets, level 2 revision 1Cascading Style Sheets, level 2 revision 1Cascading Style Sheets, level 2 revision 1Cascading Style Sheets, level 2 revision 1Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) SpecificationCascading Style Sheets Level 2 Revision 1 (CSS 2.1) SpecificationCascading Style Sheets Level 2 Revision 1 (CSS 2.1) SpecificationCascading Style Sheets Level 2 Revision 1 (CSS 2.1) SpecificationCascading Style Sheets Level 2 Revision 1 (CSS 2.1) SpecificationCascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification

Syntax of CSS rules in HTML's "style" attributeSyntax of CSS rules in HTML's "style" attributeSyntax of CSS rules in HTML's "style" attribute CSS Styling Attributes Level 1CSS Style Attributes

Media QueriesMedia QueriesMedia QueriesMedia Queries Media QueriesMedia QueriesMedia QueriesMedia QueriesMedia Queries

CSS Mobile Profile 1.0CSS Mobile Profile 1.0CSS Mobile Profile 1.0CSS Mobile Profile 1.0 CSS Mobile Profile 2.0CSS Mobile Profile 2.0CSS Mobile Profile 2.0CSS Mobile Profile 2.0

CSS3 module: W3C selectorsCSS3 module: W3C selectorsCSS3 module: W3C selectorsCSS3 module: W3C selectorsSelectors Selectors Selectors Level 3Selectors Level 3 Selectors Level 3

Selectors Level 4

CSS Conditional Rules Module Level 3

CSS3 module: Values and Units CSS3 Values and UnitsCSS3 Values and Units CSS Values and Units Module Level 3

Source: Eric Meyer (Sept 2012)

Page 15: Evolution of CSS

Evolution: Specifications

There is nothing wrong with HTML 4.1 and CSS 2.1 but, everything elseevolved

People started to use the standards for things they weren't intended for

Browsers implemented new features

New browsing devices appeared

HTML 5 and CSS 3 were designed to:

Be backwards compatibleCompete with plugin techAdd more efficient, powerful featuresBe as accessible as possible

·

·

·

·

·

····

15

Page 16: Evolution of CSS

Techniques

Page 17: Evolution of CSS

Layout

Page 18: Evolution of CSS

Layout Mode

The layout mode determines the position, the size and the order of boxesbased on the way they interact with their siblings and ancestor boxes

Layout:Block — designed for documents (float, multiple columns)Inline — designed for textTable — designed for tablesPositioned — designed for positioning elements (without muchinteraction with other elements)Flexible box — designed for complex pages that can be resizedGrid — designed for elements relatively to a fixed grid

·

·····

··

Source: MDN, etemad 18

Page 19: Evolution of CSS

Using: <table> elements

td { border: 0; width: 50%;}

CSS 1

<table> <tr> <td>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud</td> <td>exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</td> </tr></table>

< HTML 4

Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et doloremagna aliqua. Ut enim ad minim veniam, quis nostrud

exercitation ullamco laboris nisi ut aliquip ex eacommodo consequat.

RESULT

Reference: MDN 19

Page 20: Evolution of CSS

Using: <div> elements

Being a generic container it needs additional styling

<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud</div><div>exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>

HTML

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrudexercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

DEFAULT RESULT

·

Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et doloremagna aliqua. Ut enim ad minim veniam, quis nostrud

exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

WANTED RESULT

Reference: MDN 20

Page 21: Evolution of CSS

Method: Float

Using float: left REC

No float: centerIt needs additional markup to clear the float or CSS 3's :after selector

·

div { float: left; width: 50%;}

CSS 1

Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et doloremagna aliqua. Ut enim ad minim veniam, quis nostrud

exercitation ullamco laboris nisi utaliquip ex ea commodoconsequat.

RESULT

·

·

.clearfix { clear: both; } CSS 1

Reference: MDN, Clearfix, Alternatives, since 2003 21

Page 22: Evolution of CSS

Method: Positioning

Using position: absolute REC

Properties: position, z-index

·

·

.parent { position: relative;}

div.second { position: absolute; right: 0; top: 0; width: 50%;}

CSS 2.1

Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et doloremagna aliqua. Ut enim ad minim veniam, quis nostrud

exercitation ullamco laboris nisi ut aliquip ex eacommodo consequat.

RESULT

Reference: MDN 22

Page 23: Evolution of CSS

Method: Display (inline-block)

Using display: inline-block, block, inline REC

Problem: spacing between blocks

Can be combined with vertical-align property

·

div { display: inline-block; width: 50%;}

CSS 2.1

<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit ... </div><div>exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>

HTML

Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et doloremagna aliqua. Ut enim ad minim veniam, quis nostrud

exercitation ullamco laboris nisiut aliquip ex ea commodoconsequat.

RESULT

·

·Reference: MDN, designshack 23

Page 24: Evolution of CSS

Method: Display (table-cell)

Using display: table-cell REC

Needs to be used in conjunction with table and table-row

·

div { display: table-cell; width: 50%;}

CSS 2.1

<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud</div><div>exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>

HTML

Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et doloremagna aliqua. Ut enim ad minim veniam, quis nostrud

exercitation ullamco laboris nisi ut aliquip ex eacommodo consequat.

RESULT

·Reference: MDN 24

Page 25: Evolution of CSS

Method: Columns

Extends Block Layout Mode CR

Properties: columns, column-count, column-width, column-gap, etc.

·

·

div { column-count: 2;}

CSS 3

<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>

HTML

Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et doloremagna aliqua. Ut enim ad minim veniam, quis nostrud

exercitation ullamco laboris nisi ut aliquip ex eacommodo consequat.

RESULT

Reference: W3C, MDN, Opera 25

Page 26: Evolution of CSS

Method: Flexible box

Using display:flex, flex-direction, align-items, order CR ·

.parent { display: flex;} div { width: 50%;}

CSS 3

<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud</div><div>exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>

HTML

Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et doloremagna aliqua. Ut enim ad minim veniam, quis nostrud

exercitation ullamco laboris nisi ut aliquip ex eacommodo consequat.

RESULT

Reference: W3C, MDN, Opera, html5please, bocoup, css-tricks, Gillenwater, echoplex, sketchingwithcss, since 2009 26

Page 27: Evolution of CSS

Method: Flexible box

flex container

display: flex

flex-direction: row

flex-wrap: nowrap

justify-content: flex-start

align-items: flex-start

align-content: stretch

flex items

flexbox playground and code generator

1 2 3

?

?

?

?

?

Source: flexyboxes

Page 28: Evolution of CSS

Method: Grid Layout

Currently supported just by IE10 with -ms- prefix WD

Other Layout Modules: Regions WD Exclusions and Shapes WD

·

.parent { display: grid; grid-template: "1 2";} div.first { grid-area: "1";}

div.second { grid-area: "2";}

CSS 3

Reference: W3C, Gillenwater, hugogiraudel 28

Page 29: Evolution of CSS

Evolution: Layout Mode

1. Remove the need for additional markup

2. Targeting semantic markup and styling

3. Choosing the most flexible method

4. Choosing the most accessible method

5. Some methods chosen because of browser compatibility

6. Some methods have slower browser rendering

7. Some methods are specially designed to do a certain thing

·

·

·

·

·

·

·

Reference: Gillenwater 29

Page 30: Evolution of CSS

Variables ++

Page 31: Evolution of CSS

Turing completeness: HTML + CSS 3 + HUMAN

Programming languages are Turing complete(can simulate a Turing machine)

CSS 3 is Turing complete because it can program a Rule 110 automaton

Execution is done with HTML structure and user interaction (or JS)By itself it can generate 1 iteration of the state-machineThere is no programmatic way to use the output as input or to loop

CSS is designed to be a declarative language, not an imperative one

It's missing the variables, functions and control structures (if, for, while)

·

·

···

·

·

Reference: stackoverflow 1, 2, reddit, Simple jsfiddle, JS jsfiddle 31

Page 32: Evolution of CSS

Turing completeness: HTML + CSS 3 + HUMAN

Pattern rulesSource

111 110 101 100 011 010 001 000 0 1 1 0 1 1 1 0

Page 33: Evolution of CSS

Method: CSS Variables

In CSS the concept of time-changing values is not present yet

The purpose is to have reusable values throughout the style

Notion of cascading variables (10 April 2012) WD

·

·

·

:root { var-contrast-color: #d67128; var-default-margin: 10px;} div { color: var(contrast-color); margin-right: calc(var(default-margin) * 2);}

CSS 3

Reference: W3C, MDN, :root 33

Page 34: Evolution of CSS

Method: Apache Velocity

Java-based template engine, started in 2000

Templates are parsed and rendered, not compiled

Uses $variables and #macros

·

·

·

#set ($linkColor = '#528BA1')#macro (css3_boxSizing $value) #set ($browserVariants = ['-moz-', '-webkit-', '']) #foreach ($bvar in $browserVariants) ${bvar}box-sizing: $value; #end#end

VELOCITY

#template('colorThemeInit.vm')

div { color: $linkColor; #css3_boxSizing('border-box')}

CSS

Reference: Apache 34

Page 35: Evolution of CSS

Method: Preprocessors

Alternatives:LESS

Dynamic stylesheet language in JavaScriptSass

Scripting language coded in Ruby

Languages that extends CSS:

VariablesNestingMixins (LESS: Guarded Mixins)Extend / InheritanceFunctions & OperationsControl Directives (Sass only)

Compiles into regular CSS syntax

··

··

·

·

······

·35

Page 36: Evolution of CSS

Method: Preprocessors

Functions which transform colors, manipulate strings, do maths, etc.

Control Directives

Mixins lets you make groups of CSS declarations that you want to reuse

Extends lets you share a set of CSS properties from one selector toanother

·lighten(@color, 10%); /* returns a color 10% lighter than @color */saturate(@color, 10%); /* returns a color 10% more saturated than @color */

LESS

·@for $i from 1 through 3 { .item-#{$i} { width: 2em * $i; }}

SASS

·

·

Reference: tutsplus, designshack, css-tricks 36

Page 37: Evolution of CSS

Method: Preprocessors

Source: github, less2css

Page 38: Evolution of CSS

Method: Preprocessors

Use :extend to minimize the output, especially when re-using.clearfix class for other elements

Map customized sections of a library (Bootstrap) to you classes

Using :extend(.clearfix all) will target nested selectors

·

·

·

.clearfloats:extend(.clearfix all) {}

input.button, .buttonwrapper button, .buttonwrapper a { .btn; .btn-primary;}

LESS

.clearfix:after,

.clearfloats:after { clear: both;}

CSS

Reference: Junco Skin 38

Page 39: Evolution of CSS

Evolution: Variables ++

1. Maintainability, Reusability

2. Save time (nesting, mixins)

3. Powerful functionality, simplifying some aspects

4. Making the language more complex

5. Syntax more/less faithful to traditional CSS

6. Third-party dependencies

7. Threat to replace the standard?

·

·

·

·

·

·

·

Reference: iamvdo, kaelig 39

Page 40: Evolution of CSS

Why it needed to evolve?

Page 41: Evolution of CSS

Why it needed to evolve?

Created for simple text now it needs to accommodate complexapplication development

Language consistency

Missing use cases from specifications

Less unsemantic markup

Better built in accessibility

Less Flash / Photoshop / JavaScriptEsthetic effectsForm validationAnimationsWeb Fontsetc.

·

·

·

·

·

·

····· 41

Page 42: Evolution of CSS

The only constant is change— Isaac Asimov

My Own View 1978

“ ”

Source: NasaMarshall

Page 43: Evolution of CSS

Evolution Constants

Reuse

Separation of concerns

Performance

Cross Browser

There are a billion ways to do one thingDiversityBest practicesStandards

CSS allows you to work in the openReview code with FirebugShare techniquesCommunity collaboration

·

·

·

·

····

····

43

Page 44: Evolution of CSS

Questions?

What did I miss covering?Source: opensourceway

Page 45: Evolution of CSS

Thank you

about.me/evalicaSource: MadLab