SlideShare ist ein Scribd-Unternehmen logo
1 von 283
Downloaden Sie, um offline zu lesen
Hello.

http://is.gd/AWD_WV_NYC_2012
ADAPTIVE WEB DESIGN WORKSHOP




    The Agenda
๏   Progressive Enhancement

    ‣ vs Graceful Degradation

    ‣ How & Why It Works

๏   Content & Organization
๏   Semantics

    ‣ HTML5

    ‣ Microformats




                                   2
ADAPTIVE WEB DESIGN WORKSHOP




    The Agenda
๏   Design

    ‣ Parsing Errors

    ‣ Designing in Layers

    ‣ Adaptive (& Responsive) Layouts

    ‣ “Mobile First”
๏   Interactivity

    ‣ Unobtrusive JavaScript
    ‣ Adaptive Interfaces

    ‣ Hijax

                                        3
ADAPTIVE WEB DESIGN WORKSHOP




    The Agenda
๏   Accessibility

    ‣ Design Considerations

    ‣ ARIA




                                   4
VillageReach.org
Progressive
Enhancement
?
Technological
 restrictions
MCMLXXVII
  (that’s 1977)
HTML   CSS
fault tolerance
n. a system’s ability to continue to
operate when it encounters and
unexpected error.
Browsers IGNORE
 what they don’t
   understand
Graceful
Degradation
Modern
Browsers
   Older Browsers
Modern
Browsers
   Older Browsers
Progressive
Enhancement
Progressive
Graceful Degradation   Enhancement
Content
Content
:-)
Ooooh.
Shiny!
Progressive
Enhancement
 ISN’T about
  browsers.
Browsers and
 technologies
COME AND GO
Don’t lose sight
of your USERS
User Experience




             BASIC                          ADVANCED

                     Browser Capabilities
User Experience




             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience




                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience




                         Design

                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience




                     Interactivity

                         Design

                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience



                     Accessibility

                     Interactivity

                         Design

                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
User Experience



                          ARIA

                      JavaScript

                           CSS

                         HTML
             BASIC                          ADVANCED

                     Browser Capabilities


                     Text & HTTP
User Experience




             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
Content
 is WHY
we build
websites
Clear,
well-written
prose is key.
Organize
 & prioritize
your content
Don’t
obscure
content.
Header

                       Nav
Features

                      Extra

                       Social
Programs
                    Newsletter



 News



           Footer
Header

Features               Nav

Programs              Extra

 News                 Social

                    Newsletter

           Footer
User Experience




                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
ADAPTIVE WEB DESIGN WORKSHOP




Semantics 101
 <p>HTML5 introduces several <em>really</em>
 useful elements and a ton of new APIs.</p>


 <p>Please fill out the form below.
 <strong>Note: all fields are required.</strong></p>


 <p>I like to work with markup languages because
 <strong>they are simple and easy to read</strong>.
 They also have that certain <i lang="fr" title="I
 don&#8217;t know what">je ne sais quoi</i>.</p>
ADAPTIVE WEB DESIGN WORKSHOP




Semantics 101




                               small
ADAPTIVE WEB DESIGN WORKSHOP




Semantics 101


                               hr
ADAPTIVE WEB DESIGN WORKSHOP




Organization
 <figure id="fig-1">
  <img src="photo.jpeg" alt=""/>
  <figcaption>Photo of Albert Einstein</figcaption>
 </figure>


 <figure id="fig-2">
  <table>
    <caption>2011 Forecast Earnings</caption>
    <!-- a bunch of data -->
  </table>
 </figure>
ADAPTIVE WEB DESIGN WORKSHOP




Organization
 <section>
  <!-- pretty much anything can go here -->
 </section>


 <article>
  <!-- pretty much anything can go here -->
 </article>
section
section > article
article
article > section
ADAPTIVE WEB DESIGN WORKSHOP




Organization
 <header>
  <!-- titles, etc. go here -->
 </header>


 <footer>
  <!-- meta/supplementary information goes here -->
 </footer>
header
footer
article
article > header
article
article > footer
ADAPTIVE WEB DESIGN WORKSHOP




Organization
 <nav>
  <ol>
    <li><a href="#details">Details</a></li>
    <li><a href="#lodging">Lodging</a></li>
    <li><a href="#location">Location</a></li>
    <li><a href="#topics">Topics</a></li>
    <li><a href="#contact">Contact Us</a></li>
  </ol>
  <p><a href="register">Register Now</a>
    <b>Only 5 spaces left</b></p>
 </nav>
nav
nav
ADAPTIVE WEB DESIGN WORKSHOP




Implicit sections (HTML4)
                               <h1> HTML5
                               <p> HTML5 is currently under development...
                               <p> Like its immediate predecessors, HTML...


                               <h2> W3C standardization process
                               <p> The Web Hypertext Application...
                               <p> The HTML5 specification...
                               <p> According to the W3C timetable...
                               <p> Ian Hickson, editor of the HTML5...


                               <h2> Markup
                               <p> HTML5 introduces a number of...
                               <p> The HTML5 syntax is no longer...




                                1 HTML5
                                1.1 W3C standardization process
                                1.2 Markup
ADAPTIVE WEB DESIGN WORKSHOP




Explicit sections (HTML5)
                                    <h1> HTML5
                                    <p> HTML5 is currently under development...
                                    <p> Like its immediate predecessors, HTML...


                                    <h2> W3C standardization process
                          section


                                    <p> The Web Hypertext Application...
                                    <p> The HTML5 specification...
                                    <p> According to the W3C timetable...
                                    <p> Ian Hickson, editor of the HTML5...


                                    <h2> Markup
                          section




                                    <p> HTML5 introduces a number of...
                                    <p> The HTML5 syntax is no longer...




                                     1 HTML5
                                     1.1 W3C standardization process
                                     1.2 Markup
ADAPTIVE WEB DESIGN WORKSHOP




Explicit sections (HTML5)
                                    <h1> HTML5
                                    <p> HTML5 is currently under development...
                                    <p> Like its immediate predecessors, HTML...


                                    <h1> W3C standardization process
                          section


                                    <p> The Web Hypertext Application...
                                    <p> The HTML5 specification...
                                    <p> According to the W3C timetable...
                                    <p> Ian Hickson, editor of the HTML5...


                                    <h1> Markup
                          section




                                    <p> HTML5 introduces a number of...
                                    <p> The HTML5 syntax is no longer...




                                     1 HTML5
                                     1.1 W3C standardization process
                                     1.2 Markup
ADAPTIVE WEB DESIGN WORKSHOP




Explicit sections (HTML5)
                                    <h1> HTML5
                                    <p> HTML5 is currently under development...
                                    <p> Like its immediate predecessors, HTML...


                                    <h4> W3C standardization process
                          section


                                    <p> The Web Hypertext Application...
                                    <p> The HTML5 specification...
                                    <p> According to the W3C timetable...
                                    <p> Ian Hickson, editor of the HTML5...


                                    <h6> Markup
                          section




                                    <p> HTML5 introduces a number of...
                                    <p> The HTML5 syntax is no longer...




                                     1 HTML5
                                     1.1 W3C standardization process
                                     1.2 Markup
ADAPTIVE WEB DESIGN WORKSHOP




    Sections
๏   section
๏   article
๏   aside
๏   footer
๏   header
๏   nav




                                   84
ADAPTIVE WEB DESIGN WORKSHOP




Outline limitations in HTML4
                               <h1> Title
                               <h2> Subtitle
                               <p> Text content continues...
                               <p> Text content continues...
                               <p> Text content continues...
                               <p> Text content continues...
                               <p> Text content continues...
                               <p> Text content continues...
                               <p> Text content continues...




                                1 Title
                                1.1 Subtitle
ADAPTIVE WEB DESIGN WORKSHOP




Heading groups (HTML5)

                          hgroup
                                   <h1> Title
                                   <h2> Subtitle
                                   <p> Text content continues...
                                   <p> Text content continues...
                                   <p> Text content continues...
                                   <p> Text content continues...
                                   <p> Text content continues...
                                   <p> Text content continues...
                                   <p> Text content continues...




                                    1 Title
ADAPTIVE WEB DESIGN WORKSHOP




Aside: rooted sections
                               <h1> Title
                               <p> Text content continues...
                               <p> Text content continues...


                               <h2> Section heading
                               <p> Text content continues...
                               <blockquote>
                                 <h2> Rooted heading
                                 <p> Text content continues...
                                 <p> Text content continues...
                               <p> Text content continues...
                               <p> Text content continues...




                                1 Title
                                1.1 Section heading
ADAPTIVE WEB DESIGN WORKSHOP




    Sectioning roots
๏   body
๏   blockquote
๏   details
๏   fieldset
๏   figure
๏   td




                                   88
ADAPTIVE WEB DESIGN WORKSHOP




Dates & Times
 <input type="date" name="dob"/>
ADAPTIVE WEB DESIGN WORKSHOP




Numbers
 <input type="number" name="foo"/>




 <input type="range" min="1" max="11" name="foo"/>
ADAPTIVE WEB DESIGN WORKSHOP




Format validation
 <input type="email" …/>       <input type="url" …/>
ADAPTIVE WEB DESIGN WORKSHOP




Format validation
 <input type="text"
        pattern="d{6}w{3}"
        placeholder="6 digits followed by 3 letters"
        .../>
Ad-hoc
Semantics
ADAPTIVE WEB DESIGN WORKSHOP




Classi cation
ADAPTIVE WEB DESIGN WORKSHOP




Identi cation
ADAPTIVE WEB DESIGN WORKSHOP




Microformats
 <section class="vcard">
  <figure>
    <img class="photo" src="aaron-gustafson.jpg" alt=""/>
  </figure>
  <h1 class="fn">Aaron Gustafson</h1>
  …
  <p>Aaron … is <b class="role">Group Manager</b> of the
    <a class="org" href="http://webstandards.org">Web
    Standards Project (WaSP)</a> ….</p>
 </section>
Header
ADAPTIVE WEB DESIGN WORKSHOP




Semantics
 <div id="header">
  <a href="#donate" class="donate-link"
     title="Click here to view our donation options">Donate</a>
  <a href="http://villagereach.org/feed/" class="rss-link"
     title="View our RSS Feed">RSS Feed</a>
  <div id="site-title">
    <a href="http://villagereach.org" title="Village Reach: Home">
     <span>Village Reach</span>
    </a>
  </div>
 </div><!-- #header -->
Features




Programs




 News
ADAPTIVE WEB DESIGN WORKSHOP




Semantics
 <div class="entry-content entry">
  <!-- Features -->
  <div class="boxes three home">
    <!-- Programs -->
  </div>
  <div id="latestNews">
    <!-- Latest News -->
  </div>
 </div>
Nav
ADAPTIVE WEB DESIGN WORKSHOP




Semantics
 <div id="hybrid-search-3" class="widget search widget-search">
  <div class="widget-inside">
    <form method="get" class="search-form" id="search-form"
 action="http://villagereach.org/">
      <!--Search Form -->
    </form><!-- .search-form -->
  </div>
 </div>
 <div id="navigation">
  <div id="page-nav" class="page-nav">
    <ul class="menu sf-menu">
      <!-- Navigation -->
    </ul>
  </div>
 </div><!-- #navigation -->
Extra

   Social


Newsletter
ADAPTIVE WEB DESIGN WORKSHOP




Semantics
 <div id="text-8" class="widget widget_text widget-widget_text">
  <div class="widget-inside">
    <!-- Extra -->
  </div>
 </div>
 <div id="text-7" class="widget widget_text widget-widget_text">
  <div class="widget-inside">
    <!-- Social -->
  </div>
 </div>
 <div id="mc_signup_container">
  <!-- Newsletter -->
 </div>
Footer
ADAPTIVE WEB DESIGN WORKSHOP




Semantics
 <div id="footer-container">
  <div id="footer">
    <p class="copyright">Copyright &#169; 2011 <a class="site-link"
 href="http://villagereach.org" title="VillageReach"
 rel="home"><span>VillageReach</span></a>. - All rights
 reserved.</p>
  </div><!-- #footer -->
 </div><!-- #footer-container -->
User Experience




                         Design

                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
ADAPTIVE WEB DESIGN WORKSHOP




Parsing errors


                               p{
                                 color: red;
                               }
ADAPTIVE WEB DESIGN WORKSHOP




Parsing errors


                               p{
                                 color: red;
                               }
ADAPTIVE WEB DESIGN WORKSHOP




Parsing errors


                               p{
                                 color: red;
                                 font-weight: bold;
                               }
ADAPTIVE WEB DESIGN WORKSHOP




Parsing errors


                               p{
                                 color: red;
                                 font-weight: bold;
                               }
ADAPTIVE WEB DESIGN WORKSHOP




