css statements, media queries, selectors, cascading

55
CSS Statements, media queries, selectors, cascading Web Applications Martin Nečaský Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague, Czech Republic

Upload: rumer

Post on 14-Feb-2016

31 views

Category:

Documents


0 download

DESCRIPTION

CSS Statements, media queries, selectors, cascading. Web Applications Martin Nečaský Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague, Czech Republic. CSS Statements. Syntax. CSS style sheet consists of statements of two kinds rule set - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CSS Statements, media queries, selectors, cascading

CSSStatements, media queries, selectors, cascading

Web Applications

Martin NečaskýDepartment of Software Engineering,Faculty of Mathematics and Physics,Charles University in Prague,Czech Republic

Page 2: CSS Statements, media queries, selectors, cascading

CSS Statements

Page 3: CSS Statements, media queries, selectors, cascading

Syntax CSS style sheet consists of statements of two kinds rule setselector {property-name-1: property-value-1;…property-name-N: property-value-N;}

at-rule@at-rule-name …;@at-rule-name {…}

Page 4: CSS Statements, media queries, selectors, cascading

Sample Rule Setdiv {

padding: 10px;background-color: lightblue;border: 2px solid blue;

}

Page 5: CSS Statements, media queries, selectors, cascading

Sample At-Rules@import "basic.css";@import "print-basic.css" print;@media print {

div {padding: 10px;background-color: lightblue;border: 2px solid blue;

}}

Page 6: CSS Statements, media queries, selectors, cascading

Namespace At-Rule namespaces may be declared

externally in document which uses style sheet• e.g. XML document using well-know XML namespace

mechanisms internally in the style sheet

• @namespace at-rule

@namespace "http://www.w3.org/1999/xhtml";@namespace svg "http://www.w3.org/2000/svg";

Page 7: CSS Statements, media queries, selectors, cascading

CSS MEDIA queries

Page 8: CSS Statements, media queries, selectors, cascading

Media Queries W3C Candidate Recommendation 27 July 2010 allows styling single web page for different

devices, e.g. printer tablet/phone (landscape, portrait) low resolution laptop …

Page 9: CSS Statements, media queries, selectors, cascading

Media Queries where you can use media query?

media at-rule• CSS statements inside at-rule are applied only to

specified media media attribute of link element in HTML• CSS statements in linked CSS file are applied only to

specified media import at-rule• imported CSS statements are applied only to specified

media

Page 10: CSS Statements, media queries, selectors, cascading

Media Queries<media> and (<feature1>) and … and (<featureN>)

Page 11: CSS Statements, media queries, selectors, cascading

Media Queries<media> and (<feature1>) and … and (<featureN>)

media – stands for media type screen print braile projection tv … all

Page 12: CSS Statements, media queries, selectors, cascading

Media Queries<media> and (<feature1>) and … and (<featureN>)

feature-name: value allowed features:

width• value – length• width of display area of output device

height• value – length• height of display area of output device

orientation• value – landscape or portrait• orientation of display area of output devide

… most of them (e.g. width, height) may be supplemented with min-

and max- prefix (to avoid < and >)

Page 13: CSS Statements, media queries, selectors, cascading

Media Queries/* iPad landscape */@media all and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation: landscape){ /* statements */}

css_12.html

Page 14: CSS Statements, media queries, selectors, cascading

CSS Selectors

Page 15: CSS Statements, media queries, selectors, cascading

Selectors

selector is chain of one or more sequences of simple selectors separated by combinators

S0 C1 S1 … Cn Sn where

S0, …, Sn are sequences of simple selectors C1, …, Cn are combinators (whitespace, >, +, ~ )

“algorithm”:if (n==0) then return

each element selected by Sn

else returneach element selected by Sn which is in the relationship specified by Cn to an element selected by S0 C1 S1 … C(n-1) S(n-1)

Page 16: CSS Statements, media queries, selectors, cascading

Selectors

sequence of simple selectors is chain of simple selectors that are not separated by combinator

S0S1…Sn where S0, …, Sn are simple selectors “algorithm”:

if (n==0) return • each element selected by Sn

else return• each element selected by S0…S(n-1) which is also selected by Sn

simple selector is one of the following: type selector, universal selector, attribute selector, class selector, ID

selector, pseudo-class and pseudo-element

Page 17: CSS Statements, media queries, selectors, cascading

Selectors – Few Examples

two simple selectors separated by + combinatordiv + div

three simple selectors separated by > combinatorol#topMenu > li.menuItem[label$="navigation"] > a

two simple selectors separated by whitespace combinatortr:last-child td:not(:first-child):not(:last-child)

Page 18: CSS Statements, media queries, selectors, cascading

Combinators whitespace combinator: A B

specifies descendant relationship selects all elements selected by B which are descendants of any element

selected by A > combinator: A > B

specifies child relationship selects all elements selected by B which are child of any element selected by A

