Advanced Design Techniques: JavaScript to the Rescue - ppk

Embed Size (px)

Citation preview

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    1/73

    Advanced DesignTechniques:

    JavaScript to the Rescue

    Peter-Paul Koch (ppk)http:!!!"quirks#ode"org$T% &on'erence ct" *+th *,,

    http://www.quirksmode.org/http://www.quirksmode.org/
  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    2/73

    .//0

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    3/73

    i' (1ro!ser 22 34etscape3) docu#ent"!rite

    (351od6 1ackground27pi81g9nn"gi'73);

    else i' (1ro!ser 22 3

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    4/73

    i' (1ro!ser 22 34etscape3) docu#ent"!rite

    (351od6 1ackground27pi81g9nn"gi'73);

    else i' (1ro!ser 22 3

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    5/73

    >ast 'or!ard to *,,

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    6/73

    ?sing JavaScriptresponsi1l6

    to plug a 'e! holesin 1ro!sers3 &SS

    support

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    7/73

    @e1ra ists

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    8/73

    li:nth-child(even) B1ackground-color: C,,cc,,;

    pera: Eesire'o8: 4o

    Sa'ari: 4o

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    9/73

    5ul id27navigation75li5a hre'27C7%6 1ooks5a5li

    5li5a hre'27C7ther 1ooks5a5li5ul

    5pTitles5p5ul

    5liPPK on JavaScript5li5liDesigning !ith Fe1 Standards5li

    5liGulletproo' Fe1 Design5li5ul

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    10/73

    5ul id27navigation75li5a hre'27C7%6 1ooks5a5li

    5li5a hre'27C7ther 1ooks5a5li5ul

    5pTitles5p5ul class27He1ra7

    5liPPK on JavaScript5li5liDesigning !ith Fe1 Standards5li

    5liGulletproo' Fe1 Design5li5ul

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    11/73

    Rule C.

    ?se hooks to indicate!hich IT% ele#ents

    should 1e a''ected"T6pical hooks:

    idclass

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    12/73

    var lists 2 get=le#entsG6Tag4a#es(3olul3);

    'or (var i2,list;list2listsi;iLL) B

    i' (list"class4a#e M2 3He1ra3) continue;

    var lis 2 list"get=le#entsG6Tag4a#e(3li3);'or (var N2,;N5lis"length;NL2*) B

    lisN"st6le"1ackground&olor 2 3C,,cc,,3;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    13/73

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    14/73

    Rule C*

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    15/73

    >ocus:'ocus

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    16/73

    input:'ocus B

    1order-!idth: thick;

    pera: Ees>ire'o8: EesSa'ari: Ees

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    17/73

    input"on'ocus 2 'unction () Bthis"st6le"1orderFidth 2 3thick3;

    input"on1lur 2 'unction () Bthis"st6le"1orderFidth 2 33;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    18/73

    Rule C

    JavaScript needs #oreprecise instructions than

    &SS"(

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    19/73

    input"on'ocus 2 'unction () Bthis"st6le"1orderFidth 2 3thick3;

    input"on1lur 2 'unction () Bthis"st6le"1orderFidth 2 33;

    i ' ' i () B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    20/73

    input"on'ocus 2 'unction () Bthis"st6le"1orderFidth 2 3thick3;this"class4a#e L2 3 'ocused3;

    input"on1lur 2 'unction () B

    this"st6le"1orderFidth 2 33;this"class4a#e 2

    this"class4a#e"replace('ocusedg33);

    "'ocused B1order-!idth: thick;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    21/73

    Rule C+

    Add class na#es; do notchange st6les"

    (=ase o' #aintenance)Adding class na#es keeps all &SSclasses intact"

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    22/73

    var lists 2 get=le#entsG6Tag4a#es(3olul3);

    'or (var i2,list;list2listsi;iLL) B

    i' (list"class4a#e M2 3He1ra3) continue;

    var lis 2 list"get=le#entsG6Tag4a#e(3li3);

    'or (var N2,;N5lis"length;NL2*) B

    lisN"st6le"1ackground&olor 2 3C,,cc,,3;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    23/73

    var lists 2 get=le#entsG6Tag4a#es(3olul3);

    'or (var i2,list;list2listsi;iLL) B

    i' (list"class4a#e M2 3He1ra3) continue;

    var lis 2 list"get=le#entsG6Tag4a#e(3li3);

    'or (var N2,;N5lis"length;NL2*) B

    lisN"st6le"1ackground&olor 2 3C,,cc,,3;

    lisN"class4a#e 2 3even3;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    24/73

    :hover

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    25/73

    5ul id27navigation7

    5li5a hre'27C7%ulti#edialiHe5a5li

    5li5a hre'27C7ANa8i'65a

    5ul

    5li5a hre'27C7Fe1 .",5a5li

    5li5a hre'27C7Fe1 *",5a5li

    5li5a hre'27C7Fe1 ",5a5li5ul5li

    5ul

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    26/73

    li ul Bdispla6: none;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    27/73

    li:hover ul Bdispla6: 1lock;

    ire'o8: EesSa'ari: Ees

    pera: Ees

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    28/73

    li"on#ouseover 2 'unction () Bthis"class4a#e L2 3 hovered3;

    li"on#ouseout 2 'unction () Bthis"class4a#e 2

    this"class4a#e"replace(hoveredg33);

    li"hovered ul Bdispla6: 1lock;

    li on#ouseover 2 'unction () B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    29/73

    li"on#ouseover 2 'unction () Bthis"class4a#e L2 3 hovered3;

    li"on#ouseout 2 'unction () Bthis"class4a#e 2

    this"class4a#e"replace(hoveredg33);

    li"hovered ul Bdispla6: 1lock;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    30/73

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    31/73

    =vent 1u11ling

    %ouse events onl6M

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    32/73

    li"on#ouseover 2 'unction () B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    33/73

    li"on#ouseover 'unction () Bthis"class4a#e L2 3 hovered3;

    li"on#ouseout 2 'unction () Bthis"class4a#e 2

    this"class4a#e"replace(hoveredg33);

    ul"on#ouseover 2 'unction () B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    34/73

    ul"on#ouseover 'unction () Bvar li 2 'ind correct li;li"class4a#e L2 3 hovered3;

    ul"on#ouseout 2 'unction () B

    var li 2 'ind correct li;li"class4a#e 2

    li"class4a#e"replace(hoveredg33);

    =vent delegation

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    35/73

    =vent 1u11lingThe do!n side

    li #ouseover li #ouseout a #ouseover

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    36/73

    li"#ouseover li"#ouseout a"#ouseovera"#ouseout li"#ouseover li"#ouseout

    ul"on#ouseover2 'unction () B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    37/73

    () Bvar li 2 'ind correct li;li"class4a#e L2 3 hovered3;

    ul"on#ouseout 2 'unction () B

    var li 2 'ind correct li;i' (this event is relevant)

    li"class4a#e 2li"class4a#e"replace(hoveredg33);

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    38/73

    a"on#ouseover a"on#ouseout

    Rule C

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    39/73

    Rule CFhen creating a dropdo!n#ake sure the 5ul and5lis have no visi1le area"

    (Keep it si#ple")

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    40/73

    The true JavaScript

    equivalent o' :hoveris not #ouseoverout

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    41/73

    The true JavaScript

    equivalent o' :hoveris #ouseenterleave

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    42/73

    li"#ouseenter li"#ouseleave

    li"on#ouseenter 2 'unction () B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    43/73

    var li 2 'ind correct li;this"class4a#e L2 3 hovered3;

    li"on#ouseleave 2 'unction () B

    var li 2 'ind correct li;i' (this event is relevant)this"class4a#e 2

    this"class4a#e"replace(hoveredg33);

    Rule CQ

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    44/73

    Rule CQ#ouseenter and #ouseleaveare the true JavaScriptequivalents o' :hover"

    (

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    45/73

    var li 2 'ind correct li;li"class4a#e L2 3 hovered3;

    ul"on#ouseout 2 'unction () B

    var li 2 'ind correct li;i' (this event is relevant)li"class4a#e 2

    li"class4a#e"replace(hoveredg33);

    ul"on#ouseover 2 'unction () Bli 'i d li

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    46/73

    var li 2 'ind correct li;li"class4a#e L2 3 hovered3;

    ul"on#ouseout 2 'unction () B

    var li 2 'ind correct li;i' (this event is relevant)li"class4a#e 2

    li"class4a#e"replace(hoveredg33);

    That3s it rightO

    FrongM

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    47/73

    Device

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    48/73

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    49/73

    :hover and on#ouseoverare #ouse onl6"

    Fe need a ke61oard handler

    :'ocus on'ocus

    li:hover ul li:'ocus ul B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    50/73

    li:hover ul li:'ocus ul Bdispla6: 1lock;

    li:hover ul li:'ocus ul B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    51/73

    li:hover ul li:'ocus ulBdispla6: 1lock;

    Doesn3t !ork"

    Eou can3t put the ke61oard'ocus on an 5li"

    Rule C

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    52/73

    Rule C

    nl6 links 'or# 'ields andthe location 1arcan receive

    the ke61oard 'ocus in all1ro!sers"

    li:hover ul(li 5 a:'ocus) ul B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    53/73

    ( ) Bdispla6: 1lock;

    (Don3t tr6 this at ho#e")

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    54/73

    Rule C0

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    55/73

    Rule C0

    &SS currentl6 does notallo! ke61oard-accessi1le

    hover e''ects"(Eou need JavaScript 'or per'ect

    accessi1ilit6")

    li"on#ouseover2 li"on'ocus 2 'unction () Bthis class4a#e L2 3 hovered3;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    56/73

    this"class4a#e L2 hovered ;

    li"on#ouseout2 li"on1lur 2 'unction () Bthis"class4a#e 2

    this"class4a#e"replace(hoveredg33);

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    57/73

    &SS:

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    58/73

    li:hover ul Bdispla6: 1lock;

    JavaScript:

    li"on#ouseover 2 'unction () B

    this"class4a#e L2 3 hovered3;

    &SS:

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    59/73

    (li 5 a:'ocus) ul Bdispla6: 1lock;

    JavaScript:

    a"on'ocus 2 'unction () B

    this"parent4ode"class4a#e L2 3 hovered3;

    ul"on#ouseover 2 'unction () Bvar li 2 'ind correct li;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    60/73

    var li 'ind correct li;li"class4a#e L2 3 hovered3;

    a"on'ocus 2 'unction () B

    this"parent4ode"class4a#e L2 3 hovered3;

    ul"on#ouseout 2 'unction () Bvar li 2 'ind correct li;

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    61/73

    var li 'ind correct li;i' (this event is relevant)

    li"class4a#e 2li"class4a#e"replace(hoveredg33);

    a"on1lur 2 'unction () Bi' (this event is relevant)

    this"parent4ode"class4a#e 2

    this"parent4ode"class4a#e"replace(hoveredg33);

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    62/73

    :1e'ore and:a'ter

    a"e8ternal:a'ter B

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    63/73

    Bcontent: (e8ternal link)7;

    >ire'o8: EesSa'ari: Eespera: Ees

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    64/73

    "createTe8t4ode(3 (e8ternal link)3);

    var links 2 docu#ent

    "get=le#entsG6Tag4a#e(3a3);

    'or (var i2,;i5links"length;iLL) Bi' (linksi"class4a#e M2 3e8ternal3) continue;

    linksi"append&hild(a'ter4ode

    "clone4ode(true));

    Fhat happens i' 1oth the &SS and theJavaScript are e8ecutedO

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    65/73

    JavaScript are e8ecutedO

    Their 'indings (e8ternal link) (e8ternal link)suggest """

    (ops)

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    66/73

    Situation:- JavaScript 'or

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    67/73

    5M--i'

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    68/73

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    69/73

    (Personal opinion !arning)

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    70/73

    The &SS content propert6 should not 1eused"?sing it is akin to using te8t in i#ages"

    Te8t 1elongs either in the IT% structuralla6er or in the JavaScript 1ehavior la6er;1ut never in the &SS presentation la6er"

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    71/73

    ?sing JavaScriptresponsi1l6

    to plug a 'e! holesin 1ro!sers3 &SS

    support

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    72/73

    4eed an6 helpO

  • 8/11/2019 Advanced Design Techniques: JavaScript to the Rescue - ppk

    73/73

    Iave 'unM