Parsing errors
 p {
   color: #ccc;
   color: rgba( 0, 0, 0, .5 );
 }
ADAPTIVE WEB DESIGN WORKSHOP




Parsing errors
 html[lang] p {
   color: #ccc;
   color: rgba( 0, 0, 0, .5 );
 }
ADAPTIVE WEB DESIGN WORKSHOP




Parsing errors
 @-moz-document url-prefix() {
   html[lang] p {
     color: #ccc;
     color: rgba( 0, 0, 0, .5 );
   }
 }
#intro {
  /* Basic Layout */
}

/* ... */

body[id=css-zen-garden] #intro {
 /* Advanced Layout */
}
#intro {
  /* Basic Layout */
}

/* ... */

[foo], #intro {
  /* Advanced Layout */
}
ADAPTIVE WEB DESIGN WORKSHOP




Parsing errors
 @import 'not-for-IE7-or-below.css' screen;

 @media screen, print, refrigerator {
   /* IE will get these rules */
 }
ADAPTIVE WEB DESIGN WORKSHOP




Organization



                               design
ADAPTIVE WEB DESIGN WORKSHOP




Organization


                               type        color


                                  layout
ADAPTIVE WEB DESIGN WORKSHOP




Organization
 /* =Typography */
 img {
   display: block;
 }

 /* =Layout */
 @media screen {
   .frame .inner {
     border: 10px solid;
   }
 }

 /* =Color */
 .frame .inner {
   background-color: rgb(227, 222, 215);
   border-color: rgb(227, 222, 215);
 }
ADAPTIVE WEB DESIGN WORKSHOP




Organization

                  type.css




                 layout.css    main.css




                  color.css
ADAPTIVE WEB DESIGN WORKSHOP




Organization
 {embed="styles/typography"}

 @media screen {
   {embed="styles/layout-screen"}
 }

 {embed="styles/color"}
                                    Example using ExpressionEngine embed tags
ADAPTIVE WEB DESIGN WORKSHOP




Organization
 {embed="styles/reset"}

 {embed="styles/typography"}

 @media screen {
   {embed="styles/layout-screen"}
 }

 @media print {
   {embed="styles/layout-print"}
 }

 {embed="styles/color"}

 {embed="styles/effects"}
                                    Example using ExpressionEngine embed tags
ADAPTIVE WEB DESIGN WORKSHOP




Monkey-patching
 <link rel="stylesheet" href="main.css"/>
 <!--[if IE 9]><link rel="stylesheet" href="ie9.css"/><![endif]-->
 <!--[if lte IE 8]><link rel="stylesheet" href="ie8.css"/><![endif]-->
 <!--[if lte IE 7]><link rel="stylesheet" href="ie7.css"/><![endif]-->
 <!--[if lte IE 6]><link rel="stylesheet" href="ie6.css"/><![endif]-->
ADAPTIVE WEB DESIGN WORKSHOP




Monkey-patching
 @-moz-document url-prefix() {

       /* GENERATED CONTENT - FF3 doesn't allow positioning */
       #extra-mile:before {
          content: '';
       }
       #extra-mile:first-of-type:before {
          content: url(extra-mile-sign.png);
       }

 }
ADAPTIVE WEB DESIGN WORKSHOP




Media Queries
ADAPTIVE WEB DESIGN WORKSHOP




@Media blocks
 @media screen {
   /* Styles for screen media only */
 }
ADAPTIVE WEB DESIGN WORKSHOP




@Media blocks+
 @media screen and (max-width:450px) {
   /* Styles for screen media when browser
      is 450px wide or below */
 }
ADAPTIVE WEB DESIGN WORKSHOP




Don’t do this
 @media
   screen and (min-device-width:1024px)
          and (max-width:989px),
   screen and (max-device-width:480px),
   screen and (max-device-width:480px)
          and (orientation:landscape),
   screen and (min-device-width:481px)
          and (orientation:portrait) {
   /* Layout for narrower desktop (below 990px)
      or
      iPhone running iOS 3 (or equivalent)
      or
      iPhone running iOS 4 (or equivalent) in “landscape” view
      or
      iPad (or equivalent) in “portrait” view */
 }
ADAPTIVE WEB DESIGN WORKSHOP




Mobile First w/ media queries
 /* Universal Layout */

 @media screen {
   /* Styles for all screens */
 }

 @media screen and (min-width:481px) {
   /* Styles for all screens 480px+ width */
 }

 @media screen and (min-width:754px) {
   /* Styles for all screens 754px+ width */
 }
ADAPTIVE WEB DESIGN WORKSHOP




Mobile First w/ media queries
 #hd {
   background: url(hd-bg-small.png) repeat-x 50% 50%;
 }
 #hd .logo a {
   background: url(logo-small.png) no-repeat 50% 0;
   display: block;
   width: 240px;
   height: 109px;
   /* … */
 }
 @media screen and (min-width: 481px) {
   #hd {
     background: url(hd-bg.png) no-repeat 50% 52px;
   }
   #hd .logo a {
     background-image: url(logo.png);
     width: 342px;
     height: 155px;
   }
 }
Header

                       Nav
Features

                      Extra

                       Social
Programs
                    Newsletter



 News



           Footer
User Experience




                     Interactivity

                         Design

                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
Photo credit: spike55151
ADAPTIVE WEB DESIGN WORKSHOP




Sins of our past
 <a href="javascript:someFunction();">some text</a>


 <a href="javascript:void(null);"
    onclick="someFunction();">some text</a>


 <a href="#" onclick="someFunction();">some text</a>
ADAPTIVE WEB DESIGN WORKSHOP




A minor improvement
 <a href="http://offsite.com"
    onclick="newWin( this.href ); return false;">
    some text</a>
Photo credit: Giando
ADAPTIVE WEB DESIGN WORKSHOP




Event listeners
 window.onload = handleExternalLinks;

 function handleExternalLinks()
 {
   var server = document.location.hostname;
   var anchors = document.getElementsByTagName("a");
   var i, href;
   for( i=0; i < anchors.length; i++ )
   {
     href = anchors[i].href;
     if ( href.indexOf("http://" + server) == -1 &&
           href.indexOf("https://" + server) == -1 )
     {
        // HREF is not a file on my server
        anchors[i].onclick = function()
        {
           newWin( this.href );
        };
     }
   }
 }
Photo credit: hebedesign
ADAPTIVE WEB DESIGN WORKSHOP




Listen and delegate
 document
   .getElementsByTagName( 'body' )[0]
     .onclick = clickDelegator;

 function clickDelegator( e )
 {
   e = ( e ) ? e : event;
   var el = e.target || e.srcElement;
   // external links
   if ( el.nodeName.toLowerCase() == 'a' &&
        el.getAttribute( 'rel' ) == 'external' )
   {
      newWin( el.href );
   }
 }
Photo credit: ambery
Without JavaScript
With JavaScript
ADAPTIVE WEB DESIGN WORKSHOP




Anchor-include pattern
Source of blog entry page

 <a href="/archives/{entry_date format='%Y/%m/%d'}/{url_title}/
    comments/#comments"
    data-replace="/comments/{url_title}/">View comments on this
    entry and add your own</a>


 {if segment_4=="comments"}
     <section id="comments" class="focal">
     {embed="inc/.comments" url_title="{url_title}"}
     </section>
 {if:else}
     {comment_loader}
 {/if}
                                              Examples use ExpressionEngine tags
ADAPTIVE WEB DESIGN WORKSHOP




Anchor-include pattern
Source of /comments/{url_title} (technically /pages/comments/{url_title})

 {embed="inc/.comments" url_title="{segment_3}"}
                                                          Example uses ExpressionEngine tags
ADAPTIVE WEB DESIGN WORKSHOP




Anchor-include pattern
                                                                  https://gist.github.com/b976b67e88ffbfc9f125


 $.fn.ajaxInclude = function(){
      return this.each(function() {
           var $el               = $( this ),
                 target          = $el.data( 'target' ),
                 $targetEl       = target && $( target ) || $el,
                 methods         = [ 'append', 'replace', 'before', 'after' ],
                 ml              = methods.length,
                 method,
                 url;
           while ( ml-- ) {
                 method = methods[ ml ];
                 if ( $el.is( '[data-' + method + ']' ) ) {
                       url       = $el.data( method );
                       break;
                 }
           }
           if ( method == 'replace' ) { method += 'With'; }
           if ( url && method ) {
                 $.get( url, function( data ){
                       $el.trigger( 'ajaxInclude', [$targetEl, data] );
                       $targetEl[ method ]( data );
                 });
           }
      });
 };
ADAPTIVE WEB DESIGN WORKSHOP




Anchor-include pattern
Replace:
 <a data-replace="articles/latest/fragment"
    href="...">Latest Articles</a>


Before:
 <a data-before="articles/latest/fragment"
    href="...">Latest Articles</a>


After:
 <a data-after="articles/latest/fragment"
    href="...">Latest Articles</a>
ADAPTIVE WEB DESIGN WORKSHOP




Anchor-include pattern
 $("[data-append],[data-replace],”+
   “[data-after],[data-before]").ajaxInclude();
ADAPTIVE WEB DESIGN WORKSHOP




                               162
JavaScript
             CSS
ADAPTIVE WEB DESIGN WORKSHOP




Remember stu like this?
 <a href="foo.html"
    style="color:blue;"
    onmouseover="this.style.color='red'"
    onmouseout="this.style.color='blue'">Foo</a>
ADAPTIVE WEB DESIGN WORKSHOP




Remember stu like this?
 <a href="foo.html"
    style="color:blue;"
    onmouseover="this.style.color='red'"
    onmouseout="this.style.color='blue'">Foo</a>


 a, a:link, a:visited {
   color: blue;
 }
 a:hover {
   color: red;
 }
ADAPTIVE WEB DESIGN WORKSHOP




Isn’t this the same?
 for( i=0; i<objects.length; i++){
   objects[i].style.display = 'none';
 }
ADAPTIVE WEB DESIGN WORKSHOP




Small improvement
 for( i=0; i<objects.length; i++){
   objects[i].style.position = 'absolute';
   objects[i].style.left      = '-999em';
 }
ADAPTIVE WEB DESIGN WORKSHOP




Separation
  for( i=0; i<objects.length; i++){
    objects[i].addClassName( 'hidden' );
  }


  .hidden {
    position: absolute;
    left: -999em;
  }
ADAPTIVE WEB DESIGN WORKSHOP




    Maintenance options
๏   external style rules added to your CSS le (by hand)
๏   external CSS le added to the document (by hand)
๏   external CSS le added to the document via script
๏   embedding CSS in the document via script




                                                          168
ADAPTIVE WEB DESIGN WORKSHOP




Option 1: Add by hand
 /* =START WickedCool Script CSS (do not remove) */
 .wicked {
   color: red;
   font: bold 4em/2 "Comic Sans";
 }
 .cool {
   color: blue;
   font: bold 4em/2 "Comic Sans";
 }
 /* =END WickedCool Script CSS */
ADAPTIVE WEB DESIGN WORKSHOP




Option 2: Include by hand
  <script src="WickedCool.js"></script>
  <link rel="stylesheet" href="WickedCool.css" />
ADAPTIVE WEB DESIGN WORKSHOP




Option 2: Include by hand
  <script src="WickedCool.js"></script>
  <link rel="stylesheet" href="WickedCool.css" />


  <head>
    <!-- … -->
    <link rel="stylesheet" href="WickedCool.css" />
  </head>
  <body>
    <!-- … -->
    <script src="WickedCool.js"></script>
  </body>
ADAPTIVE WEB DESIGN WORKSHOP




Option 3: Scripted include
  function FindPath( filename )
  {
    var path = false;
    var scripts = document.getElementsByTagName( 'script' );
    for( var i=0; i<scripts.length; i++ )
    {
      if( scripts[i].getAttribute( 'src' ) &&
          scripts[i].getAttribute( 'src' )
                    .indexOf( filename ) != -1 )
      {
        path = scripts[i]
                 .getAttribute( 'src' )
                 .replace( new RegExp( filename ), '' );
        break;
      }
    }
    return path;
  }
ADAPTIVE WEB DESIGN WORKSHOP




Option 3: Scripted include
  var WickedCool = {
     jsFile:    'WickedCool.js',
     cssFile:   'WickedCool.css',
     initialize: function(){
       // determine the path
       var path = FindPath( this.jsFile );
       // add the CSS file
       var css = document.createElement( 'link' );
       css.setAttribute( 'rel', 'stylesheet' );
       css.setAttribute( 'href', path + this.cssFile );
       document.getElementsByTagName( 'head' )[0]
               .appendChild( css );
       // do the rest of the wicked cool stuff
     }
  };
ADAPTIVE WEB DESIGN WORKSHOP




Option 4: Scripted embed
  function addCSS( styles )
  {
    var el = document.createElement( 'style' );
         el.setAttribute( 'type', 'text/css' );
    if ( el.styleSheet )
    {
      el.styleSheet.cssText = styles;
    }
    else
    {
      el.appendChild( document.createTextNode( styles ) );
    }
    document.getElementsByTagName( 'head' )[0]
             .appendChild( el );
  }
ADAPTIVE WEB DESIGN WORKSHOP




Option 4: Scripted embed
  var WickedCool = {
     _css: '.wicked { color: red; ' +
           '          font: bold 4em/2 "Comic Sans"; } ' +
           '.cool { color: blue; ' +
           '        font: bold 4em/2' "Comic Sans"; }',
     initialize: function()
     {
       // add the CSS
       addCSS( this._css );
       // do the rest of the wicked cool stuff
     }
  };




                                              based on the work of Nicholas Zakas