+ combinator: A + B specifies adjacent sibling relationship selects all elements selected by B which have same parent as and immediately

follow any element selected by A ~ combinator: A ~ B

specifies sibling relationship selects all elements selected by B which have same parent as and follow (not

necessarily immediately) any element selected by A

Page 19: CSS Statements, media queries, selectors, cascading

Type Simple SelectorE { … } elements with name E in document tree

Do you know the concept of XML namespaces?

Page 20: CSS Statements, media queries, selectors, cascading

Type Simple Selector and Namespacesns|E { … } elements with name E from namespace with declared

prefix ns*|E { … } elements with name E from any namespace or without

namespace|E { … } only elements without namespaceE { … }↔ *|E if no default namespace↔ dns|E if default namespace has prefix dns

Page 21: CSS Statements, media queries, selectors, cascading

Type Simple Selector and Namespaces see css_03.xml

Page 22: CSS Statements, media queries, selectors, cascading

Universal Simple Selector* { … } all elements in document tree

Page 23: CSS Statements, media queries, selectors, cascading

Universal Simple Selector and Namespaces

ns|* { … } all elements from namespace with declared prefix ns

*|* { … } all elements|* { … } all elements without namespace* { … }↔ *|* if no default namespace↔ dns|* if default namespace has prefix dns

Page 24: CSS Statements, media queries, selectors, cascading

Universal Simple Selector see css_04.xml see css_04,5.xml

Page 25: CSS Statements, media queries, selectors, cascading

Attribute Simple Selector[att] { … } all elements with att attribute (whatever

value) [att=val] { … } all elements with att attribute with value val [att~=val] { … } all elements with att attribute with value

being a sequence of (white space separated) words containing word val

Page 26: CSS Statements, media queries, selectors, cascading

Attribute Simple Selector[att^=val] { … } all elements with att attribute with value starting with val nothing if val is empty[att$=val] { … } all elements with att attribute with value ending with val nothing if is empty val[att*=val] { … } all elements with att attribute with value containing one or more

occurrences of val nothing if val is empty[att|=val] { … } all elements with att attribute with value val or with value starting

with val followed by ‘-’ (intended primarily, but not only, to matching language codes)

Page 27: CSS Statements, media queries, selectors, cascading

Attribute Simple Selector see css_05.html

Page 28: CSS Statements, media queries, selectors, cascading

Attribute Simple Selector and Namespaces

[ns|att] { … } all elements with att attribute from namespace with

declared prefix ns[*|att] { … } all elements with attribute att from any namespace

or without namespace[|att] { … } all elements with attribute att without namespace XML notes:

default namespace does not apply to attributes attribute gains namespace of its element

Page 29: CSS Statements, media queries, selectors, cascading

Class and ID Simple Selector.val { … } ↔ [class~=val] all elements having class attribute with

value being a sequence of (white space separated) words containing word val

#val { … } ↔ [idattr=val] all elements having ID-attribute with value val ID-attribute (idattr) may be given explicitly

(e.g. by DTD or XSD) or implicitly (e.g. HTML ID attribute)

Page 30: CSS Statements, media queries, selectors, cascading

Class and ID Selector see css_06.html

Page 31: CSS Statements, media queries, selectors, cascading

Pseudo-Classes:pseudo-class all XML elements which belong to pseudo-

class with name pseudo-class dynamic pseudo-classes

classify elements on characteristics which cannot be deduced from document tree

structural pseudo-classes classify elements on their structural relationships

which are not covered by other kinds of simple selectors

Page 32: CSS Statements, media queries, selectors, cascading

Dynamic Link Pseudo-Classes:link links that have not yet been visited:visited links that have been already visited

Page 33: CSS Statements, media queries, selectors, cascading

Dynamic User Action Pseudo-Classes:hover elements being designated with pointing

device by user:active elements being activated by user:focus elements having focus

Page 34: CSS Statements, media queries, selectors, cascading

Dynamic User Action Pseudo-Classes see css_07.html

Page 35: CSS Statements, media queries, selectors, cascading

Dynamic Target Pseudo-Class

:target link target elements applied when link is “activated” by user

<a href="#place">TEXT</a>

<div id="place">TEXT TEXT</div>

Page 36: CSS Statements, media queries, selectors, cascading

Power of Pseudo-Classes

Can you make “switching panels” with CSS?

css_08.html

Page 37: CSS Statements, media queries, selectors, cascading

Structural Pseudo-Classes:nth-child(an+b) all elements whose position in the list of all elements with the same

parent can be counted with an+b where a and b are fixed integers (positive, negative, 0) given by CSS developer n means ‘iteration variable’ (0,1,2,…) first element within its parent has position 1, non-element nodes (text nodes)

are not counted special values odd and even examples::nth-child(2n+0) – positions 2, 4, 6, …, i.e. even elements:nth-child(2n+1) – positions 1, 3, 5, …, i.e. odd elements:nth-child(8n+1) – positions 1, 9, 17, …:nth-child(even) = :nth-child(2n+0):nth-child(odd) = :nth-child(2n+1)

Page 38: CSS Statements, media queries, selectors, cascading

Structural Pseudo-Classes:nth-child(an+b) b may be 0::nth-child(3n+0) – positions 3, 6, 9, …:nth-child(3n) – shortcut for :nth-child(3n+0)

b may be negative::nth-child(5n-1) – positions 4, 8, 12, …

a may be 0::nth-child(0n+5) – each fifth element within its parent:nth-child(5) – shortcut for :nth-child(0n+5)

a may be negative: only positive positions which can be counted by an+b target

elements:nth-child(-n+3) – positions 1,2,3

Page 39: CSS Statements, media queries, selectors, cascading

Structural Pseudo-Classes:nth-last-child(an+b) all elements whose position FROM THE END in

the list of all elements with the same parent can be counted with an+b

examples::nth-last-child(-n+2) – last two elements in each parent

Page 40: CSS Statements, media queries, selectors, cascading

Structural Pseudo-Classes

Can you make the following “chess-board” with CSS :nth-child, :nth-last-child?

Page 41: CSS Statements, media queries, selectors, cascading

Structural Pseudo-Classes see css_09.html

Page 42: CSS Statements, media queries, selectors, cascading

Structural Pseudo-Classes:nth-of-type(an+b), :nth-last-of-type(an+b) variants of previous which consider only elements with the same type as

the object element:first-child = :nth-child(1) :last-child = :nth-last-child(1) :first-of-type = :nth-of-type(1) :last-of-type = :nth-last-of-type(1) :only-child = :first-child:last-child but lower specificity:only-of-type = :first-of-type:last-of-type but lower specificity:empty elements without children only child elements, text, CDATA and entity references count

Page 43: CSS Statements, media queries, selectors, cascading

Negation Pseudo-Class:not(PS) all elements which do not correspond to

pseudo-class PS

Page 44: CSS Statements, media queries, selectors, cascading

Negation Pseudo-Class

Can you make the following “chess-board” (only the boundary rows and columns are white)?

Page 45: CSS Statements, media queries, selectors, cascading

Negation Pseudo-Class see css_10.html

Page 46: CSS Statements, media queries, selectors, cascading

Pseudo-Elements:first-letter:first-line

Page 47: CSS Statements, media queries, selectors, cascading

Pseudo-Elements:before:after intended for generated content generated content is content which does not come from

document tree e.g. numbered list or numbering chapters generated content is specified by content property with value:

string uri counter attr(X) … and special values for generating quotes

Page 48: CSS Statements, media queries, selectors, cascading

Pseudo-Elements see css_11.html

Page 49: CSS Statements, media queries, selectors, cascading

CSS Cascading

Page 50: CSS Statements, media queries, selectors, cascading

Cascading every element in document tree must have value for

every property that applies to target media type three different sources of style sheets:

author• web developer who creates style sheets and associates them

with documents user

• user agent may allow users to specify their own style information (e.g. “everything bigger”)

user agent• default style sheets of user agent which allow displaying non-

styled elements (e.g. default HTML or default XML)

Page 51: CSS Statements, media queries, selectors, cascading

Cascading cascade assigns weight to each property in each style

sheet statement (1 is lowest weight):1. user agent properties2. user properties3. author properties4. author important properties5. user important properties

if element in document tree may have more values for the same property the one with highest weight is applied

important properties are those followed by !important keyword

Page 52: CSS Statements, media queries, selectors, cascading

Cascading if element in document tree may have more values for the

same property with the same cascading weight select the one with the highest specificity

specificity of property declaration in statement is counted on the base of the following three values: A = 1 if declaration is in style att, 0 otherwise B = number of ID selectors in statement selector C = number of class selectors, attribute selectors and pseudo-

classes in statement selector D = number of type selectors and pseudo-elements in statement

selector (universal selector is ignored)

specificity = ABCD

Page 53: CSS Statements, media queries, selectors, cascading

Cascadingtd (B=0, C=0, D=1 specificity 0001)td:hover (B=0, C=1, D=1 specificity 0011)td:nth-child(-n+2) (B=0, C=1, D=1 specificity 0011)tr:nth-child(2n) td:nth-child(2n+1) (B=0, C=2, D=2 specificity 0022)

/* almost winner */tr:nth-child(2n) td:nth-child(2n+1) { background-color: black;}/* looser */td:nth-child(-n+2) { background-color: orange;}/* beats all */td:hover { background-color: pink !important;}

Page 54: CSS Statements, media queries, selectors, cascading

Inheritance if element does not have property value it may inherit it

from its parent in document tree Not all properties are inherited

in general text related properties are inherited (e.g. color, font) box related properties are not inherited (e.g. border, float)

keyword inherit property is inherited (even if it is not inherited by default)

* { border: inherit;}

Page 55: CSS Statements, media queries, selectors, cascading

Thanks for your attention