Apply No Style
Before Its Time
ADAPTIVE WEB DESIGN WORKSHOP




How do we do that?
  .TabInterface-folder {
    /* ... */
  }


  #TabInterface .tab {
    /* ... */
  }
  #TabInterface .tab.active {
    /* ... */
  }




                                176
ADAPTIVE WEB DESIGN WORKSHOP




How do we do that?
               Tactic                Default        Activated


add “-on” to the class         .tabbed         .tabbed-on




add an activation class .auto-submit           .auto-submit.active



change the form of the
                               .replace-me     .replaced
class
ADAPTIVE WEB DESIGN WORKSHOP




Adaptive UI
ADAPTIVE WEB DESIGN WORKSHOP




Adaptive UI
ADAPTIVE WEB DESIGN WORKSHOP




Swapping content
 var trigger = 659;

 // …

 function toggleDisplay()
 {
     var width = $window.width();
     if ( showing == 'old' &&
           width <= trigger )
     {
          $old_nav.replaceWith($new_nav);
          showing = 'new';
     }
     else if ( showing == 'new' &&
                width > trigger )
     {
          $new_nav.replaceWith($old_nav);
          showing = 'old';
     }
 }
ADAPTIVE WEB DESIGN WORKSHOP




Semantics
 <ul>
  <li>
    <a href="#"><img src="…" alt="" /></a>
    <span>Your new online source for information
      on our progress</span>
  </li>
  <li>
    <a href="#"><img src="…" alt="" /></a>
    <span>VillageReach Announces Mozambique
      National Expansion</span>
  </li>
  <li>
    <a href="#"><img src="…" alt="" /></a>
    <span>VillageReach's innovative approach
      for last mile communities</span>
  </li>
  …
 </ul>
ADAPTIVE WEB DESIGN WORKSHOP




Style?
 <ul style=”height: 300px;”>
  <li style=”height: 300px;” >
    <a href="#"><img src="…" alt="" /></a>
    <span>Your new online source for information
      on our progress</span>
  </li>
  <li style=”height: 300px;” >
    <a href="#"><img src="…" alt="" /></a>
    <span>VillageReach Announces Mozambique
      National Expansion</span>
  </li>
  <li style=”height: 300px;” >
    <a href="#"><img src="…" alt="" /></a>
    <span>VillageReach's innovative approach
      for last mile communities</span>
  </li>
  …
 </ul>
ADAPTIVE WEB DESIGN WORKSHOP




Style?
 <ul class="jcarousel-skin-vr" style=”height: 300px;”>
  <li style=”height: 300px;”>
    <a href="#"><img src="…" alt="" /></a>
    <span>Your new online source for information
      on our progress</span>
  </li>
  <li style=”height: 300px;”>
    <a href="#"><img src="…" alt="" /></a>
    <span>VillageReach Announces Mozambique
      National Expansion</span>
  </li>
  <li style=”height: 300px;”>
    <a href="#"><img src="…" alt="" /></a>
    <span>VillageReach's innovative approach
      for last mile communities</span>
  </li>
  …
 </ul>
ADAPTIVE WEB DESIGN WORKSHOP




Script
 <ul id="vr-carousel">
  <li>
    <a href="#"><img src="…" alt="" /></a>
    <span>Your new online source for information
      on our progress</span>
  </li>
  <li>
    <a href="#"><img src="…" alt="" /></a>
    <span>VillageReach Announces Mozambique
      National Expansion</span>
  </li>
  <li>
    <a href="#"><img src="…" alt="" /></a>
    <span>VillageReach's innovative approach
      for last mile communities</span>
  </li>
  …
 </ul>
ADAPTIVE WEB DESIGN WORKSHOP




Script
 $j('#vr-carousel').jcarousel({
  auto: 6,
  visible: 1,
  animation: 0,
  wrap: 'both',
  scroll: 1,
  initCallback: vrCarousel_initCallback,
  itemFirstInCallback: vrCarousel_itemFirstInCallback,
  itemFirstInCallback: vrCarousel_fadeIn,
  itemFirstOutCallback: vrCarousel_fadeOut
 });
ADAPTIVE WEB DESIGN WORKSHOP




Script
 function vrCarousel_initCallback( carousel, item, idx, state )
 {
   // Pause autoscrolling if the user moves
   // with the cursor over the clip.
   carousel.clip.hover(function() {
       carousel.stopAuto();
   }, function() {
       carousel.startAuto();
   });

  $j('.jcarousel-item').css('opacity', 0);
 };
ADAPTIVE WEB DESIGN WORKSHOP




Script
 function vrCarousel_initCallback( carousel, item, idx, state )
 {
   var $i = carousel.list.find(‘img’), h = 0;

    // get the max h
    $i.each(function(){
     var test = $j(this).height();
     if ( test > h ){ h = test; }
    });

    // …

    carousel.list.height(h);
    $j('.jcarousel-item').css({
     opacity: 0, height: h
    });

 };
http://flex.madebymufffin.com
User Experience



                     Accessibility

                     Interactivity

                         Design

                      Semantics
             BASIC                          ADVANCED

                     Browser Capabilities


                        Content
Accessibility
“special needs”
    can be
 CONTEXTUAL
ADAPTIVE WEB DESIGN WORKSHOP




What is it?
ADAPTIVE WEB DESIGN WORKSHOP




What is it?




 <button>Tweet</button>

 <a class=”button”>Tweet</a>
ADAPTIVE WEB DESIGN WORKSHOP




What is it?




 <button>Tweet</button>

 <a class=”button”>Tweet</a>
ADAPTIVE WEB DESIGN WORKSHOP




What is it?
ADAPTIVE WEB DESIGN WORKSHOP




What is it?




 <button>Search Mail</button>

 <div>Search Mail</div>
ADAPTIVE WEB DESIGN WORKSHOP




What is it?




 <button>Search Mail</button>

 <div>Search Mail</div>
ADAPTIVE WEB DESIGN WORKSHOP




ARIA maps the OS to the web
Semantics+
ADAPTIVE WEB DESIGN WORKSHOP




All the web’s a play…
 <section id="main" role="main">
  <!-- The primary content for the page would go here -->
 </section>
<header role="banner">
<nav role="navigation">
<form role="search">
<section role="main">
<footer role="contentinfo">
<nav role="navigation">
<nav role="navigation">
ADAPTIVE WEB DESIGN WORKSHOP




Semantic comparison
             Ad-hoc                   ARIA Role               HTML5

 #header, #top                 banner                header (kind of)


 #main, #content               main                  none


 #extra, .sidebar              complementary, note   aside


 #footer, #bottom              contentinfo           footer


 #nav                          navigation            nav


 .hentry                       article               article
ADAPTIVE WEB DESIGN WORKSHOP




These are the droids you seek
 <span role="button">OK</span>


 <div role="alert">
  <p>Something went wrong.</p>
 </div>


 <div role="alertdialog">
  <p>Something went wrong.</p>
  <img src="x.png" alt="dismiss" role="button" />
 </div>
ADAPTIVE WEB DESIGN WORKSHOP




What is it?




 <a role=”button”>Tweet</a>
    class=”button”>Tweet</a>
ADAPTIVE WEB DESIGN WORKSHOP




What is it?




 <a role=”button”>Tweet</a>
ADAPTIVE WEB DESIGN WORKSHOP




What’s happening?

                               B       B
                               (off)   (on)




 <span>
  <img src="bold-off.png" alt="bold" />
 </span>
 <span>
  <img src="bold-on.png" alt="bold" />
 </span>
ADAPTIVE WEB DESIGN WORKSHOP




What’s happening?

                               B       B
                               (off)   (on)




 <span>
  <img src="bold-off.png" alt="not bold" />
 </span>
 <span>
  <img src="bold-on.png" alt="bold" />
 </span>
ADAPTIVE WEB DESIGN WORKSHOP




What’s happening?

                               B       B
                               (off)   (on)




 <span role="button" aria-pressed="false">
  <img src="bold-off.png" alt="not bold" />
 </span>
 <span role="button" aria-pressed="true">
  <img src="bold-on.png" alt="bold" />
 </span>
ADAPTIVE WEB DESIGN WORKSHOP




Complex interfaces
ADAPTIVE WEB DESIGN WORKSHOP




Traditional approach
 <h1>Pumpkin Pie</h1>
 <div class="container">
  <div class="section">
    <h2>Overview</h2>
    <img src="pie.jpg" alt="">
    <p>Whether you're hosting a festive party or a casual
    get-together with friends, our Pumpkin Pie will make
    entertaining easy!</p>
    <!-- ... -->
  </div>
  <!-- ... -->
  <ul class="tabs">
    <li><a href="#">Overview</a></li>
    <li><a href="#">Ingredients</a></li>
    <li><a href="#">Directions</a></li>
    <li><a href="#">Nutrition</a></li>
  </ul>
 </div>
ADAPTIVE WEB DESIGN WORKSHOP




Cleaner approach
 <h1>Pumpkin Pie</h1>
 <div class="tabbed">
  <h2>Overview</h2>
  <img src="pie.jpg" alt="" />
  <p>Whether you're hosting a festive party or a casual
  get-together with friends, our Pumpkin Pie will make
  entertaining easy!</p>
  <!-- ... -->
  <h2>Ingredients</h2>
  <ul>
    <li>1 (9<abbr title="inch">in</abbr>) unbaked deep
       dish pie crust</li>
    <li>½ cup white sugar</li>
    <!-- ... -->
  </ul>
  <h2>Directions</h2>
  <!-- ... -->
 </div>
ADAPTIVE WEB DESIGN WORKSHOP




Cleaner approach
 <h1>Pumpkin Pie</h1>
 <div class="tabbed">
  <h2>Overview</h2>
  <img src="pie.jpg" alt="" />
  <p>Whether you're hosting a festive party or a casual
  get-together with friends, our Pumpkin Pie will make
  entertaining easy!</p>
  <!-- ... -->
  <h2>Ingredients</h2>
  <ul>
    <li>1 (9<abbr title="inch">in</abbr>) unbaked deep
       dish pie crust</li>
    <li>½ cup white sugar</li>
    <!-- ... -->
  </ul>
  <h2>Directions</h2>
  <!-- ... -->
 </div>
ADAPTIVE WEB DESIGN WORKSHOP




No JS, basic CSS
ADAPTIVE WEB DESIGN WORKSHOP




Widget logic



               Split                 Page
          the content &
           make some
               tabs


                                     JS?
                               Yes          No
ADAPTIVE WEB DESIGN WORKSHOP




On DOM ready
 <h1>Pumpkin Pie</h1>
 <div class="tabbed-on">
  <section>
    <h2>Overview</h2>
    <img src="pie.jpg" alt="">
    <p>Whether you're hosting a festive party or a casual
    get-together with friends, our Pumpkin Pie will make
    entertaining easy!</p>
    <!-- ... -->
  </section>
  <!-- ... -->
  <ul class="tabs">
    <li><a href="#">Overview</a></li>
    <li><a href="#">Ingredients</a></li>
    <li><a href="#">Directions</a></li>
    <li><a href="#">Nutrition</a></li>
  </ul>
 </div>
ADAPTIVE WEB DESIGN WORKSHOP




Adding ARIA
                               role="tablist"




                                                232
ADAPTIVE WEB DESIGN WORKSHOP




Adding ARIA




               role="tab"
               aria-selected="true"
               aria-controls="folder-1"
ADAPTIVE WEB DESIGN WORKSHOP




Adding ARIA                    role="tab"
                               aria-selected="false"
                               aria-controls="folder-4"
ADAPTIVE WEB DESIGN WORKSHOP




Adding ARIA




                               role="tabpanel"
                               aria-hidden="false"
                               aria-labelledby="folder-1-tab"
ADAPTIVE WEB DESIGN WORKSHOP




Adding ARIA




                               role="application"
                               aria-activedescendant="folder-1"
ADAPTIVE WEB DESIGN WORKSHOP




Result!
ADAPTIVE WEB DESIGN WORKSHOP




Hey! Over here!
ADAPTIVE WEB DESIGN WORKSHOP




Hey! Over here!




 <input class="tweet-counter" value="140" disabled="disabled">
ADAPTIVE WEB DESIGN WORKSHOP




Hey! Over here!




 <span id="chars_left_notice" class="numeric">
  <strong id="status-field-char-counter"
        class="char-counter">140</strong>
 </span>
ADAPTIVE WEB DESIGN WORKSHOP




Hey! Over here!




 <span class="tweet-counter">140
  <b class="hidden"> characters remaining</b></span>


 .hidden {
   position: absolute;
   left: −999em;
 }
ADAPTIVE WEB DESIGN WORKSHOP




Hey! Over here!




 <span class="tweet-counter">maximum of 140 characters</span>



 <span class="tweet-counter">140
  <b class="hidden"> characters remaining</b></span>
ADAPTIVE WEB DESIGN WORKSHOP




Hey! Over here!




 <span aria-live="polite" aria-atomic="true"
       class="tweet-counter">140<b class="hidden">
       characters remaining</b></span>
ADAPTIVE WEB DESIGN WORKSHOP




Hey! Over here!
Photo credit: emilio labrador
ADAPTIVE WEB DESIGN WORKSHOP




Typical hiding schemes
                                                             Accessibility
 CSS Rules                     Display E ect
                                                             E ect
 visibility: hidden;           Element is hidden from        Content is ignored by screen
                               view, but is not removed      readers
                               from the normal ow (i.e. it
                               still takes up the space it
                               normally would)

 display: none;                Element is removed from       Content is ignored by screen
                               the normal ow and hidden;     readers
                               the space it occupied is
                               collapsed

 height: 0;                    Element is collapsed and      Content is ignored by screen
 width: 0;                     contents are hidden           readers
 overflow: hidden;
ADAPTIVE WEB DESIGN WORKSHOP




Typical hiding schemes
                                                             Accessibility
 CSS Rules                     Display E ect
                                                             E ect
 text-indent: -999em;          Contents are shifted o -      Screen readers have access
                               screen and hidden from        to the content, but the
                               view, but links may “focus”   content is limited to text and
                               oddly and negative indent     inline elements
                               may not prove long enough
                               to fully hide content


 position: absolute;           Content is removed from       Screen readers have access
 left: -999em;                 the normal ow and shifted     to the content
                               o the left-hand edge; the
                               space it occupied is
                               collapsed
ADAPTIVE WEB DESIGN WORKSHOP




Typical hiding schemes
                                                             Accessibility
 CSS Rules                     Display E ect
                                                             E ect
 position: absolute;           Content is positioned         Screen readers have access
 /* IE6, IE7 */                absolutely (and is removed    to the content
 clip: rect(
   1px 1px 1px 1px             from the normal ow), but
       );                      remains in place and is
 /* W3C */                     clipped to become invisible
 clip: rect(
   1px, 1px, 1px, 1px
       );
 padding: 0;
 border: 0;
 height: 1px;
 width: 1px;
 overflow: hidden;
ADAPTIVE WEB DESIGN WORKSHOP




Typical hiding schemes
                                                             Accessibility
 CSS Rules                     Display E ect
                                                             E ect
 visibility: hidden;           Element is hidden from        Content is ignored by screen
                               view, but is not removed      readers
                               from the normal ow (i.e. it
                               still takes up the space it
                               normally would)

 display: none;                Element is removed from       Content is ignored by screen
                               the normal ow and hidden;     readers
                               the space it occupied is
                               collapsed

 height: 0;                    Element is collapsed and      Content is ignored by screen
 width: 0;                     contents are hidden           readers
 overflow: hidden;
ADAPTIVE WEB DESIGN WORKSHOP




“Fixing” libraries
 (function(){
   var $button = $('#myButton'),
       $text = $('#myText'),
       visible = true;
   $button.click(function(){
    if ( visible ) {
      $text.slideUp('fast');
    } else {
      $text.slideDown('fast');
    }
    visible = ! visible;
   });
 })();
ADAPTIVE WEB DESIGN WORKSHOP




“Fixing” libraries
 (function(){
   var $button = $('#myButton'),
       $text = $('#myText'),
       visible = true;
   $button.click(function(){
    if ( visible ) {
      $text.slideUp('fast',function(){
         $text.addClass('accessibly-hidden')
             .slideDown(0);
       });
    } else {
      $text.slideUp(0,function(){
         $text.removeClass('accessibly-hidden')
             .slideDown('fast');
       });
    }
    visible = ! visible;
   });
 })();
photo by cfpg
ADAPTIVE WEB DESIGN WORKSHOP




Managing focus
 <div tabindex="0">
  <p>This <code>div</code> can now receive focus using a
 keyboard’s <kbd>tab</kbd> key. How cool is that?</p>
 </div>

 <div tabindex="-1">
  <p>This <code>div</code> won’t be focused by a user via the
 <kbd>tab</kbd> key, but JavaScript can <code>focus()</code> it.
 Nifty, huh?</p>
 </div>
Header
ADAPTIVE WEB DESIGN WORKSHOP




ARIA Roles
 <div id="header">
  <a href="#donate" class="donate-link"
     title="Click here to view our donation options">Donate</a>
  <a href="http://villagereach.org/feed/" class="rss-link"
     title="View our RSS Feed">RSS Feed</a>
  <div id="site-title">
    <a href="http://villagereach.org" title="Village Reach: Home">
     <span>Village Reach</span>
    </a>
  </div>
 </div><!-- #header -->
Features




Programs




 News
ADAPTIVE WEB DESIGN WORKSHOP




ARIA Roles
 <div class="entry-content entry">
  <!-- Features -->
  <div class="boxes three home">
    <!-- Programs -->
  </div>
  <div id="latestNews">
    <!-- Latest News -->
  </div>
 </div>
Nav
ADAPTIVE WEB DESIGN WORKSHOP




ARIA Roles
 <div id="hybrid-search-3" class="widget search widget-search">
  <div class="widget-inside">
    <form method="get" class="search-form" id="search-form"
 action="http://villagereach.org/">
      <!--Search Form -->
    </form><!-- .search-form -->
  </div>
 </div>
 <div id="navigation">
  <div id="page-nav" class="page-nav">
    <ul class="menu sf-menu">
      <!-- Navigation -->
    </ul>
  </div>
 </div><!-- #navigation -->
Extra

   Social


Newsletter
ADAPTIVE WEB DESIGN WORKSHOP




ARIA Roles
 <div id="text-8" class="widget widget_text widget-widget_text">
  <div class="widget-inside">
    <!-- Extra -->
  </div>
 </div>
 <div id="text-7" class="widget widget_text widget-widget_text">
  <div class="widget-inside">
    <!-- Social -->
  </div>
 </div>
 <div id="mc_signup_container">
  <!-- Newsletter -->
 </div>
Footer
ADAPTIVE WEB DESIGN WORKSHOP




ARIA Roles
 <div id="footer-container">
  <div id="footer">
    <p class="copyright">Copyright &#169; 2011 <a class="site-link"
 href="http://villagereach.org" title="VillageReach"
 rel="home"><span>VillageReach</span></a>. - All rights
 reserved.</p>
  </div><!-- #footer -->
 </div><!-- #footer-container -->
ADAPTIVE WEB DESIGN WORKSHOP




ARIA Roles & States
 <div class="jcarousel-container jcarousel-container-horizontal"
      style="display: block; ">
  <ul id="vr-carousel">
  <li>
    <a href="#"><img src="…" alt="" /></a>
    <span>Your new online source for information
     on our progress</span>
  </li>
  <li>
    <a href="#"><img src="…" alt="" /></a>
    <span>VillageReach Announces Mozambique
     National Expansion</span>
  </li>
  …
  </ul>
 </div>
ADAPTIVE WEB DESIGN WORKSHOP




ARIA Roles & States
 <div id="jcarousel-control">
  <div class="jcarousel-prev jcarousel-prev-horizontal"
        style="display: block; " disabled="false"></div>
  <span id="jcarousel-control-caption">
    VillageReach Announces Mozambique National Expansion
  </span>
  <div class="jcarousel-next jcarousel-next-horizontal"
        style="display: block; " disabled="false"></div>
 </div>
Adaptive Web Design
    Workshop
          by Aaron Gustafson



            More of the same:
     http://adaptivewebdesign.info
         http://easy-designs.net
      http://blog.easy-designs.net
      http://aaron-gustafson.com



             Slides available at
  http://slideshare.net/AaronGustafson



 © Aaron Gustafson. All Rights Reserved.

Weitere ähnliche Inhalte

Was ist angesagt?

IBM Portal Web intro
IBM Portal Web introIBM Portal Web intro
IBM Portal Web introdanisman
 
4Ward Company Presentation
4Ward Company Presentation4Ward Company Presentation
4Ward Company Presentation4Ward
 
WebSphere Portal Business Overview
WebSphere Portal Business OverviewWebSphere Portal Business Overview
WebSphere Portal Business OverviewJoel Demay
 
DPC2007 Zend Framework (Gaylord Aulke)
DPC2007 Zend Framework (Gaylord Aulke)DPC2007 Zend Framework (Gaylord Aulke)
DPC2007 Zend Framework (Gaylord Aulke)dpc
 
Seamless Integrations between WebCenter Content, Site Studio, and WebCenter S...
Seamless Integrations between WebCenter Content, Site Studio, and WebCenter S...Seamless Integrations between WebCenter Content, Site Studio, and WebCenter S...
Seamless Integrations between WebCenter Content, Site Studio, and WebCenter S...Brian Huff
 
Station Four: Web Redesign Presentation
Station Four: Web Redesign PresentationStation Four: Web Redesign Presentation
Station Four: Web Redesign Presentationcolberding
 
DPC2007 CodeGear, Delphi For PHP (Pawel Glowacki)
DPC2007 CodeGear, Delphi For PHP (Pawel Glowacki)DPC2007 CodeGear, Delphi For PHP (Pawel Glowacki)
DPC2007 CodeGear, Delphi For PHP (Pawel Glowacki)dpc
 
Websphere Portal
Websphere PortalWebsphere Portal
Websphere Portaldominion
 
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...Chris Sparshott
 
WebSphere Portal Technical Overview
WebSphere Portal Technical OverviewWebSphere Portal Technical Overview
WebSphere Portal Technical OverviewVincent Perrin
 
Ajax and Accessibiity
Ajax and AccessibiityAjax and Accessibiity
Ajax and AccessibiityMark Meeker
 
01 web sphere portal business overview
01 web sphere portal business overview01 web sphere portal business overview
01 web sphere portal business overviewygolani
 
Putting *Sparkle* in Your Social Applications! Customization and Branding wit...
Putting *Sparkle* in Your Social Applications! Customization and Branding wit...Putting *Sparkle* in Your Social Applications! Customization and Branding wit...
Putting *Sparkle* in Your Social Applications! Customization and Branding wit...Mitch Cohen
 

Was ist angesagt? (19)

Word camp nextweb
Word camp nextwebWord camp nextweb
Word camp nextweb
 
IBM Portal Web intro
IBM Portal Web introIBM Portal Web intro
IBM Portal Web intro
 
4Ward Company Presentation
4Ward Company Presentation4Ward Company Presentation
4Ward Company Presentation
 
WebSphere Portal Business Overview
WebSphere Portal Business OverviewWebSphere Portal Business Overview
WebSphere Portal Business Overview
 
About 4Ward
About 4WardAbout 4Ward
About 4Ward
 
JavaOne 2010 Keynote
JavaOne 2010 Keynote JavaOne 2010 Keynote
JavaOne 2010 Keynote
 
DPC2007 Zend Framework (Gaylord Aulke)
DPC2007 Zend Framework (Gaylord Aulke)DPC2007 Zend Framework (Gaylord Aulke)
DPC2007 Zend Framework (Gaylord Aulke)
 
IBM WebSphere Portal
IBM WebSphere PortalIBM WebSphere Portal
IBM WebSphere Portal
 
Web Sphere Portal
Web Sphere PortalWeb Sphere Portal
Web Sphere Portal
 
Seamless Integrations between WebCenter Content, Site Studio, and WebCenter S...
Seamless Integrations between WebCenter Content, Site Studio, and WebCenter S...Seamless Integrations between WebCenter Content, Site Studio, and WebCenter S...
Seamless Integrations between WebCenter Content, Site Studio, and WebCenter S...
 
Station Four: Web Redesign Presentation
Station Four: Web Redesign PresentationStation Four: Web Redesign Presentation
Station Four: Web Redesign Presentation
 
DPC2007 CodeGear, Delphi For PHP (Pawel Glowacki)
DPC2007 CodeGear, Delphi For PHP (Pawel Glowacki)DPC2007 CodeGear, Delphi For PHP (Pawel Glowacki)
DPC2007 CodeGear, Delphi For PHP (Pawel Glowacki)
 
Websphere Portal
Websphere PortalWebsphere Portal
Websphere Portal
 
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
 
RadPHP XE Datasheet
RadPHP XE DatasheetRadPHP XE Datasheet
RadPHP XE Datasheet
 
WebSphere Portal Technical Overview
WebSphere Portal Technical OverviewWebSphere Portal Technical Overview
WebSphere Portal Technical Overview
 
Ajax and Accessibiity
Ajax and AccessibiityAjax and Accessibiity
Ajax and Accessibiity
 
01 web sphere portal business overview
01 web sphere portal business overview01 web sphere portal business overview
01 web sphere portal business overview
 
Putting *Sparkle* in Your Social Applications! Customization and Branding wit...
Putting *Sparkle* in Your Social Applications! Customization and Branding wit...Putting *Sparkle* in Your Social Applications! Customization and Branding wit...
Putting *Sparkle* in Your Social Applications! Customization and Branding wit...
 

Ähnlich wie Adaptive Web Design Workshop [WebVisions NYC 2012]

HTML5 & CSS3 Workshop [FoWD NYC 2011]
HTML5 & CSS3 Workshop [FoWD NYC 2011]HTML5 & CSS3 Workshop [FoWD NYC 2011]
HTML5 & CSS3 Workshop [FoWD NYC 2011]Aaron Gustafson
 
WordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebWordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebGeorge Kanellopoulos
 
WHAT IS HTML5? (at CSS Nite Osaka)
WHAT IS HTML5? (at CSS Nite Osaka)WHAT IS HTML5? (at CSS Nite Osaka)
WHAT IS HTML5? (at CSS Nite Osaka)Shumpei Shiraishi
 
Progressive EEnhancement [EECI 2011]
Progressive EEnhancement [EECI 2011]Progressive EEnhancement [EECI 2011]
Progressive EEnhancement [EECI 2011]Aaron Gustafson
 
Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]
Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]
Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]Aaron Gustafson
 
HTML5 Smart Markup for Smarter Websites [FoWD NYC 2011]
HTML5 Smart Markup for Smarter Websites [FoWD NYC 2011]HTML5 Smart Markup for Smarter Websites [FoWD NYC 2011]
HTML5 Smart Markup for Smarter Websites [FoWD NYC 2011]Aaron Gustafson
 
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIsHTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIsGustaf Nilsson Kotte
 
qooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkqooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkecker
 
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]Aaron Gustafson
 
HTML5: Smart Markup for Smarter Websites [Future of Web Apps, Las Vegas 2011]
HTML5: Smart Markup for Smarter Websites [Future of Web Apps, Las Vegas 2011]HTML5: Smart Markup for Smarter Websites [Future of Web Apps, Las Vegas 2011]
HTML5: Smart Markup for Smarter Websites [Future of Web Apps, Las Vegas 2011]Aaron Gustafson
 
soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch
 
HTML5 Intoduction for Web Developers
HTML5 Intoduction for Web DevelopersHTML5 Intoduction for Web Developers
HTML5 Intoduction for Web DevelopersSascha Corti
 
No Feature Solutions with SharePoint
No Feature Solutions with SharePointNo Feature Solutions with SharePoint
No Feature Solutions with SharePointmikehuguet
 
Summit Australia 2019 - PowerApp Portals - Andrew Ly & Lachlan Wright
Summit Australia 2019 - PowerApp Portals - Andrew Ly & Lachlan WrightSummit Australia 2019 - PowerApp Portals - Andrew Ly & Lachlan Wright
Summit Australia 2019 - PowerApp Portals - Andrew Ly & Lachlan WrightAndrew Ly
 
Why You Need a Front End Developer
Why You Need a Front End DeveloperWhy You Need a Front End Developer
Why You Need a Front End DeveloperMike Wilcox
 
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)Saltlux zinyus
 

Ähnlich wie Adaptive Web Design Workshop [WebVisions NYC 2012] (20)

HTML5 & CSS3 Workshop [FoWD NYC 2011]
HTML5 & CSS3 Workshop [FoWD NYC 2011]HTML5 & CSS3 Workshop [FoWD NYC 2011]
HTML5 & CSS3 Workshop [FoWD NYC 2011]
 
Word camp nextweb
Word camp nextwebWord camp nextweb
Word camp nextweb
 
WordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWebWordCamp Thessaloniki2011 The NextWeb
WordCamp Thessaloniki2011 The NextWeb
 
WHAT IS HTML5? (at CSS Nite Osaka)
WHAT IS HTML5? (at CSS Nite Osaka)WHAT IS HTML5? (at CSS Nite Osaka)
WHAT IS HTML5? (at CSS Nite Osaka)
 
WHAT IS HTML5?(20100510)
WHAT IS HTML5?(20100510)WHAT IS HTML5?(20100510)
WHAT IS HTML5?(20100510)
 
Progressive EEnhancement [EECI 2011]
Progressive EEnhancement [EECI 2011]Progressive EEnhancement [EECI 2011]
Progressive EEnhancement [EECI 2011]
 
Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]
Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]
Crafting Rich Experiences with Progressive Enhancement [WebVisions 2011]
 
HTML5 Smart Markup for Smarter Websites [FoWD NYC 2011]
HTML5 Smart Markup for Smarter Websites [FoWD NYC 2011]HTML5 Smart Markup for Smarter Websites [FoWD NYC 2011]
HTML5 Smart Markup for Smarter Websites [FoWD NYC 2011]
 
What is HTML5
What is HTML5What is HTML5
What is HTML5
 
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIsHTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
 
qooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkqooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Framework
 
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
 
HTML5: Smart Markup for Smarter Websites [Future of Web Apps, Las Vegas 2011]
HTML5: Smart Markup for Smarter Websites [Future of Web Apps, Las Vegas 2011]HTML5: Smart Markup for Smarter Websites [Future of Web Apps, Las Vegas 2011]
HTML5: Smart Markup for Smarter Websites [Future of Web Apps, Las Vegas 2011]
 
soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5
 
HTML5 Intoduction for Web Developers
HTML5 Intoduction for Web DevelopersHTML5 Intoduction for Web Developers
HTML5 Intoduction for Web Developers
 
No Feature Solutions with SharePoint
No Feature Solutions with SharePointNo Feature Solutions with SharePoint
No Feature Solutions with SharePoint
 
web designing course bangalore
web designing course bangaloreweb designing course bangalore
web designing course bangalore
 
Summit Australia 2019 - PowerApp Portals - Andrew Ly & Lachlan Wright
Summit Australia 2019 - PowerApp Portals - Andrew Ly & Lachlan WrightSummit Australia 2019 - PowerApp Portals - Andrew Ly & Lachlan Wright
Summit Australia 2019 - PowerApp Portals - Andrew Ly & Lachlan Wright
 
Why You Need a Front End Developer
Why You Need a Front End DeveloperWhy You Need a Front End Developer
Why You Need a Front End Developer
 
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
전문가토크릴레이 1탄 html5 전망 (전종홍 박사)
 

Mehr von Aaron Gustafson

Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Aaron Gustafson
 
Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Aaron Gustafson
 
Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Aaron Gustafson
 
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Aaron Gustafson
 
Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Aaron Gustafson
 
Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Aaron Gustafson
 
Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Aaron Gustafson
 
Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Aaron Gustafson
 
Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]Aaron Gustafson
 
PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]Aaron Gustafson
 
Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Aaron Gustafson
 
Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Aaron Gustafson
 
Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]Aaron Gustafson
 
The Web Should Just Work for Everyone
The Web Should Just Work for EveryoneThe Web Should Just Work for Everyone
The Web Should Just Work for EveryoneAaron Gustafson
 
Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Aaron Gustafson
 
Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]Aaron Gustafson
 
Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Aaron Gustafson
 
Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Aaron Gustafson
 
Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Aaron Gustafson
 
Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Aaron Gustafson
 

Mehr von Aaron Gustafson (20)

Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]
 
Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]
 
Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]
 
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
 
Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?
 
Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]
 
Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]
 
Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]
 
Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]
 
PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]
 
Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]
 
Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]
 
Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]
 
The Web Should Just Work for Everyone
The Web Should Just Work for EveryoneThe Web Should Just Work for Everyone
The Web Should Just Work for Everyone
 
Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]
 
Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]
 
Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2
 
Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1
 
Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]
 
Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]
 

Kürzlich hochgeladen

Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 

Kürzlich hochgeladen (20)

Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 

Adaptive Web Design Workshop [WebVisions NYC 2012]

  • 2. ADAPTIVE WEB DESIGN WORKSHOP The Agenda ๏ Progressive Enhancement ‣ vs Graceful Degradation ‣ How & Why It Works ๏ Content & Organization ๏ Semantics ‣ HTML5 ‣ Microformats 2
  • 3. ADAPTIVE WEB DESIGN WORKSHOP The Agenda ๏ Design ‣ Parsing Errors ‣ Designing in Layers ‣ Adaptive (& Responsive) Layouts ‣ “Mobile First” ๏ Interactivity ‣ Unobtrusive JavaScript ‣ Adaptive Interfaces ‣ Hijax 3
  • 4. ADAPTIVE WEB DESIGN WORKSHOP The Agenda ๏ Accessibility ‣ Design Considerations ‣ ARIA 4
  • 5.
  • 8. ?
  • 10.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. HTML CSS
  • 19. fault tolerance n. a system’s ability to continue to operate when it encounters and unexpected error.
  • 20.
  • 21.
  • 22.
  • 23. Browsers IGNORE what they don’t understand
  • 25. Modern Browsers Older Browsers
  • 26. Modern Browsers Older Browsers
  • 31.
  • 32. :-)
  • 33.
  • 37. Don’t lose sight of your USERS
  • 38. User Experience BASIC ADVANCED Browser Capabilities
  • 39. User Experience BASIC ADVANCED Browser Capabilities Content
  • 40. User Experience Semantics BASIC ADVANCED Browser Capabilities Content
  • 41. User Experience Design Semantics BASIC ADVANCED Browser Capabilities Content
  • 42. User Experience Interactivity Design Semantics BASIC ADVANCED Browser Capabilities Content
  • 43. User Experience Accessibility Interactivity Design Semantics BASIC ADVANCED Browser Capabilities Content
  • 44. User Experience ARIA JavaScript CSS HTML BASIC ADVANCED Browser Capabilities Text & HTTP
  • 45. User Experience BASIC ADVANCED Browser Capabilities Content
  • 46. Content is WHY we build websites
  • 50.
  • 51. Header Nav Features Extra Social Programs Newsletter News Footer
  • 52. Header Features Nav Programs Extra News Social Newsletter Footer
  • 53. User Experience Semantics BASIC ADVANCED Browser Capabilities Content
  • 54.
  • 55. ADAPTIVE WEB DESIGN WORKSHOP Semantics 101 <p>HTML5 introduces several <em>really</em> useful elements and a ton of new APIs.</p> <p>Please fill out the form below. <strong>Note: all fields are required.</strong></p> <p>I like to work with markup languages because <strong>they are simple and easy to read</strong>. They also have that certain <i lang="fr" title="I don&#8217;t know what">je ne sais quoi</i>.</p>
  • 56. ADAPTIVE WEB DESIGN WORKSHOP Semantics 101 small
  • 57. ADAPTIVE WEB DESIGN WORKSHOP Semantics 101 hr
  • 58.
  • 59.
  • 60.
  • 61.
  • 62. ADAPTIVE WEB DESIGN WORKSHOP Organization <figure id="fig-1"> <img src="photo.jpeg" alt=""/> <figcaption>Photo of Albert Einstein</figcaption> </figure> <figure id="fig-2"> <table> <caption>2011 Forecast Earnings</caption> <!-- a bunch of data --> </table> </figure>
  • 63. ADAPTIVE WEB DESIGN WORKSHOP Organization <section> <!-- pretty much anything can go here --> </section> <article> <!-- pretty much anything can go here --> </article>
  • 64.
  • 67.
  • 70. ADAPTIVE WEB DESIGN WORKSHOP Organization <header> <!-- titles, etc. go here --> </header> <footer> <!-- meta/supplementary information goes here --> </footer>
  • 71.
  • 73.
  • 79. ADAPTIVE WEB DESIGN WORKSHOP Organization <nav> <ol> <li><a href="#details">Details</a></li> <li><a href="#lodging">Lodging</a></li> <li><a href="#location">Location</a></li> <li><a href="#topics">Topics</a></li> <li><a href="#contact">Contact Us</a></li> </ol> <p><a href="register">Register Now</a> <b>Only 5 spaces left</b></p> </nav>
  • 80.
  • 81. nav
  • 82.
  • 83. nav
  • 84.
  • 85. ADAPTIVE WEB DESIGN WORKSHOP Implicit sections (HTML4) <h1> HTML5 <p> HTML5 is currently under development... <p> Like its immediate predecessors, HTML... <h2> W3C standardization process <p> The Web Hypertext Application... <p> The HTML5 specification... <p> According to the W3C timetable... <p> Ian Hickson, editor of the HTML5... <h2> Markup <p> HTML5 introduces a number of... <p> The HTML5 syntax is no longer... 1 HTML5 1.1 W3C standardization process 1.2 Markup
  • 86. ADAPTIVE WEB DESIGN WORKSHOP Explicit sections (HTML5) <h1> HTML5 <p> HTML5 is currently under development... <p> Like its immediate predecessors, HTML... <h2> W3C standardization process section <p> The Web Hypertext Application... <p> The HTML5 specification... <p> According to the W3C timetable... <p> Ian Hickson, editor of the HTML5... <h2> Markup section <p> HTML5 introduces a number of... <p> The HTML5 syntax is no longer... 1 HTML5 1.1 W3C standardization process 1.2 Markup
  • 87. ADAPTIVE WEB DESIGN WORKSHOP Explicit sections (HTML5) <h1> HTML5 <p> HTML5 is currently under development... <p> Like its immediate predecessors, HTML... <h1> W3C standardization process section <p> The Web Hypertext Application... <p> The HTML5 specification... <p> According to the W3C timetable... <p> Ian Hickson, editor of the HTML5... <h1> Markup section <p> HTML5 introduces a number of... <p> The HTML5 syntax is no longer... 1 HTML5 1.1 W3C standardization process 1.2 Markup
  • 88. ADAPTIVE WEB DESIGN WORKSHOP Explicit sections (HTML5) <h1> HTML5 <p> HTML5 is currently under development... <p> Like its immediate predecessors, HTML... <h4> W3C standardization process section <p> The Web Hypertext Application... <p> The HTML5 specification... <p> According to the W3C timetable... <p> Ian Hickson, editor of the HTML5... <h6> Markup section <p> HTML5 introduces a number of... <p> The HTML5 syntax is no longer... 1 HTML5 1.1 W3C standardization process 1.2 Markup
  • 89. ADAPTIVE WEB DESIGN WORKSHOP Sections ๏ section ๏ article ๏ aside ๏ footer ๏ header ๏ nav 84
  • 90. ADAPTIVE WEB DESIGN WORKSHOP Outline limitations in HTML4 <h1> Title <h2> Subtitle <p> Text content continues... <p> Text content continues... <p> Text content continues... <p> Text content continues... <p> Text content continues... <p> Text content continues... <p> Text content continues... 1 Title 1.1 Subtitle
  • 91. ADAPTIVE WEB DESIGN WORKSHOP Heading groups (HTML5) hgroup <h1> Title <h2> Subtitle <p> Text content continues... <p> Text content continues... <p> Text content continues... <p> Text content continues... <p> Text content continues... <p> Text content continues... <p> Text content continues... 1 Title
  • 92. ADAPTIVE WEB DESIGN WORKSHOP Aside: rooted sections <h1> Title <p> Text content continues... <p> Text content continues... <h2> Section heading <p> Text content continues... <blockquote> <h2> Rooted heading <p> Text content continues... <p> Text content continues... <p> Text content continues... <p> Text content continues... 1 Title 1.1 Section heading
  • 93. ADAPTIVE WEB DESIGN WORKSHOP Sectioning roots ๏ body ๏ blockquote ๏ details ๏ fieldset ๏ figure ๏ td 88
  • 94.
  • 95. ADAPTIVE WEB DESIGN WORKSHOP Dates & Times <input type="date" name="dob"/>
  • 96. ADAPTIVE WEB DESIGN WORKSHOP Numbers <input type="number" name="foo"/> <input type="range" min="1" max="11" name="foo"/>
  • 97. ADAPTIVE WEB DESIGN WORKSHOP Format validation <input type="email" …/> <input type="url" …/>
  • 98. ADAPTIVE WEB DESIGN WORKSHOP Format validation <input type="text" pattern="d{6}w{3}" placeholder="6 digits followed by 3 letters" .../>
  • 100. ADAPTIVE WEB DESIGN WORKSHOP Classi cation
  • 101. ADAPTIVE WEB DESIGN WORKSHOP Identi cation
  • 102. ADAPTIVE WEB DESIGN WORKSHOP Microformats <section class="vcard"> <figure> <img class="photo" src="aaron-gustafson.jpg" alt=""/> </figure> <h1 class="fn">Aaron Gustafson</h1> … <p>Aaron … is <b class="role">Group Manager</b> of the <a class="org" href="http://webstandards.org">Web Standards Project (WaSP)</a> ….</p> </section>
  • 103.
  • 104.
  • 105.
  • 106. Header
  • 107. ADAPTIVE WEB DESIGN WORKSHOP Semantics <div id="header"> <a href="#donate" class="donate-link" title="Click here to view our donation options">Donate</a> <a href="http://villagereach.org/feed/" class="rss-link" title="View our RSS Feed">RSS Feed</a> <div id="site-title"> <a href="http://villagereach.org" title="Village Reach: Home"> <span>Village Reach</span> </a> </div> </div><!-- #header -->
  • 109. ADAPTIVE WEB DESIGN WORKSHOP Semantics <div class="entry-content entry"> <!-- Features --> <div class="boxes three home"> <!-- Programs --> </div> <div id="latestNews"> <!-- Latest News --> </div> </div>
  • 110. Nav
  • 111. ADAPTIVE WEB DESIGN WORKSHOP Semantics <div id="hybrid-search-3" class="widget search widget-search"> <div class="widget-inside"> <form method="get" class="search-form" id="search-form" action="http://villagereach.org/"> <!--Search Form --> </form><!-- .search-form --> </div> </div> <div id="navigation"> <div id="page-nav" class="page-nav"> <ul class="menu sf-menu"> <!-- Navigation --> </ul> </div> </div><!-- #navigation -->
  • 112. Extra Social Newsletter
  • 113. ADAPTIVE WEB DESIGN WORKSHOP Semantics <div id="text-8" class="widget widget_text widget-widget_text"> <div class="widget-inside"> <!-- Extra --> </div> </div> <div id="text-7" class="widget widget_text widget-widget_text"> <div class="widget-inside"> <!-- Social --> </div> </div> <div id="mc_signup_container"> <!-- Newsletter --> </div>
  • 114. Footer
  • 115. ADAPTIVE WEB DESIGN WORKSHOP Semantics <div id="footer-container"> <div id="footer"> <p class="copyright">Copyright &#169; 2011 <a class="site-link" href="http://villagereach.org" title="VillageReach" rel="home"><span>VillageReach</span></a>. - All rights reserved.</p> </div><!-- #footer --> </div><!-- #footer-container -->
  • 116. User Experience Design Semantics BASIC ADVANCED Browser Capabilities Content
  • 117. ADAPTIVE WEB DESIGN WORKSHOP Parsing errors p{ color: red; }
  • 118. ADAPTIVE WEB DESIGN WORKSHOP Parsing errors p{ color: red; }
  • 119. ADAPTIVE WEB DESIGN WORKSHOP Parsing errors p{ color: red; font-weight: bold; }
  • 120. ADAPTIVE WEB DESIGN WORKSHOP Parsing errors p{ color: red; font-weight: bold; }
  • 121. ADAPTIVE WEB DESIGN WORKSHOP Parsing errors p { color: #ccc; color: rgba( 0, 0, 0, .5 ); }
  • 122. ADAPTIVE WEB DESIGN WORKSHOP Parsing errors html[lang] p { color: #ccc; color: rgba( 0, 0, 0, .5 ); }
  • 123. ADAPTIVE WEB DESIGN WORKSHOP Parsing errors @-moz-document url-prefix() { html[lang] p { color: #ccc; color: rgba( 0, 0, 0, .5 ); } }
  • 124. #intro { /* Basic Layout */ } /* ... */ body[id=css-zen-garden] #intro { /* Advanced Layout */ }
  • 125. #intro { /* Basic Layout */ } /* ... */ [foo], #intro { /* Advanced Layout */ }
  • 126. ADAPTIVE WEB DESIGN WORKSHOP Parsing errors @import 'not-for-IE7-or-below.css' screen; @media screen, print, refrigerator { /* IE will get these rules */ }
  • 127. ADAPTIVE WEB DESIGN WORKSHOP Organization design
  • 128. ADAPTIVE WEB DESIGN WORKSHOP Organization type color layout
  • 129. ADAPTIVE WEB DESIGN WORKSHOP Organization /* =Typography */ img { display: block; } /* =Layout */ @media screen { .frame .inner { border: 10px solid; } } /* =Color */ .frame .inner { background-color: rgb(227, 222, 215); border-color: rgb(227, 222, 215); }
  • 130. ADAPTIVE WEB DESIGN WORKSHOP Organization type.css layout.css main.css color.css
  • 131. ADAPTIVE WEB DESIGN WORKSHOP Organization {embed="styles/typography"} @media screen {   {embed="styles/layout-screen"} } {embed="styles/color"} Example using ExpressionEngine embed tags
  • 132. ADAPTIVE WEB DESIGN WORKSHOP Organization {embed="styles/reset"} {embed="styles/typography"} @media screen {   {embed="styles/layout-screen"} } @media print {   {embed="styles/layout-print"} } {embed="styles/color"} {embed="styles/effects"} Example using ExpressionEngine embed tags
  • 133. ADAPTIVE WEB DESIGN WORKSHOP Monkey-patching <link rel="stylesheet" href="main.css"/> <!--[if IE 9]><link rel="stylesheet" href="ie9.css"/><![endif]--> <!--[if lte IE 8]><link rel="stylesheet" href="ie8.css"/><![endif]--> <!--[if lte IE 7]><link rel="stylesheet" href="ie7.css"/><![endif]--> <!--[if lte IE 6]><link rel="stylesheet" href="ie6.css"/><![endif]-->
  • 134. ADAPTIVE WEB DESIGN WORKSHOP Monkey-patching @-moz-document url-prefix() { /* GENERATED CONTENT - FF3 doesn't allow positioning */ #extra-mile:before { content: ''; } #extra-mile:first-of-type:before { content: url(extra-mile-sign.png); } }
  • 135. ADAPTIVE WEB DESIGN WORKSHOP Media Queries
  • 136. ADAPTIVE WEB DESIGN WORKSHOP @Media blocks @media screen { /* Styles for screen media only */ }
  • 137. ADAPTIVE WEB DESIGN WORKSHOP @Media blocks+ @media screen and (max-width:450px) { /* Styles for screen media when browser is 450px wide or below */ }
  • 138. ADAPTIVE WEB DESIGN WORKSHOP Don’t do this @media screen and (min-device-width:1024px) and (max-width:989px), screen and (max-device-width:480px), screen and (max-device-width:480px) and (orientation:landscape), screen and (min-device-width:481px) and (orientation:portrait) { /* Layout for narrower desktop (below 990px) or iPhone running iOS 3 (or equivalent) or iPhone running iOS 4 (or equivalent) in “landscape” view or iPad (or equivalent) in “portrait” view */ }
  • 139. ADAPTIVE WEB DESIGN WORKSHOP Mobile First w/ media queries /* Universal Layout */ @media screen { /* Styles for all screens */ } @media screen and (min-width:481px) { /* Styles for all screens 480px+ width */ } @media screen and (min-width:754px) { /* Styles for all screens 754px+ width */ }
  • 140.
  • 141.
  • 142.
  • 143.
  • 144. ADAPTIVE WEB DESIGN WORKSHOP Mobile First w/ media queries #hd { background: url(hd-bg-small.png) repeat-x 50% 50%; } #hd .logo a { background: url(logo-small.png) no-repeat 50% 0; display: block; width: 240px; height: 109px; /* … */ } @media screen and (min-width: 481px) { #hd { background: url(hd-bg.png) no-repeat 50% 52px; } #hd .logo a { background-image: url(logo.png); width: 342px; height: 155px; } }
  • 145. Header Nav Features Extra Social Programs Newsletter News Footer
  • 146.
  • 147. User Experience Interactivity Design Semantics BASIC ADVANCED Browser Capabilities Content
  • 149. ADAPTIVE WEB DESIGN WORKSHOP Sins of our past <a href="javascript:someFunction();">some text</a> <a href="javascript:void(null);" onclick="someFunction();">some text</a> <a href="#" onclick="someFunction();">some text</a>
  • 150. ADAPTIVE WEB DESIGN WORKSHOP A minor improvement <a href="http://offsite.com" onclick="newWin( this.href ); return false;"> some text</a>
  • 152. ADAPTIVE WEB DESIGN WORKSHOP Event listeners window.onload = handleExternalLinks; function handleExternalLinks() { var server = document.location.hostname; var anchors = document.getElementsByTagName("a"); var i, href; for( i=0; i < anchors.length; i++ ) { href = anchors[i].href; if ( href.indexOf("http://" + server) == -1 && href.indexOf("https://" + server) == -1 ) { // HREF is not a file on my server anchors[i].onclick = function() { newWin( this.href ); }; } } }
  • 154. ADAPTIVE WEB DESIGN WORKSHOP Listen and delegate document .getElementsByTagName( 'body' )[0] .onclick = clickDelegator; function clickDelegator( e ) { e = ( e ) ? e : event; var el = e.target || e.srcElement; // external links if ( el.nodeName.toLowerCase() == 'a' && el.getAttribute( 'rel' ) == 'external' ) { newWin( el.href ); } }
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 167. ADAPTIVE WEB DESIGN WORKSHOP Anchor-include pattern Source of blog entry page <a href="/archives/{entry_date format='%Y/%m/%d'}/{url_title}/ comments/#comments" data-replace="/comments/{url_title}/">View comments on this entry and add your own</a> {if segment_4=="comments"} <section id="comments" class="focal"> {embed="inc/.comments" url_title="{url_title}"} </section> {if:else} {comment_loader} {/if} Examples use ExpressionEngine tags
  • 168. ADAPTIVE WEB DESIGN WORKSHOP Anchor-include pattern Source of /comments/{url_title} (technically /pages/comments/{url_title}) {embed="inc/.comments" url_title="{segment_3}"} Example uses ExpressionEngine tags
  • 169. ADAPTIVE WEB DESIGN WORKSHOP Anchor-include pattern https://gist.github.com/b976b67e88ffbfc9f125 $.fn.ajaxInclude = function(){ return this.each(function() { var $el = $( this ), target = $el.data( 'target' ), $targetEl = target && $( target ) || $el, methods = [ 'append', 'replace', 'before', 'after' ], ml = methods.length, method, url; while ( ml-- ) { method = methods[ ml ]; if ( $el.is( '[data-' + method + ']' ) ) { url = $el.data( method ); break; } } if ( method == 'replace' ) { method += 'With'; } if ( url && method ) { $.get( url, function( data ){ $el.trigger( 'ajaxInclude', [$targetEl, data] ); $targetEl[ method ]( data ); }); } }); };
  • 170. ADAPTIVE WEB DESIGN WORKSHOP Anchor-include pattern Replace: <a data-replace="articles/latest/fragment" href="...">Latest Articles</a> Before: <a data-before="articles/latest/fragment" href="...">Latest Articles</a> After: <a data-after="articles/latest/fragment" href="...">Latest Articles</a>
  • 171. ADAPTIVE WEB DESIGN WORKSHOP Anchor-include pattern $("[data-append],[data-replace],”+ “[data-after],[data-before]").ajaxInclude();
  • 172. ADAPTIVE WEB DESIGN WORKSHOP 162
  • 173. JavaScript CSS
  • 174. ADAPTIVE WEB DESIGN WORKSHOP Remember stu like this? <a href="foo.html" style="color:blue;" onmouseover="this.style.color='red'" onmouseout="this.style.color='blue'">Foo</a>
  • 175. ADAPTIVE WEB DESIGN WORKSHOP Remember stu like this? <a href="foo.html" style="color:blue;" onmouseover="this.style.color='red'" onmouseout="this.style.color='blue'">Foo</a> a, a:link, a:visited { color: blue; } a:hover { color: red; }
  • 176. ADAPTIVE WEB DESIGN WORKSHOP Isn’t this the same? for( i=0; i<objects.length; i++){ objects[i].style.display = 'none'; }
  • 177. ADAPTIVE WEB DESIGN WORKSHOP Small improvement for( i=0; i<objects.length; i++){ objects[i].style.position = 'absolute'; objects[i].style.left = '-999em'; }
  • 178. ADAPTIVE WEB DESIGN WORKSHOP Separation for( i=0; i<objects.length; i++){ objects[i].addClassName( 'hidden' ); } .hidden { position: absolute; left: -999em; }
  • 179. ADAPTIVE WEB DESIGN WORKSHOP Maintenance options ๏ external style rules added to your CSS le (by hand) ๏ external CSS le added to the document (by hand) ๏ external CSS le added to the document via script ๏ embedding CSS in the document via script 168
  • 180. ADAPTIVE WEB DESIGN WORKSHOP Option 1: Add by hand /* =START WickedCool Script CSS (do not remove) */ .wicked { color: red; font: bold 4em/2 "Comic Sans"; } .cool { color: blue; font: bold 4em/2 "Comic Sans"; } /* =END WickedCool Script CSS */
  • 181. ADAPTIVE WEB DESIGN WORKSHOP Option 2: Include by hand <script src="WickedCool.js"></script> <link rel="stylesheet" href="WickedCool.css" />
  • 182. ADAPTIVE WEB DESIGN WORKSHOP Option 2: Include by hand <script src="WickedCool.js"></script> <link rel="stylesheet" href="WickedCool.css" /> <head> <!-- … --> <link rel="stylesheet" href="WickedCool.css" /> </head> <body> <!-- … --> <script src="WickedCool.js"></script> </body>
  • 183. ADAPTIVE WEB DESIGN WORKSHOP Option 3: Scripted include function FindPath( filename ) { var path = false; var scripts = document.getElementsByTagName( 'script' ); for( var i=0; i<scripts.length; i++ ) { if( scripts[i].getAttribute( 'src' ) && scripts[i].getAttribute( 'src' ) .indexOf( filename ) != -1 ) { path = scripts[i] .getAttribute( 'src' ) .replace( new RegExp( filename ), '' ); break; } } return path; }
  • 184. ADAPTIVE WEB DESIGN WORKSHOP Option 3: Scripted include var WickedCool = { jsFile: 'WickedCool.js', cssFile: 'WickedCool.css', initialize: function(){ // determine the path var path = FindPath( this.jsFile ); // add the CSS file var css = document.createElement( 'link' ); css.setAttribute( 'rel', 'stylesheet' ); css.setAttribute( 'href', path + this.cssFile ); document.getElementsByTagName( 'head' )[0] .appendChild( css ); // do the rest of the wicked cool stuff } };
  • 185. ADAPTIVE WEB DESIGN WORKSHOP Option 4: Scripted embed function addCSS( styles ) { var el = document.createElement( 'style' ); el.setAttribute( 'type', 'text/css' ); if ( el.styleSheet ) { el.styleSheet.cssText = styles; } else { el.appendChild( document.createTextNode( styles ) ); } document.getElementsByTagName( 'head' )[0] .appendChild( el ); }
  • 186. ADAPTIVE WEB DESIGN WORKSHOP Option 4: Scripted embed var WickedCool = { _css: '.wicked { color: red; ' + ' font: bold 4em/2 "Comic Sans"; } ' + '.cool { color: blue; ' + ' font: bold 4em/2' "Comic Sans"; }', initialize: function() { // add the CSS addCSS( this._css ); // do the rest of the wicked cool stuff } }; based on the work of Nicholas Zakas
  • 188. ADAPTIVE WEB DESIGN WORKSHOP How do we do that? .TabInterface-folder { /* ... */ } #TabInterface .tab { /* ... */ } #TabInterface .tab.active { /* ... */ } 176
  • 189. ADAPTIVE WEB DESIGN WORKSHOP How do we do that? Tactic Default Activated add “-on” to the class .tabbed .tabbed-on add an activation class .auto-submit .auto-submit.active change the form of the .replace-me .replaced class
  • 190. ADAPTIVE WEB DESIGN WORKSHOP Adaptive UI
  • 191. ADAPTIVE WEB DESIGN WORKSHOP Adaptive UI
  • 192. ADAPTIVE WEB DESIGN WORKSHOP Swapping content var trigger = 659; // … function toggleDisplay() { var width = $window.width(); if ( showing == 'old' && width <= trigger ) { $old_nav.replaceWith($new_nav); showing = 'new'; } else if ( showing == 'new' && width > trigger ) { $new_nav.replaceWith($old_nav); showing = 'old'; } }
  • 193.
  • 194.
  • 195.
  • 196.
  • 197. ADAPTIVE WEB DESIGN WORKSHOP Semantics <ul> <li> <a href="#"><img src="…" alt="" /></a> <span>Your new online source for information on our progress</span> </li> <li> <a href="#"><img src="…" alt="" /></a> <span>VillageReach Announces Mozambique National Expansion</span> </li> <li> <a href="#"><img src="…" alt="" /></a> <span>VillageReach's innovative approach for last mile communities</span> </li> … </ul>
  • 198. ADAPTIVE WEB DESIGN WORKSHOP Style? <ul style=”height: 300px;”> <li style=”height: 300px;” > <a href="#"><img src="…" alt="" /></a> <span>Your new online source for information on our progress</span> </li> <li style=”height: 300px;” > <a href="#"><img src="…" alt="" /></a> <span>VillageReach Announces Mozambique National Expansion</span> </li> <li style=”height: 300px;” > <a href="#"><img src="…" alt="" /></a> <span>VillageReach's innovative approach for last mile communities</span> </li> … </ul>
  • 199.
  • 200. ADAPTIVE WEB DESIGN WORKSHOP Style? <ul class="jcarousel-skin-vr" style=”height: 300px;”> <li style=”height: 300px;”> <a href="#"><img src="…" alt="" /></a> <span>Your new online source for information on our progress</span> </li> <li style=”height: 300px;”> <a href="#"><img src="…" alt="" /></a> <span>VillageReach Announces Mozambique National Expansion</span> </li> <li style=”height: 300px;”> <a href="#"><img src="…" alt="" /></a> <span>VillageReach's innovative approach for last mile communities</span> </li> … </ul>
  • 201. ADAPTIVE WEB DESIGN WORKSHOP Script <ul id="vr-carousel"> <li> <a href="#"><img src="…" alt="" /></a> <span>Your new online source for information on our progress</span> </li> <li> <a href="#"><img src="…" alt="" /></a> <span>VillageReach Announces Mozambique National Expansion</span> </li> <li> <a href="#"><img src="…" alt="" /></a> <span>VillageReach's innovative approach for last mile communities</span> </li> … </ul>
  • 202. ADAPTIVE WEB DESIGN WORKSHOP Script $j('#vr-carousel').jcarousel({ auto: 6, visible: 1, animation: 0, wrap: 'both', scroll: 1, initCallback: vrCarousel_initCallback, itemFirstInCallback: vrCarousel_itemFirstInCallback, itemFirstInCallback: vrCarousel_fadeIn, itemFirstOutCallback: vrCarousel_fadeOut });
  • 203. ADAPTIVE WEB DESIGN WORKSHOP Script function vrCarousel_initCallback( carousel, item, idx, state ) { // Pause autoscrolling if the user moves // with the cursor over the clip. carousel.clip.hover(function() { carousel.stopAuto(); }, function() { carousel.startAuto(); }); $j('.jcarousel-item').css('opacity', 0); };
  • 204. ADAPTIVE WEB DESIGN WORKSHOP Script function vrCarousel_initCallback( carousel, item, idx, state ) { var $i = carousel.list.find(‘img’), h = 0; // get the max h $i.each(function(){ var test = $j(this).height(); if ( test > h ){ h = test; } }); // … carousel.list.height(h); $j('.jcarousel-item').css({ opacity: 0, height: h }); };
  • 206. User Experience Accessibility Interactivity Design Semantics BASIC ADVANCED Browser Capabilities Content
  • 208. “special needs” can be CONTEXTUAL
  • 209.
  • 210.
  • 211.
  • 212. ADAPTIVE WEB DESIGN WORKSHOP What is it?
  • 213. ADAPTIVE WEB DESIGN WORKSHOP What is it? <button>Tweet</button> <a class=”button”>Tweet</a>
  • 214. ADAPTIVE WEB DESIGN WORKSHOP What is it? <button>Tweet</button> <a class=”button”>Tweet</a>
  • 215. ADAPTIVE WEB DESIGN WORKSHOP What is it?
  • 216. ADAPTIVE WEB DESIGN WORKSHOP What is it? <button>Search Mail</button> <div>Search Mail</div>
  • 217. ADAPTIVE WEB DESIGN WORKSHOP What is it? <button>Search Mail</button> <div>Search Mail</div>
  • 218. ADAPTIVE WEB DESIGN WORKSHOP ARIA maps the OS to the web
  • 220. ADAPTIVE WEB DESIGN WORKSHOP All the web’s a play… <section id="main" role="main"> <!-- The primary content for the page would go here --> </section>
  • 221.
  • 226.
  • 229.
  • 231. ADAPTIVE WEB DESIGN WORKSHOP Semantic comparison Ad-hoc ARIA Role HTML5 #header, #top banner header (kind of) #main, #content main none #extra, .sidebar complementary, note aside #footer, #bottom contentinfo footer #nav navigation nav .hentry article article
  • 232.
  • 233. ADAPTIVE WEB DESIGN WORKSHOP These are the droids you seek <span role="button">OK</span> <div role="alert"> <p>Something went wrong.</p> </div> <div role="alertdialog"> <p>Something went wrong.</p> <img src="x.png" alt="dismiss" role="button" /> </div>
  • 234. ADAPTIVE WEB DESIGN WORKSHOP What is it? <a role=”button”>Tweet</a> class=”button”>Tweet</a>
  • 235. ADAPTIVE WEB DESIGN WORKSHOP What is it? <a role=”button”>Tweet</a>
  • 236.
  • 237. ADAPTIVE WEB DESIGN WORKSHOP What’s happening? B B (off) (on) <span> <img src="bold-off.png" alt="bold" /> </span> <span> <img src="bold-on.png" alt="bold" /> </span>
  • 238. ADAPTIVE WEB DESIGN WORKSHOP What’s happening? B B (off) (on) <span> <img src="bold-off.png" alt="not bold" /> </span> <span> <img src="bold-on.png" alt="bold" /> </span>
  • 239. ADAPTIVE WEB DESIGN WORKSHOP What’s happening? B B (off) (on) <span role="button" aria-pressed="false"> <img src="bold-off.png" alt="not bold" /> </span> <span role="button" aria-pressed="true"> <img src="bold-on.png" alt="bold" /> </span>
  • 240. ADAPTIVE WEB DESIGN WORKSHOP Complex interfaces
  • 241. ADAPTIVE WEB DESIGN WORKSHOP Traditional approach <h1>Pumpkin Pie</h1> <div class="container"> <div class="section"> <h2>Overview</h2> <img src="pie.jpg" alt=""> <p>Whether you're hosting a festive party or a casual get-together with friends, our Pumpkin Pie will make entertaining easy!</p> <!-- ... --> </div> <!-- ... --> <ul class="tabs"> <li><a href="#">Overview</a></li> <li><a href="#">Ingredients</a></li> <li><a href="#">Directions</a></li> <li><a href="#">Nutrition</a></li> </ul> </div>
  • 242. ADAPTIVE WEB DESIGN WORKSHOP Cleaner approach <h1>Pumpkin Pie</h1> <div class="tabbed"> <h2>Overview</h2> <img src="pie.jpg" alt="" /> <p>Whether you're hosting a festive party or a casual get-together with friends, our Pumpkin Pie will make entertaining easy!</p> <!-- ... --> <h2>Ingredients</h2> <ul> <li>1 (9<abbr title="inch">in</abbr>) unbaked deep dish pie crust</li> <li>½ cup white sugar</li> <!-- ... --> </ul> <h2>Directions</h2> <!-- ... --> </div>
  • 243. ADAPTIVE WEB DESIGN WORKSHOP Cleaner approach <h1>Pumpkin Pie</h1> <div class="tabbed"> <h2>Overview</h2> <img src="pie.jpg" alt="" /> <p>Whether you're hosting a festive party or a casual get-together with friends, our Pumpkin Pie will make entertaining easy!</p> <!-- ... --> <h2>Ingredients</h2> <ul> <li>1 (9<abbr title="inch">in</abbr>) unbaked deep dish pie crust</li> <li>½ cup white sugar</li> <!-- ... --> </ul> <h2>Directions</h2> <!-- ... --> </div>
  • 244. ADAPTIVE WEB DESIGN WORKSHOP No JS, basic CSS
  • 245. ADAPTIVE WEB DESIGN WORKSHOP Widget logic Split Page the content & make some tabs JS? Yes No
  • 246. ADAPTIVE WEB DESIGN WORKSHOP On DOM ready <h1>Pumpkin Pie</h1> <div class="tabbed-on"> <section> <h2>Overview</h2> <img src="pie.jpg" alt=""> <p>Whether you're hosting a festive party or a casual get-together with friends, our Pumpkin Pie will make entertaining easy!</p> <!-- ... --> </section> <!-- ... --> <ul class="tabs"> <li><a href="#">Overview</a></li> <li><a href="#">Ingredients</a></li> <li><a href="#">Directions</a></li> <li><a href="#">Nutrition</a></li> </ul> </div>
  • 247. ADAPTIVE WEB DESIGN WORKSHOP Adding ARIA role="tablist" 232
  • 248. ADAPTIVE WEB DESIGN WORKSHOP Adding ARIA role="tab" aria-selected="true" aria-controls="folder-1"
  • 249. ADAPTIVE WEB DESIGN WORKSHOP Adding ARIA role="tab" aria-selected="false" aria-controls="folder-4"
  • 250. ADAPTIVE WEB DESIGN WORKSHOP Adding ARIA role="tabpanel" aria-hidden="false" aria-labelledby="folder-1-tab"
  • 251. ADAPTIVE WEB DESIGN WORKSHOP Adding ARIA role="application" aria-activedescendant="folder-1"
  • 252. ADAPTIVE WEB DESIGN WORKSHOP Result!
  • 253.
  • 254. ADAPTIVE WEB DESIGN WORKSHOP Hey! Over here!
  • 255. ADAPTIVE WEB DESIGN WORKSHOP Hey! Over here! <input class="tweet-counter" value="140" disabled="disabled">
  • 256. ADAPTIVE WEB DESIGN WORKSHOP Hey! Over here! <span id="chars_left_notice" class="numeric"> <strong id="status-field-char-counter" class="char-counter">140</strong> </span>
  • 257. ADAPTIVE WEB DESIGN WORKSHOP Hey! Over here! <span class="tweet-counter">140 <b class="hidden"> characters remaining</b></span> .hidden { position: absolute; left: −999em; }
  • 258. ADAPTIVE WEB DESIGN WORKSHOP Hey! Over here! <span class="tweet-counter">maximum of 140 characters</span> <span class="tweet-counter">140 <b class="hidden"> characters remaining</b></span>
  • 259. ADAPTIVE WEB DESIGN WORKSHOP Hey! Over here! <span aria-live="polite" aria-atomic="true" class="tweet-counter">140<b class="hidden"> characters remaining</b></span>
  • 260. ADAPTIVE WEB DESIGN WORKSHOP Hey! Over here!
  • 261. Photo credit: emilio labrador
  • 262. ADAPTIVE WEB DESIGN WORKSHOP Typical hiding schemes Accessibility CSS Rules Display E ect E ect visibility: hidden; Element is hidden from Content is ignored by screen view, but is not removed readers from the normal ow (i.e. it still takes up the space it normally would) display: none; Element is removed from Content is ignored by screen the normal ow and hidden; readers the space it occupied is collapsed height: 0; Element is collapsed and Content is ignored by screen width: 0; contents are hidden readers overflow: hidden;
  • 263. ADAPTIVE WEB DESIGN WORKSHOP Typical hiding schemes Accessibility CSS Rules Display E ect E ect text-indent: -999em; Contents are shifted o - Screen readers have access screen and hidden from to the content, but the view, but links may “focus” content is limited to text and oddly and negative indent inline elements may not prove long enough to fully hide content position: absolute; Content is removed from Screen readers have access left: -999em; the normal ow and shifted to the content o the left-hand edge; the space it occupied is collapsed
  • 264. ADAPTIVE WEB DESIGN WORKSHOP Typical hiding schemes Accessibility CSS Rules Display E ect E ect position: absolute; Content is positioned Screen readers have access /* IE6, IE7 */ absolutely (and is removed to the content clip: rect( 1px 1px 1px 1px from the normal ow), but ); remains in place and is /* W3C */ clipped to become invisible clip: rect( 1px, 1px, 1px, 1px ); padding: 0; border: 0; height: 1px; width: 1px; overflow: hidden;
  • 265. ADAPTIVE WEB DESIGN WORKSHOP Typical hiding schemes Accessibility CSS Rules Display E ect E ect visibility: hidden; Element is hidden from Content is ignored by screen view, but is not removed readers from the normal ow (i.e. it still takes up the space it normally would) display: none; Element is removed from Content is ignored by screen the normal ow and hidden; readers the space it occupied is collapsed height: 0; Element is collapsed and Content is ignored by screen width: 0; contents are hidden readers overflow: hidden;
  • 266. ADAPTIVE WEB DESIGN WORKSHOP “Fixing” libraries (function(){ var $button = $('#myButton'), $text = $('#myText'), visible = true; $button.click(function(){ if ( visible ) { $text.slideUp('fast'); } else { $text.slideDown('fast'); } visible = ! visible; }); })();
  • 267. ADAPTIVE WEB DESIGN WORKSHOP “Fixing” libraries (function(){ var $button = $('#myButton'), $text = $('#myText'), visible = true; $button.click(function(){ if ( visible ) { $text.slideUp('fast',function(){ $text.addClass('accessibly-hidden') .slideDown(0); }); } else { $text.slideUp(0,function(){ $text.removeClass('accessibly-hidden') .slideDown('fast'); }); } visible = ! visible; }); })();
  • 269. ADAPTIVE WEB DESIGN WORKSHOP Managing focus <div tabindex="0"> <p>This <code>div</code> can now receive focus using a keyboard’s <kbd>tab</kbd> key. How cool is that?</p> </div> <div tabindex="-1"> <p>This <code>div</code> won’t be focused by a user via the <kbd>tab</kbd> key, but JavaScript can <code>focus()</code> it. Nifty, huh?</p> </div>
  • 270. Header
  • 271. ADAPTIVE WEB DESIGN WORKSHOP ARIA Roles <div id="header"> <a href="#donate" class="donate-link" title="Click here to view our donation options">Donate</a> <a href="http://villagereach.org/feed/" class="rss-link" title="View our RSS Feed">RSS Feed</a> <div id="site-title"> <a href="http://villagereach.org" title="Village Reach: Home"> <span>Village Reach</span> </a> </div> </div><!-- #header -->
  • 273. ADAPTIVE WEB DESIGN WORKSHOP ARIA Roles <div class="entry-content entry"> <!-- Features --> <div class="boxes three home"> <!-- Programs --> </div> <div id="latestNews"> <!-- Latest News --> </div> </div>
  • 274. Nav
  • 275. ADAPTIVE WEB DESIGN WORKSHOP ARIA Roles <div id="hybrid-search-3" class="widget search widget-search"> <div class="widget-inside"> <form method="get" class="search-form" id="search-form" action="http://villagereach.org/"> <!--Search Form --> </form><!-- .search-form --> </div> </div> <div id="navigation"> <div id="page-nav" class="page-nav"> <ul class="menu sf-menu"> <!-- Navigation --> </ul> </div> </div><!-- #navigation -->
  • 276. Extra Social Newsletter
  • 277. ADAPTIVE WEB DESIGN WORKSHOP ARIA Roles <div id="text-8" class="widget widget_text widget-widget_text"> <div class="widget-inside"> <!-- Extra --> </div> </div> <div id="text-7" class="widget widget_text widget-widget_text"> <div class="widget-inside"> <!-- Social --> </div> </div> <div id="mc_signup_container"> <!-- Newsletter --> </div>
  • 278. Footer
  • 279. ADAPTIVE WEB DESIGN WORKSHOP ARIA Roles <div id="footer-container"> <div id="footer"> <p class="copyright">Copyright &#169; 2011 <a class="site-link" href="http://villagereach.org" title="VillageReach" rel="home"><span>VillageReach</span></a>. - All rights reserved.</p> </div><!-- #footer --> </div><!-- #footer-container -->
  • 280.
  • 281. ADAPTIVE WEB DESIGN WORKSHOP ARIA Roles & States <div class="jcarousel-container jcarousel-container-horizontal" style="display: block; "> <ul id="vr-carousel"> <li> <a href="#"><img src="…" alt="" /></a> <span>Your new online source for information on our progress</span> </li> <li> <a href="#"><img src="…" alt="" /></a> <span>VillageReach Announces Mozambique National Expansion</span> </li> … </ul> </div>
  • 282. ADAPTIVE WEB DESIGN WORKSHOP ARIA Roles & States <div id="jcarousel-control"> <div class="jcarousel-prev jcarousel-prev-horizontal" style="display: block; " disabled="false"></div> <span id="jcarousel-control-caption"> VillageReach Announces Mozambique National Expansion </span> <div class="jcarousel-next jcarousel-next-horizontal" style="display: block; " disabled="false"></div> </div>
  • 283. Adaptive Web Design Workshop by Aaron Gustafson More of the same: http://adaptivewebdesign.info http://easy-designs.net http://blog.easy-designs.net http://aaron-gustafson.com Slides available at http://slideshare.net/AaronGustafson © Aaron Gustafson. All Rights Reserved.