Repository: mdn/learning-area Branch: main Commit: 6e1054d34402 Files: 828 Total size: 1.6 MB Directory structure: gitextract_a46r8vfx/ ├── .github/ │ └── CODEOWNERS ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── .vscode/ │ ├── cspell.json │ ├── extensions.json │ └── project-words.txt ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── SECURITY.md ├── accessibility/ │ ├── aria/ │ │ ├── aria-div-buttons.html │ │ ├── aria-live.html │ │ ├── aria-no-live.html │ │ ├── aria-tabbed-info-box.html │ │ ├── form-validation-checkbox-disabled.html │ │ ├── form-validation-updated.html │ │ ├── quotes.json │ │ ├── validation-checkbox-disabled.js │ │ ├── validation.js │ │ ├── website-aria-roles/ │ │ │ ├── index.html │ │ │ └── style.css │ │ └── website-no-roles/ │ │ ├── index.html │ │ └── style.css │ ├── assessment-finished/ │ │ ├── index.html │ │ ├── main.js │ │ ├── marking-guide.md │ │ ├── media/ │ │ │ └── bear.ogg │ │ ├── style.css │ │ └── transcript.html │ ├── assessment-start/ │ │ ├── assessment-files/ │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ ├── media/ │ │ │ │ └── bear.ogg │ │ │ └── style.css │ │ ├── index.html │ │ ├── main.js │ │ ├── media/ │ │ │ └── bear.ogg │ │ └── style.css │ ├── css/ │ │ ├── form-css.html │ │ ├── form-validation.html │ │ ├── mouse-and-keyboard-events.html │ │ ├── table-css.html │ │ └── validation.js │ ├── html/ │ │ ├── accessible-image.html │ │ ├── bad-form.html │ │ ├── bad-links.html │ │ ├── bad-semantics.html │ │ ├── bad-table.html │ │ ├── dino-info.html │ │ ├── good-form.html │ │ ├── good-links.html │ │ ├── good-semantics.html │ │ ├── native-keyboard-accessibility.html │ │ ├── style.css │ │ └── table-layout.html │ ├── mobile/ │ │ ├── common-job-types.html │ │ ├── html5-form-examples.html │ │ ├── multi-control-box-drag.html │ │ ├── simple-box-drag.html │ │ └── simple-button-example.html │ ├── multimedia/ │ │ ├── audio-transcript-ui/ │ │ │ ├── index.html │ │ │ └── main.js │ │ ├── custom-controls-OOJS/ │ │ │ ├── index.html │ │ │ └── main.js │ │ ├── custom-controls-basic/ │ │ │ ├── index.html │ │ │ └── main.js │ │ ├── custom-controls-start.html │ │ ├── custom-controls.css │ │ ├── native-controls.html │ │ ├── rabbit320.webm │ │ └── viper.ogg │ └── tasks/ │ ├── html-css/ │ │ ├── aria/ │ │ │ ├── aria1-download.html │ │ │ ├── aria1.html │ │ │ ├── aria2-download.html │ │ │ ├── aria2.html │ │ │ └── marking.md │ │ ├── css/ │ │ │ ├── css-a11y1-download.html │ │ │ ├── css-a11y1.html │ │ │ ├── css-a11y2-download.html │ │ │ ├── css-a11y2.html │ │ │ └── marking.md │ │ ├── html/ │ │ │ ├── html-a11y1-download.html │ │ │ ├── html-a11y1.html │ │ │ ├── html-a11y2-download.html │ │ │ ├── html-a11y2.html │ │ │ ├── html-a11y3-download.html │ │ │ ├── html-a11y3.html │ │ │ ├── html-a11y4-download.html │ │ │ ├── html-a11y4.html │ │ │ └── marking.md │ │ ├── playable.js │ │ └── styles.css │ └── js/ │ ├── aria/ │ │ └── aria-js1-download.html │ ├── js/ │ │ └── js1-download.html │ ├── playable.js │ └── styles.css ├── css/ │ ├── css-layout/ │ │ ├── flexbox/ │ │ │ ├── complex-flexbox.html │ │ │ ├── flex-align0.html │ │ │ ├── flex-align1.html │ │ │ ├── flex-ordering.html │ │ │ ├── flexbox-wrap0.html │ │ │ ├── flexbox-wrap1.html │ │ │ ├── flexbox0.html │ │ │ ├── flexbox1.html │ │ │ └── flexbox2.html │ │ ├── floats/ │ │ │ ├── 0_two-column-layout.html │ │ │ ├── 1-basic-example.html │ │ │ ├── 1_three-column-layout.html │ │ │ ├── 2-line-boxes.html │ │ │ ├── 2_float-disaster.html │ │ │ ├── 2a_fixed-by-clear.html │ │ │ ├── 3-clearing.html │ │ │ ├── 3_broken-layout.html │ │ │ ├── 4-clearfix.html │ │ │ ├── 4_fixed-layout-border-box.html │ │ │ ├── 5-overflow.html │ │ │ ├── 5_fixed-height-columns.html │ │ │ ├── 6-flow-root.html │ │ │ ├── fixed-layout-adjusted-percentages.html │ │ │ ├── simple-float.html │ │ │ ├── three-column-layout-wrong-order.html │ │ │ └── two-column-layout-fixed.html │ │ ├── fundamental-layout-comprehension/ │ │ │ ├── index.html │ │ │ └── styles.css │ │ ├── fundamental-layout-comprehension-finish/ │ │ │ ├── index.html │ │ │ ├── marking-guide.md │ │ │ └── styles.css │ │ ├── grids/ │ │ │ ├── 0-starting-point.html │ │ │ ├── 1-fixed-columns.html │ │ │ ├── 10-template-completed.html │ │ │ ├── 11-grid-system-starting-point.html │ │ │ ├── 12-grid-system-completed.html │ │ │ ├── 2-fr-tracks.html │ │ │ ├── 3-gaps.html │ │ │ ├── 4-repeat.html │ │ │ ├── 5-auto-rows.html │ │ │ ├── 6-min-max.html │ │ │ ├── 7-auto-fill.html │ │ │ ├── 8-placement-starting-point.html │ │ │ ├── 9-placement-completed.html │ │ │ ├── css-grid-finished.html │ │ │ ├── css-grid.html │ │ │ ├── css-tables-as-grid.html │ │ │ ├── flexbox-grid.html │ │ │ ├── fluid-grid-calc.html │ │ │ ├── fluid-grid-offset.html │ │ │ ├── fluid-grid.html │ │ │ ├── html-skeleton-finished.html │ │ │ ├── html-skeleton.html │ │ │ ├── normalize.css │ │ │ ├── simple-grid-finished.html │ │ │ ├── simple-grid.html │ │ │ └── skeleton.css │ │ ├── multicol/ │ │ │ ├── 0-starting-point.html │ │ │ ├── 1-simple-example.html │ │ │ ├── 2-simple-example-width.html │ │ │ ├── 3-gaps-rules.html │ │ │ └── 4-breaking.html │ │ ├── positioning/ │ │ │ ├── 0_basic-flow.html │ │ │ ├── 1_static-positioning.html │ │ │ ├── 2_relative-positioning.html │ │ │ ├── 3_absolute-positioning.html │ │ │ ├── 4_positioning-context.html │ │ │ ├── 5_z-index.html │ │ │ ├── 6_fixed-positioning.html │ │ │ └── 7_sticky-positioning.html │ │ ├── practical-positioning-examples/ │ │ │ ├── fixed-info-box.html │ │ │ ├── hidden-info-panel-start.html │ │ │ ├── hidden-info-panel.html │ │ │ ├── tabbed-info-box-start.html │ │ │ ├── tabbed-info-box.html │ │ │ └── tabs-manual.js │ │ └── stacking-and-float/ │ │ └── index.html │ ├── introduction-to-css/ │ │ ├── box-model/ │ │ │ ├── app/ │ │ │ │ └── sass │ │ │ ├── index.html │ │ │ └── style.css │ │ ├── cascade-and-inheritance/ │ │ │ ├── index.html │ │ │ └── style.css │ │ ├── css-selectors/ │ │ │ ├── combinators.html │ │ │ ├── index.html │ │ │ └── style.css │ │ ├── css-values-and-units/ │ │ │ ├── index.html │ │ │ └── style.css │ │ ├── debugging-css/ │ │ │ ├── index.html │ │ │ └── style.css │ │ ├── debugging-css-finished/ │ │ │ ├── index.html │ │ │ └── style.css │ │ ├── fundamental-css-comprehension/ │ │ │ ├── index.html │ │ │ └── style-resources.txt │ │ ├── fundamental-css-comprehension-finished/ │ │ │ ├── index.html │ │ │ ├── marking-guide.md │ │ │ └── style.css │ │ └── how-css-works/ │ │ ├── index.html │ │ └── style.css │ ├── styling-boxes/ │ │ ├── advanced_box_effects/ │ │ │ ├── background-clip-text.html │ │ │ ├── blend-modes.html │ │ │ ├── box-shadow.html │ │ │ └── filters.html │ │ ├── backgrounds/ │ │ │ ├── background-attachment.css │ │ │ ├── background-attachment.html │ │ │ ├── index.html │ │ │ └── repeating-background.html │ │ ├── borders/ │ │ │ ├── border-image.html │ │ │ ├── border-longhand.html │ │ │ └── rounded-corners.html │ │ ├── box-model-recap/ │ │ │ ├── box-sizing-example.css │ │ │ ├── box-sizing-example.html │ │ │ ├── css-tables-example.html │ │ │ ├── flexbox-example.html │ │ │ ├── min-max-container.css │ │ │ ├── min-max-container.html │ │ │ ├── min-max-image-container.css │ │ │ └── min-max-image-container.html │ │ ├── cool-information-box-finished/ │ │ │ ├── index.html │ │ │ ├── marking-guide.md │ │ │ └── style.css │ │ ├── cool-information-box-start/ │ │ │ ├── index.html │ │ │ └── style.css │ │ ├── letterheaded-paper-finished/ │ │ │ ├── index.html │ │ │ ├── marking-guide.md │ │ │ └── style.css │ │ ├── letterheaded-paper-start/ │ │ │ ├── index.html │ │ │ └── style.css │ │ └── styling-tables/ │ │ ├── punk-bands-complete.html │ │ ├── punk-bands-unstyled.html │ │ └── style.css │ └── styling-text/ │ ├── fundamentals/ │ │ └── index.html │ ├── styling-links/ │ │ ├── default-styles.html │ │ ├── external-link-icon.html │ │ ├── link-buttons.html │ │ └── styled-links.html │ ├── styling-lists/ │ │ ├── index.html │ │ └── unstyled-list.html │ ├── typesetting-a-homepage-finished/ │ │ ├── index.html │ │ ├── marking-guide.md │ │ ├── original-font-files/ │ │ │ ├── Lovato Light-Webfont/ │ │ │ │ ├── Licenses/ │ │ │ │ │ └── Webfont EULA 1.6.txt │ │ │ │ ├── Reference/ │ │ │ │ │ └── How_to_use_webfonts.html │ │ │ │ └── Webfonts/ │ │ │ │ └── lovato_light_macroman/ │ │ │ │ ├── Lovato-Light-demo.html │ │ │ │ ├── specimen_files/ │ │ │ │ │ ├── easytabs.js │ │ │ │ │ ├── grid_12-825-55-15.css │ │ │ │ │ └── specimen_stylesheet.css │ │ │ │ └── stylesheet.css │ │ │ ├── josefin-slab/ │ │ │ │ └── SIL Open Font License.txt │ │ │ └── webfontkit-20160419-074110/ │ │ │ ├── generator_config.txt │ │ │ ├── josefinslab-bold-demo.html │ │ │ ├── specimen_files/ │ │ │ │ ├── grid_12-825-55-15.css │ │ │ │ └── specimen_stylesheet.css │ │ │ └── stylesheet.css │ │ └── style.css │ ├── typesetting-a-homepage-start/ │ │ ├── index.html │ │ └── style.css │ └── web-fonts/ │ ├── fonts/ │ │ ├── cicle_fina-demo.html │ │ ├── generator_config.txt │ │ ├── specimen_files/ │ │ │ ├── grid_12-825-55-15.css │ │ │ └── specimen_stylesheet.css │ │ ├── stylesheet.css │ │ └── zantroke-demo.html │ ├── google-font.css │ ├── google-font.html │ ├── web-font-finished.css │ ├── web-font-finished.html │ ├── web-font-start.css │ ├── web-font-start.html │ └── zantroke/ │ ├── SIL Open Font License.txt │ └── Zantroke.otf ├── html/ │ ├── forms/ │ │ ├── basic-input-examples/ │ │ │ └── index.html │ │ ├── color-example/ │ │ │ └── index.html │ │ ├── date-picker-fallback/ │ │ │ └── index.html │ │ ├── datetime-local-example/ │ │ │ └── index.html │ │ ├── datetime-local-picker-fallback/ │ │ │ └── index.html │ │ ├── editable-input-example/ │ │ │ └── editable_input.html │ │ ├── file-examples/ │ │ │ ├── file-example.html │ │ │ ├── file-with-accept.html │ │ │ └── simple-file.html │ │ ├── form-validation/ │ │ │ ├── custom-error-message.html │ │ │ ├── detailed-custom-validation.html │ │ │ ├── fruit-length.html │ │ │ ├── fruit-pattern.html │ │ │ ├── fruit-required.html │ │ │ ├── fruit-start.html │ │ │ ├── full-example.html │ │ │ └── min-max.html │ │ ├── hidden-input-example/ │ │ │ └── index.html │ │ ├── html-form-structure/ │ │ │ ├── checkbox-label.html │ │ │ ├── fieldset-legend.html │ │ │ └── required-labels.html │ │ ├── image-type-example/ │ │ │ ├── index.html │ │ │ └── xy-coordinates-example.html │ │ ├── indeterminate-example/ │ │ │ └── index.html │ │ ├── month-examples/ │ │ │ └── month-validation.html │ │ ├── native-form-widgets/ │ │ │ ├── advanced-examples.html │ │ │ ├── button-examples.html │ │ │ ├── checkable-items.html │ │ │ ├── drop-down-content.html │ │ │ ├── multi-line-text-field.html │ │ │ ├── other-examples.html │ │ │ ├── positioned-legend.html │ │ │ └── single-line-text-fields.html │ │ ├── number-example/ │ │ │ └── index.html │ │ ├── postcard-example/ │ │ │ ├── index.html │ │ │ └── postcard-start.html │ │ ├── pseudo-classes/ │ │ │ ├── basic-required-optional.html │ │ │ ├── enabled-disabled-shipping.html │ │ │ ├── out-of-range.html │ │ │ ├── radios-checked-default.html │ │ │ ├── radios-checked-indeterminate.html │ │ │ ├── readonly-confirmation.html │ │ │ ├── required-optional-generated.html │ │ │ ├── user-valid-invalid.html │ │ │ └── valid-invalid.html │ │ ├── range-example/ │ │ │ └── index.html │ │ ├── select-example/ │ │ │ └── select-multiple.html │ │ ├── sending-form-data/ │ │ │ ├── get-method.html │ │ │ ├── php-example.html │ │ │ ├── php-example.php │ │ │ ├── post-method.html │ │ │ ├── python-example.py │ │ │ └── templates/ │ │ │ ├── form.html │ │ │ └── greeting.html │ │ ├── styling-examples/ │ │ │ ├── appearance-tester.html │ │ │ ├── checkboxes-styled.html │ │ │ ├── radios-styled.html │ │ │ ├── search-appearance.html │ │ │ ├── styled-file-picker.html │ │ │ ├── styled-search.html │ │ │ └── ugly-controls.html │ │ ├── tasks/ │ │ │ ├── advanced-styling/ │ │ │ │ ├── advanced-styling1-download.html │ │ │ │ ├── advanced-styling1.html │ │ │ │ ├── advanced-styling2-download.html │ │ │ │ ├── advanced-styling2.html │ │ │ │ ├── advanced-styling3-download.html │ │ │ │ └── marking.md │ │ │ ├── basic-controls/ │ │ │ │ ├── basic-controls1-download.html │ │ │ │ ├── basic-controls1.html │ │ │ │ ├── basic-controls2-download.html │ │ │ │ ├── basic-controls2.html │ │ │ │ ├── basic-controls3-download.html │ │ │ │ ├── basic-controls3.html │ │ │ │ └── marking.md │ │ │ ├── form-structure/ │ │ │ │ ├── form-structure1-download.html │ │ │ │ ├── form-structure1.html │ │ │ │ └── marking.md │ │ │ ├── form-validation/ │ │ │ │ ├── form-validation1-download.html │ │ │ │ ├── form-validation2-download.html │ │ │ │ ├── form-validation3-download.html │ │ │ │ └── marking.md │ │ │ ├── html5-controls/ │ │ │ │ ├── html5-controls1-download.html │ │ │ │ ├── html5-controls1.html │ │ │ │ ├── html5-controls2-download.html │ │ │ │ ├── html5-controls2.html │ │ │ │ └── marking.md │ │ │ ├── other-controls/ │ │ │ │ ├── marking.md │ │ │ │ ├── other-controls1-download.html │ │ │ │ ├── other-controls1.html │ │ │ │ ├── other-controls2-download.html │ │ │ │ ├── other-controls2.html │ │ │ │ ├── other-controls3-download.html │ │ │ │ └── other-controls3.html │ │ │ ├── playable.js │ │ │ ├── styles.css │ │ │ └── styling-basics/ │ │ │ ├── marking.md │ │ │ └── styling-basics1-download.html │ │ ├── tel-example/ │ │ │ └── index.html │ │ ├── text-example/ │ │ │ └── index.html │ │ ├── time-example/ │ │ │ └── index.html │ │ ├── toggle-switch-example/ │ │ │ └── index.html │ │ ├── url-example/ │ │ │ └── index.html │ │ ├── week-example/ │ │ │ └── index.html │ │ └── your-first-HTML-form/ │ │ ├── first-form-styled.html │ │ └── first-form.html │ ├── introduction-to-html/ │ │ ├── advanced-text-formatting/ │ │ │ ├── description-list.html │ │ │ ├── other-semantics.html │ │ │ └── quotations.html │ │ ├── creating-hyperlinks/ │ │ │ ├── contacts.html │ │ │ ├── index.html │ │ │ └── projects/ │ │ │ └── index.html │ │ ├── debugging-html/ │ │ │ ├── debug-example-fixed.html │ │ │ └── debug-example.html │ │ ├── document_and_website_structure/ │ │ │ ├── index.html │ │ │ └── style.css │ │ ├── getting-started/ │ │ │ └── index.html │ │ ├── html-text-formatting/ │ │ │ ├── text-complete.html │ │ │ └── text-start.html │ │ ├── marking-up-a-letter-finished/ │ │ │ ├── index.html │ │ │ └── marking-guide.md │ │ ├── marking-up-a-letter-start/ │ │ │ ├── css.txt │ │ │ └── letter-text.txt │ │ ├── navigation-menu-marked-up/ │ │ │ ├── index.html │ │ │ ├── pictures.html │ │ │ ├── projects.html │ │ │ └── social.html │ │ ├── navigation-menu-start/ │ │ │ ├── index.html │ │ │ ├── pictures.html │ │ │ ├── projects.html │ │ │ └── social.html │ │ ├── structuring-a-page-of-content-finished/ │ │ │ ├── index.html │ │ │ ├── marking-guide.md │ │ │ └── style.css │ │ ├── structuring-a-page-of-content-start/ │ │ │ ├── index.html │ │ │ └── style.css │ │ ├── tasks/ │ │ │ ├── advanced-text/ │ │ │ │ ├── advanced-text1-download.html │ │ │ │ ├── advanced-text1-finished.html │ │ │ │ ├── advanced-text1.html │ │ │ │ ├── advanced-text2-download.html │ │ │ │ ├── advanced-text2-finished.html │ │ │ │ ├── advanced-text2.html │ │ │ │ └── marking.md │ │ │ ├── basic-text/ │ │ │ │ ├── basic-text1-download.html │ │ │ │ ├── basic-text1-finished.html │ │ │ │ ├── basic-text1.html │ │ │ │ ├── basic-text2-download.html │ │ │ │ ├── basic-text2-finished.html │ │ │ │ ├── basic-text2.html │ │ │ │ ├── basic-text3-download.html │ │ │ │ ├── basic-text3-finished.html │ │ │ │ ├── basic-text3.html │ │ │ │ └── marking.md │ │ │ ├── links/ │ │ │ │ ├── links1-download.html │ │ │ │ ├── links1.html │ │ │ │ ├── links2-download.html │ │ │ │ ├── links2.html │ │ │ │ ├── links3-download.html │ │ │ │ ├── links3.html │ │ │ │ ├── marking.md │ │ │ │ ├── narwhals.html │ │ │ │ └── whales.html │ │ │ ├── playable.js │ │ │ └── styles.css │ │ └── the-html-head/ │ │ ├── css-and-js.html │ │ ├── meta-example.html │ │ ├── script.js │ │ ├── style.css │ │ └── title-example.html │ ├── multimedia-and-embedding/ │ │ ├── adding-vector-graphics-to-the-web/ │ │ │ └── vector-versus-raster.html │ │ ├── images-in-html/ │ │ │ └── index.html │ │ ├── mdn-splash-page-finished/ │ │ │ ├── index.html │ │ │ └── marking-guide.md │ │ ├── mdn-splash-page-start/ │ │ │ └── index.html │ │ ├── other-embedding-technologies/ │ │ │ ├── iframe-detail.html │ │ │ ├── iframe-youtube.html │ │ │ ├── object-image.html │ │ │ └── object-pdf.html │ │ ├── responsive-images/ │ │ │ ├── not-responsive.html │ │ │ ├── responsive.html │ │ │ └── srcset-resolutions.html │ │ ├── tasks/ │ │ │ ├── images/ │ │ │ │ ├── images1-download.html │ │ │ │ ├── images1.html │ │ │ │ ├── images2-download.html │ │ │ │ ├── images2.html │ │ │ │ ├── images3-download.html │ │ │ │ ├── images3.html │ │ │ │ └── marking.md │ │ │ ├── media-embed/ │ │ │ │ ├── marking.md │ │ │ │ ├── media/ │ │ │ │ │ ├── subtitles_en.vtt │ │ │ │ │ └── video.webm │ │ │ │ ├── mediaembed1-download.html │ │ │ │ ├── mediaembed1.html │ │ │ │ ├── mediaembed2-download.html │ │ │ │ ├── mediaembed2.html │ │ │ │ ├── mediaembed3-download.html │ │ │ │ └── mediaembed3.html │ │ │ ├── playable.js │ │ │ └── styles.css │ │ └── video-and-audio-content/ │ │ ├── extra-video-features.html │ │ ├── multiple-audio-formats.html │ │ ├── multiple-video-formats-no-controls.html │ │ ├── multiple-video-formats.html │ │ ├── rabbit320.webm │ │ ├── simple-video.html │ │ └── viper.ogg │ └── tables/ │ ├── advanced/ │ │ ├── items-sold-headers.html │ │ ├── items-sold-scope.html │ │ ├── items-sold.html │ │ ├── minimal-table.css │ │ ├── nested-tables.html │ │ ├── spending-record-finished.html │ │ ├── spending-record.html │ │ └── timetable-caption.html │ ├── assessment-finished/ │ │ ├── marking-guide.md │ │ ├── minimal-table.css │ │ └── planets-data.html │ ├── assessment-start/ │ │ ├── blank-template.html │ │ ├── minimal-table.css │ │ └── planets-data.txt │ └── basic/ │ ├── animals-table-fixed.html │ ├── animals-table.html │ ├── blank-template.html │ ├── dogs-table-fixed.html │ ├── dogs-table.html │ ├── minimal-table.css │ ├── personal-pronouns-styled.html │ ├── personal-pronouns.html │ ├── simple-table.html │ ├── timetable-fixed.html │ └── timetable.html ├── javascript/ │ ├── apis/ │ │ ├── client-side-storage/ │ │ │ ├── cache-sw/ │ │ │ │ └── video-store-offline/ │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ ├── style.css │ │ │ │ ├── sw.js │ │ │ │ └── videos/ │ │ │ │ ├── crystal.webm │ │ │ │ ├── elf.webm │ │ │ │ ├── frog.webm │ │ │ │ ├── monster.webm │ │ │ │ ├── pig.webm │ │ │ │ └── rabbit.webm │ │ │ ├── indexeddb/ │ │ │ │ ├── notes/ │ │ │ │ │ ├── index-start.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── index.js │ │ │ │ │ └── style.css │ │ │ │ └── video-store/ │ │ │ │ ├── index.html │ │ │ │ ├── index.js │ │ │ │ ├── style.css │ │ │ │ └── videos/ │ │ │ │ ├── crystal.webm │ │ │ │ ├── elf.webm │ │ │ │ ├── frog.webm │ │ │ │ ├── monster.webm │ │ │ │ ├── pig.webm │ │ │ │ └── rabbit.webm │ │ │ └── web-storage/ │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ └── personal-greeting.html │ │ ├── document-manipulation/ │ │ │ ├── dom-example-manipulated.html │ │ │ ├── dom-example.html │ │ │ ├── shopping-list-finished.html │ │ │ └── shopping-list.html │ │ ├── drawing-graphics/ │ │ │ ├── getting-started/ │ │ │ │ ├── 0_canvas_start/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── script.js │ │ │ │ │ └── style.css │ │ │ │ ├── 1_canvas_template/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── script.js │ │ │ │ │ └── style.css │ │ │ │ ├── 2_canvas_rectangles/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── script.js │ │ │ │ │ └── style.css │ │ │ │ ├── 3_canvas_paths/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── script.js │ │ │ │ │ └── style.css │ │ │ │ ├── 4_canvas_text/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── script.js │ │ │ │ │ └── style.css │ │ │ │ └── 5_canvas_images/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── loops_animation/ │ │ │ │ ├── 6_canvas_for_loop/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── script.js │ │ │ │ │ └── style.css │ │ │ │ ├── 7_canvas_walking_animation/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── script.js │ │ │ │ │ └── style.css │ │ │ │ └── 8_canvas_drawing_app/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── threejs-cube/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ └── threejs-video-cube/ │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ └── style.css │ │ ├── fetching-data/ │ │ │ ├── can-store/ │ │ │ │ ├── can-script.js │ │ │ │ ├── can-style.css │ │ │ │ ├── index.html │ │ │ │ └── products.json │ │ │ ├── can-store-xhr/ │ │ │ │ ├── can-script.js │ │ │ │ ├── can-style.css │ │ │ │ ├── index.html │ │ │ │ └── products.json │ │ │ ├── fetch-finish.html │ │ │ ├── fetch-start.html │ │ │ ├── verse1.txt │ │ │ ├── verse2.txt │ │ │ ├── verse3.txt │ │ │ └── verse4.txt │ │ ├── introduction/ │ │ │ ├── bouncing-balls.html │ │ │ ├── main.js │ │ │ ├── style.css │ │ │ └── web-audio/ │ │ │ └── index.html │ │ ├── third-party-apis/ │ │ │ ├── mapquest/ │ │ │ │ ├── finished/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── script.js │ │ │ │ │ └── style.css │ │ │ │ └── start/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ ├── nytimes/ │ │ │ │ ├── finished/ │ │ │ │ │ ├── index.html │ │ │ │ │ ├── script.js │ │ │ │ │ └── style.css │ │ │ │ └── start/ │ │ │ │ ├── index.html │ │ │ │ ├── script.js │ │ │ │ └── style.css │ │ │ └── youtube/ │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ └── youtube.css │ │ └── video-audio/ │ │ ├── finished/ │ │ │ ├── custom-player.js │ │ │ ├── index.html │ │ │ ├── style.css │ │ │ └── video/ │ │ │ └── sintel-short.webm │ │ └── start/ │ │ ├── index.html │ │ ├── style.css │ │ └── video/ │ │ └── sintel-short.webm │ ├── asynchronous/ │ │ ├── sequencing-animations/ │ │ │ ├── finished/ │ │ │ │ ├── index.html │ │ │ │ ├── main.js │ │ │ │ └── style.css │ │ │ ├── marking-guide.md │ │ │ └── start/ │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ └── style.css │ │ └── workers/ │ │ ├── finished/ │ │ │ ├── generate.js │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ └── style.css │ │ └── start/ │ │ ├── generate.js │ │ ├── index.html │ │ ├── main.js │ │ └── style.css │ ├── building-blocks/ │ │ ├── allowance-updater.html │ │ ├── calendar-finished.html │ │ ├── events/ │ │ │ ├── preventdefault-validation.html │ │ │ ├── rabbit320.webm │ │ │ ├── random-color-addeventlistener.html │ │ │ ├── random-color-eventhandlerattributes.html │ │ │ ├── random-color-eventhandlerproperty.html │ │ │ ├── random-color-eventobject.html │ │ │ ├── show-video-box-fixed.html │ │ │ ├── show-video-box.html │ │ │ └── useful-eventtarget.html │ │ ├── functions/ │ │ │ ├── conflict.html │ │ │ ├── first.js │ │ │ ├── function-library-finished.html │ │ │ ├── function-library.html │ │ │ ├── function-scope.html │ │ │ ├── function-stage-2.html │ │ │ ├── function-stage-3.html │ │ │ ├── function-stage-4.html │ │ │ ├── function-start.html │ │ │ └── second.js │ │ ├── gallery/ │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ ├── marking-guide.md │ │ │ └── style.css │ │ ├── loops/ │ │ │ ├── basic-for-improved.html │ │ │ ├── basic-for.html │ │ │ ├── contact-search.html │ │ │ ├── do-while.html │ │ │ ├── guest-list.html │ │ │ ├── integer-squares.html │ │ │ ├── launch-countdown.html │ │ │ ├── random-canvas-circles.html │ │ │ └── while.html │ │ ├── more-color-choices-finished.html │ │ ├── simple-else-if.html │ │ ├── simple-switch.html │ │ ├── simple-ternary.html │ │ └── tasks/ │ │ ├── conditionals/ │ │ │ ├── conditionals1-download.html │ │ │ ├── conditionals1.html │ │ │ ├── conditionals2-download.html │ │ │ ├── conditionals2.html │ │ │ ├── conditionals3-download.html │ │ │ ├── conditionals3.html │ │ │ └── marking.md │ │ ├── events/ │ │ │ ├── events1-download.html │ │ │ ├── events1.html │ │ │ ├── events2-download.html │ │ │ ├── events2.html │ │ │ ├── events3-download.html │ │ │ ├── events3.html │ │ │ └── marking.md │ │ ├── functions/ │ │ │ ├── functions1-download.html │ │ │ ├── functions1.html │ │ │ ├── functions2-download.html │ │ │ ├── functions2.html │ │ │ ├── functions3-download.html │ │ │ ├── functions3.html │ │ │ ├── functions4-download.html │ │ │ ├── functions4.html │ │ │ └── marking.md │ │ ├── loops/ │ │ │ ├── loops1-download.html │ │ │ ├── loops2-download.html │ │ │ ├── loops3-download.html │ │ │ └── marking.md │ │ ├── playable.js │ │ └── styles.css │ ├── introduction-to-js-1/ │ │ ├── assessment-finished/ │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ └── marking-guide.md │ │ ├── assessment-start/ │ │ │ ├── index.html │ │ │ └── raw-text.txt │ │ ├── first-splash/ │ │ │ ├── number-guessing-game-start.html │ │ │ └── number-guessing-game.html │ │ ├── maths/ │ │ │ ├── conditional.html │ │ │ └── editable_canvas.html │ │ ├── tasks/ │ │ │ ├── arrays/ │ │ │ │ ├── arrays1-download.html │ │ │ │ ├── arrays1.html │ │ │ │ ├── arrays2-download.html │ │ │ │ ├── arrays2.html │ │ │ │ ├── arrays3-download.html │ │ │ │ ├── arrays3.html │ │ │ │ ├── arrays4-download.html │ │ │ │ ├── arrays4.html │ │ │ │ └── marking.md │ │ │ ├── math/ │ │ │ │ ├── marking.md │ │ │ │ ├── math1-download.html │ │ │ │ ├── math1.html │ │ │ │ ├── math2-download.html │ │ │ │ ├── math2.html │ │ │ │ ├── math3-download.html │ │ │ │ └── math3.html │ │ │ ├── playable.js │ │ │ ├── strings/ │ │ │ │ ├── marking.md │ │ │ │ ├── strings1-download.html │ │ │ │ ├── strings1.html │ │ │ │ ├── strings2-download.html │ │ │ │ ├── strings2.html │ │ │ │ ├── strings3-download.html │ │ │ │ ├── strings3.html │ │ │ │ ├── strings4-download.html │ │ │ │ └── strings4.html │ │ │ ├── styles.css │ │ │ └── variables/ │ │ │ ├── marking.md │ │ │ ├── variables1-download.html │ │ │ ├── variables1.html │ │ │ ├── variables2-download.html │ │ │ ├── variables2.html │ │ │ ├── variables3-download.html │ │ │ └── variables3.html │ │ ├── troubleshooting/ │ │ │ └── number-game-errors.html │ │ └── what-is-js/ │ │ ├── apply-javascript-external.html │ │ ├── apply-javascript-internal.html │ │ ├── apply-javascript.html │ │ ├── javascript-label.html │ │ └── script.js │ └── oojs/ │ ├── advanced/ │ │ ├── es2015-class-inheritance.html │ │ ├── es2015-getters-setters.html │ │ ├── oojs-class-inheritance-finished.html │ │ ├── oojs-class-inheritance-start.html │ │ ├── oojs-class-inheritance-student.html │ │ └── oojs-class-prototype.html │ ├── assessment/ │ │ ├── index.html │ │ ├── main.js │ │ ├── marking-guide.md │ │ └── style.css │ ├── bouncing-balls/ │ │ ├── index-finished.html │ │ ├── index.html │ │ ├── main-finished.js │ │ ├── main.js │ │ └── style.css │ ├── introduction/ │ │ ├── oojs-class-finished.html │ │ ├── oojs-class-further-exercises.html │ │ ├── oojs-finished.html │ │ └── oojs.html │ ├── json/ │ │ ├── JSONTest.html │ │ ├── heroes-finished-json-parse.html │ │ ├── heroes-finished.html │ │ ├── heroes.html │ │ ├── style.css │ │ └── superheroes.json │ └── tasks/ │ ├── json/ │ │ ├── json1-download.html │ │ ├── json1.html │ │ ├── marking.md │ │ └── sample.json │ ├── object-basics/ │ │ ├── marking.md │ │ ├── object-basics1-download.html │ │ ├── object-basics1.html │ │ ├── object-basics2-download.html │ │ ├── object-basics2.html │ │ ├── object-basics3-download.html │ │ ├── object-basics3.html │ │ ├── object-basics4-download.html │ │ └── object-basics4.html │ ├── oojs/ │ │ ├── marking.md │ │ ├── oojs1-download.html │ │ ├── oojs1.html │ │ ├── oojs2-download.html │ │ └── oojs2.html │ ├── playable.js │ └── styles.css └── tools-testing/ └── cross-browser-testing/ ├── accessibility/ │ ├── bad-semantics.html │ ├── fake-div-buttons.html │ ├── good-semantics.html │ └── native-keyboard-accessibility.html ├── automation/ │ ├── call_bstack.js │ ├── call_sauce.js │ ├── gulpfile.js │ ├── index.html │ ├── main.js │ └── style.css ├── feature-detection/ │ ├── basic-styling.css │ ├── css-feature-detect-finished.html │ ├── css-feature-detect.html │ ├── flex-layout.css │ ├── float-layout.css │ ├── modernizr-css.css │ ├── modernizr-css.html │ ├── modernizr-custom.js │ ├── modernizr-js.html │ ├── supports-feature-detect.html │ └── supports-styling.css ├── html-css/ │ ├── MooTools-Core-1.6.0.js │ ├── button-with-fallback.html │ ├── forms-test.html │ ├── selectivizr-example-start.html │ ├── selectivizr-example.html │ ├── selectivizr-min.js │ └── style.css ├── javascript/ │ ├── .eslintrc.js │ ├── arrow-function.html │ ├── bad-for-loop.html │ ├── broken-js-test.js │ ├── es6-promise.js │ ├── fetch-broken/ │ │ ├── index.html │ │ ├── script.js │ │ └── style.css │ ├── fetch-fixed/ │ │ ├── index.html │ │ ├── script.js │ │ └── style.css │ ├── fetch-polyfill-finished.html │ ├── fetch-polyfill-only-when-needed.html │ ├── fetch-polyfill.html │ ├── fetch.js │ ├── good-for-loop.html │ ├── polyfills.js │ └── style.css ├── selenium/ │ ├── bstack_google_test.js │ ├── google_test.js │ ├── google_test_multiple.js │ ├── google_test_remote.js │ ├── mocha_test.js │ ├── quick_test.js │ └── sauce_google_test.js └── strategies/ └── hidden-info-panel.html ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/CODEOWNERS ================================================ # ---------------------------------------------------------------------------- # CODEOWNERS # ---------------------------------------------------------------------------- # Order is important. The last matching pattern takes precedence. # See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners # ---------------------------------------------------------------------------- * @mdn/content-team /.github/workflows/ @mdn/engineering /.github/CODEOWNERS @mdn/content-team @mdn/engineering /SECURITY.md @mdn/engineering ================================================ FILE: .gitignore ================================================ *.DS_Store ================================================ FILE: .prettierignore ================================================ # This .prettierignore file uses .gitignore syntax # see https://prettier.io/docs/en/ignore.html#ignoring-files-prettierignore /css/introduction-to-css/debugging-css/style.css /html/introduction-to-html/debugging-html/debug-example.html /tools-testing/cross-browser-testing/javascript/broken-js-test.js ================================================ FILE: .prettierrc.json ================================================ { "bracketSameLine": true } ================================================ FILE: .vscode/cspell.json ================================================ { "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json", "version": "0.2", "language": "en-us", "languageId": "*", "dictionaries": [ "bash", "css", "cpp", "django", "filetypes", "fonts", "fullstack", "html", "latex", "lorem-ipsum", "markdown", "node", "npm", "project-words", "python", "softwareTerms", "svelte", "typescript" ], "ignorePaths": [ ".vscode/cspell.json", ".vscode/extensions.json", ".markdownlint-cli2.jsonc", "**/*.ogg", "**/*.mp3", "**/*.mp4", "html/introduction-to-html/debugging-html/debug-example.html", "css/styling-text/**/Lovato-Light-demo.html", "css/styling-text/**/Lovato-Light-webfont.svg", "javascript/apis/drawing-graphics/**/*/three.min.js", "tools-testing/cross-browser-testing/**/*.js", "css/**/*.otf" ], "ignoreRegExpList": [ "#[\\w-]*", "aria-activedescendant=\"(?:[^\\\"]+|\\.)*\"", "aria-controls=\"(?:[^\\\"]+|\\.)*\"", "aria-describedby=\"(?:[^\\\"]+|\\.)*\"", "aria-details=\"(?:[^\\\"]+|\\.)*\"", "aria-errormessage=\"(?:[^\\\"]+|\\.)*\"", "aria-flowto=\"(?:[^\\\"]+|\\.)*\"", "aria-labelledby=\"(?:[^\\\"]+|\\.)*\"", "aria-owns=\"(?:[^\\\"]+|\\.)*\"", "Base64", "class=\"(?:[^\\\"]+|\\.)*\"", "data-test-id=\"(?:[^\\\"]+|\\.)*\"", "EscapeCharacters", "for=\"(?:[^\\\"]+|\\.)*\"", "HexValues", "href=\"(?:[^\\\"]+|\\.)*\"", "id=\"(?:[^\\\"]+|\\.)*\"", "lang=\".*\">.* ================================================ FILE: LICENSE ================================================ CC0 1.0 Universal Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. For more information, please see ================================================ FILE: README.md ================================================ # learning-area Welcome to the GitHub repository for the [MDN Learning Area](https://developer.mozilla.org/en-US/Learn). Most of the code examples shown and discussed in the Learning Area can be found here; the directories in the repo match the module structure of the articles. The one exception is the [Server-side website programming](https://developer.mozilla.org/en-US/docs/Learn/Server-side) examples — we split these into two separate repositories to make them easier to manage: * https://github.com/mdn/express-locallibrary-tutorial * https://github.com/mdn/django-locallibrary-tutorial ================================================ FILE: SECURITY.md ================================================ # Security Policy ## Overview This policy applies to MDN's website (`developer.mozilla.org`), backend services, and GitHub repositories in the [`mdn`](https://github.com/mdn) organization. Issues affecting other Mozilla products or services should be reported through the [Mozilla Security Bug Bounty Program](https://www.mozilla.org/en-US/security/bug-bounty/). For non-security issues, please file a [content bug](https://github.com/mdn/content/issues/new/choose), a [website bug](https://github.com/mdn/fred/issues/new/choose) or a [content/feature suggestion](https://github.com/mdn/mdn/issues/new/choose). ## Reporting a Vulnerability If you discover a potential security issue, please report it privately via . If you prefer not to use HackerOne, you can report it via . ## Bounty Program Vulnerabilities in MDN may qualify for Mozilla's Bug Bounty Program. Eligibility and reward amounts are described on . Please use the above channels even if you are not interested in a bounty reward. ## Responsible Disclosure Please do not publicly disclose details until Mozilla's security team and the MDN engineering team have verified and fixed the issue. We appreciate your efforts to keep MDN and its users safe. ================================================ FILE: accessibility/aria/aria-div-buttons.html ================================================ ARIA div buttons

ARIA div buttons

Click me!
Click me too!
And me!
================================================ FILE: accessibility/aria/aria-live.html ================================================ Random quotes

Random quote

================================================ FILE: accessibility/aria/aria-no-live.html ================================================ Random quotes

Random quote

================================================ FILE: accessibility/aria/aria-tabbed-info-box.html ================================================ ARIA tabbed info box
  • Tab 2
  • Tab 3

The first tab

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in augue. Vestibulum et orci scelerisque, vulputate tellus quis, lobortis dui. Vivamus varius libero at ipsum mattis efficitur ut nec nisl. Nullam eget tincidunt metus. Donec ultrices, urna maximus consequat aliquet, dui neque eleifend lorem, a auctor libero turpis at sem. Aliquam ut porttitor urna. Nulla facilisi.

================================================ FILE: accessibility/aria/form-validation-checkbox-disabled.html ================================================ Form validation example

Form validation example

Fields marked with an asterisk (*) are required.

================================================ FILE: accessibility/aria/form-validation-updated.html ================================================ Form validation example

Form validation example

Fields marked with an asterisk (*) are required.

================================================ FILE: accessibility/aria/quotes.json ================================================ [ { "quote" : "Life is about making an impact, not making an income.", "author" : "Kevin Kruse" }, { "quote" : "Whatever the mind of man can conceive and believe, it can achieve.", "author" : "Napoleon Hill" }, { "quote" : "Strive not to be a success, but rather to be of value.", "author" : "Albert Einstein" }, { "quote" : "Two roads diverged in a wood, and I—I took the one less traveled by, And that has made all the difference", "author" : "Robert Frost" }, { "quote" : "I attribute my success to this: I never gave or took any excuse.", "author" : "Florence Nightingale" }, { "quote" : "You miss 100% of the shots you don’t take.", "author" : "Wayne Gretzky" }, { "quote" : "I’ve missed more than 9000 shots in my career. I’ve lost almost 300 games. 26 times I’ve been trusted to take the game winning shot and missed. I’ve failed over and over and over again in my life. And that is why I succeed.", "author" : "Michael Jordan" }, { "quote" : "The most difficult thing is the decision to act, the rest is merely tenacity.", "author" : "Amelia Earhart" }, { "quote" : "Every strike brings me closer to the next home run.", "author" : "Babe Ruth" }, { "quote" : "Definiteness of purpose is the starting point of all achievement.", "author" : "W. Clement Stone" }, { "quote" : "Life isn’t about getting and having, it’s about giving and being.", "author" : "Kevin Kruse" }, { "quote" : "Life is what happens to you while you’re busy making other plans.", "author" : "John Lennon" }, { "quote" : "We become what we think about.", "author" : "Earl Nightingale" }, { "quote" : "Twenty years from now you will be more disappointed by the things that you didn’t do than by the ones you did do, so throw off the bowlines, sail away from safe harbor, catch the trade winds in your sails. Explore, Dream, Discover.", "author" : "Mark Twain" }, { "quote" : "Life is 10% what happens to me and 90% of how I react to it.", "author" : "Charles Swindoll" }, { "quote" : "The most common way people give up their power is by thinking they don’t have any.", "author" : "Alice Walker" }, { "quote" : "The mind is everything. What you think you become.", "author" : "Buddha" }, { "quote" : "The best time to plant a tree was 20 years ago. The second best time is now.", "author" : "Chinese Proverb" }, { "quote" : "An unexamined life is not worth living.", "author" : "Socrates" }, { "quote" : "Eighty percent of success is showing up.", "author" : "Woody Allen" }, { "quote" : "Your time is limited, so don’t waste it living someone else’s life.", "author" : "Steve Jobs" }, { "quote" : "Winning isn’t everything, but wanting to win is.", "author" : "Vince Lombardi" }, { "quote" : "I am not a product of my circumstances. I am a product of my decisions.", "author" : "Stephen Covey" }, { "quote" : "Every child is an artist. The problem is how to remain an artist once he grows up.", "author" : "Pablo Picasso" }, { "quote" : "You can never cross the ocean until you have the courage to lose sight of the shore.", "author" : "Christopher Columbus" } ] ================================================ FILE: accessibility/aria/validation-checkbox-disabled.js ================================================ const inputs = document.querySelectorAll('input'); const labels = document.querySelectorAll('label'); const form = document.querySelector('form'); let formItems = []; const errorField = document.querySelector('.errors'); const errorList = document.querySelector('.errors ul'); let checkbox; let checkboxLabel; const hiddenAlert = document.querySelector('.hidden-alert'); for(let i = 0; i < inputs.length-1; i++) { if(inputs[i].type !== 'checkbox') { let obj = {}; obj.label = labels[i]; obj.input = inputs[i]; formItems.push(obj); } else { checkbox = inputs[i]; checkboxLabel = labels[i]; } } errorField.style.left = '-100%'; toggleMusician(false); form.onsubmit = validate; function validate(e) { errorList.innerHTML = ''; for(let i = 0; i < formItems.length; i++) { let testItem = formItems[i]; if(testItem.input.value === '' && testItem.input.disabled === false) { errorField.style.left = '390px'; createLink(testItem); } } if(errorList.innerHTML !== '') { e.preventDefault(); } } function createLink(testItem) { const listItem = document.createElement('li'); const anchor = document.createElement('a'); anchor.textContent = testItem.input.name + ' field is empty: fill in your ' + testItem.input.name + '.'; anchor.href = '#' + testItem.input.name; anchor.onclick = function() { testItem.input.focus(); }; listItem.appendChild(anchor); errorList.appendChild(listItem); } checkbox.onchange = function() { if(checkbox.checked) { toggleMusician(true); } else { toggleMusician(false); } }; function toggleMusician(bool) { let instruItem = formItems[formItems.length-1]; if(bool) { instruItem.input.disabled = false; instruItem.label.style.color = '#000'; instruItem.input.setAttribute('aria-disabled', 'false'); hiddenAlert.textContent = 'Instruments played field now enabled; use it to tell us what you play.'; } else { instruItem.input.disabled = true; instruItem.label.style.color = '#999'; instruItem.input.setAttribute('aria-disabled', 'true'); hiddenAlert.textContent = 'Instruments played field now disabled.'; } } ================================================ FILE: accessibility/aria/validation.js ================================================ const inputs = document.querySelectorAll('input'); const labels = document.querySelectorAll('label'); const form = document.querySelector('form'); let formItems = []; const errorField = document.querySelector('.errors'); const errorList = document.querySelector('.errors ul'); for(let i = 0; i < inputs.length-1; i++) { let obj = {}; obj.label = labels[i]; obj.input = inputs[i]; formItems.push(obj); } errorField.style.left = '-100%'; form.onsubmit = validate; function validate(e) { errorList.innerHTML = ''; for(let i = 0; i < formItems.length; i++) { let testItem = formItems[i]; if(testItem.input.value === '') { errorField.style.left = '360px'; createLink(testItem); } } if(errorList.innerHTML !== '') { e.preventDefault(); } } function createLink(testItem) { const listItem = document.createElement('li'); const anchor = document.createElement('a'); anchor.textContent = testItem.input.name + ' field is empty: fill in your ' + testItem.input.name + '.'; anchor.href = '#' + testItem.input.name; anchor.onclick = function() { testItem.input.focus(); }; listItem.appendChild(anchor); errorList.appendChild(listItem); } ================================================ FILE: accessibility/aria/website-aria-roles/index.html ================================================ Example website with ARIA roles

Header

Article heading

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Donec a diam lectus. Set sit amet ipsum mauris. Maecenas congue ligula as quam viverra nec consectetur ant hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur.

subsection

Donec ut librero sed accu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor.

Pelientesque auctor nisi id magna consequat sagittis. Curabitur dapibus, enim sit amet elit pharetra tincidunt feugiat nist imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros.

Another subsection

Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum soclis natoque penatibus et manis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.

Vivamus fermentum semper porta. Nunc diam velit, adipscing ut tristique vitae sagittis vel odio. Maecenas convallis ullamcorper ultricied. Curabitur ornare, ligula semper consectetur sagittis, nisi diam iaculis velit, is fringille sem nunc vet mi.

©Copyright 2050 by nobody. All rights reversed.

================================================ FILE: accessibility/aria/website-aria-roles/style.css ================================================ /* || General setup */ html, body { margin: 0; padding: 0; } html { font-size: 10px; background-color: #a9a9a9; } body { width: 70%; margin: 0 auto; } /* || typography */ h1, h2, h3 { font-family: 'Sonsie One', cursive; color: #2a2a2a; } p, input, li { font-family: 'Open Sans Condensed', sans-serif; color: #2a2a2a; } h1 { font-size: 4rem; text-align: center; color: white; text-shadow: 2px 2px 10px black; } h2 { font-size: 3rem; text-align: center; } h3 { font-size: 2.2rem; } p, li { font-size: 1.6rem; line-height: 1.5; } /* || header layout */ header { margin-bottom: 10px; } nav, article, aside, footer { background-color: white; padding: 1%; } nav { height: 50px; background-color: ff80ff; display: flex; } nav ul { padding: 0; list-style-type: none; flex: 2; display: flex; } nav li { display: inline; text-align: center; flex: 1; } nav a { display: inline-block; font-size: 2rem; text-transform: uppercase; text-decoration: none; color: black; } nav form { flex: 1; display: flex; align-items: center; height: 100%; padding: 0 2em; } input { font-size: 1.6rem; height: 32px; } input[type="search"] { flex: 3; } input[type="submit"] { flex: 1; margin-left: 1rem; background: #333; border: 0; color: white; } /* || main layout */ main { display: flex; } article { flex: 4; } aside { flex: 1; margin-left: 10px; background-color: #ff80ff; } aside li { padding-bottom: 10px; } footer { margin-top: 10px; } ================================================ FILE: accessibility/aria/website-no-roles/index.html ================================================ Example website structure

Header

Article heading

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Donec a diam lectus. Set sit amet ipsum mauris. Maecenas congue ligula as quam viverra nec consectetur ant hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur.

subsection

Donec ut librero sed accu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor.

Pelientesque auctor nisi id magna consequat sagittis. Curabitur dapibus, enim sit amet elit pharetra tincidunt feugiat nist imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros.

Another subsection

Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum soclis natoque penatibus et manis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.

Vivamus fermentum semper porta. Nunc diam velit, adipscing ut tristique vitae sagittis vel odio. Maecenas convallis ullamcorper ultricied. Curabitur ornare, ligula semper consectetur sagittis, nisi diam iaculis velit, is fringille sem nunc vet mi.

©Copyright 2050 by nobody. All rights reversed.

================================================ FILE: accessibility/aria/website-no-roles/style.css ================================================ /* || General setup */ html, body { margin: 0; padding: 0; } html { font-size: 10px; background-color: #a9a9a9; } body { width: 70%; margin: 0 auto; } /* || typography */ h1, h2, h3 { font-family: 'Sonsie One', cursive; color: #2a2a2a; } p, input, li { font-family: 'Open Sans Condensed', sans-serif; color: #2a2a2a; } h1 { font-size: 4rem; text-align: center; color: white; text-shadow: 2px 2px 10px black; } h2 { font-size: 3rem; text-align: center; } h3 { font-size: 2.2rem; } p, li { font-size: 1.6rem; line-height: 1.5; } /* || header layout */ header { margin-bottom: 10px; } nav, article, aside, footer { background-color: white; padding: 1%; } nav { height: 50px; background-color: ff80ff; display: flex; } nav ul { padding: 0; list-style-type: none; flex: 2; display: flex; } nav li { display: inline; text-align: center; flex: 1; } nav a { display: inline-block; font-size: 2rem; text-transform: uppercase; text-decoration: none; color: black; } nav form { flex: 1; display: flex; align-items: center; height: 100%; padding: 0 2em; } input { font-size: 1.6rem; height: 32px; } input[type="search"] { flex: 3; } input[type="submit"] { flex: 1; margin-left: 1rem; background: #333; border: 0; color: white; } /* || main layout */ main { display: flex; } article { flex: 4; } aside { flex: 1; margin-left: 10px; background-color: #ff80ff; } aside li { padding-bottom: 10px; } footer { margin-top: 10px; } ================================================ FILE: accessibility/assessment-finished/index.html ================================================ Accessibility assessment

Welcome to our wildlife website

The trouble with Bears

By Evan Wild

Tall, lumbering, angry, dangerous. The real live bears of this world are proud, independent creatures, self-serving and always on the hunt for food. Nothing like the bears you see on TV, like Baloo from renowned documentary, The Jungle Book.

So what are bears really like, and why does the world's media portray them with such a skewed vision? In this article we try to answer those questions, and give you a real insight into the life of the bear.

Types of bear

Bears come in two varieties — large and medium. You don't get small bears. If you have seen a small bear, then it was in fact probably a baby bear (cub) from another species.

Bears can also be classified in terms of their habitat — both large and medium bears are just as at home in urban areas as they are in the countryside. Different habitats encourange different behaviour however, as you'll find out below. The below table also gives you some useful facts about bears.

Bear Type Coat Adult size Habitat Lifespan Diet
Wild Brown or black 1.4 to 2.8 meters Woods and forests 25 to 28 years Fish, meat, plants
Urban North Face 18 to 22 Condos and coffee shops 20 to 32 years Starbucks, sushi

Habitats and Eating habits

Wild bears eat a variety of meat, fish, fruit, nuts, and other naturally growing ingredients. In general they will hunt for food themselves in woodland or rivers, but at a push they will track down their sustenance from farms or country houses. They tend to live in relative isolation, in caves, tents, or cottages. The below image shows a big brown wild bear, standing in a river looking for fish to eat.

Urban (gentrified) bears on the other hand have largely abandoned the old ways. They will hunt other urban creatures if necessary (including other predators like rats and foxes), but prefer to scavenge from readily available urban food outlets like dumpsters, bins, and fast food joints. When food has proven scarce, urban bears have even been known to break into people's kitchens and steal essentials like baked beans, ready meals, and microwave ovens. Below you can see an urban polar bear, looking through the railings of his garden while contemplating whether to eat at Nandos or Taco Bell.

Urban bears will sleep anywhere they can, from bus shelters and parks, to the toilets in McDonald's, to their own apartment.

Mating rituals

Bears are romantic creatures by nature, and will naturally look for a mate that they can spend the rest of their lives with. They will woo a potential suitor by making their dwelling look attractive — for example with cave paintings or a bed of reeds in the case of a wild bear, and mood lighting and a Michael Bublé CD in the case of an urban bear.

The following audio clip contains a fact file providing more details about bear mating rituals, along with samples and quotes from experts. You can also access a text transcript of the audio clip.

Add comment

Comments

  • Bob Fossil

    Oh I am so glad you taught me all about the big brown angry guys in the woods. With their sniffing little noses and their bad attitudes, they can sure be a menace — I was thinking of putting them all in a truck and driving them outta here. I run a zoo, you know.

©Copyright 2050 by nobody. All rights reversed.

================================================ FILE: accessibility/assessment-finished/main.js ================================================ // functionality for showing/hiding the comments section const showHideBtn = document.querySelector('.show-hide'); const commentWrapper = document.querySelector('.comment-wrapper'); commentWrapper.style.display = 'none'; showHideBtn.onclick = function() { let showHideText = showHideBtn.textContent; if(showHideText === 'Show comments') { showHideBtn.textContent = 'Hide comments'; commentWrapper.style.display = 'block'; } else { showHideBtn.textContent = 'Show comments'; commentWrapper.style.display = 'none'; } }; // functionality for adding a new comment via the comments form const form = document.querySelector('.comment-form'); const nameField = document.querySelector('#name'); const commentField = document.querySelector('#comment'); const list = document.querySelector('.comment-container'); form.onsubmit = function(e) { e.preventDefault(); submitComment(); }; function submitComment() { const listItem = document.createElement('li'); const namePara = document.createElement('p'); const commentPara = document.createElement('p'); const nameValue = nameField.value; const commentValue = commentField.value; namePara.textContent = nameValue; commentPara.textContent = commentValue; list.appendChild(listItem); listItem.appendChild(namePara); listItem.appendChild(commentPara); nameField.value = ''; commentField.value = ''; } ================================================ FILE: accessibility/assessment-finished/marking-guide.md ================================================ # Marking guide for "Accessibility troubleshooting" The following guide outlines a marking guide for the MDN Learning Area Accessibility Topic — [Accessibility troubleshooting](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/Accessibility_troubleshooting). Each subtask detailed in the assessment is listed below, along with an explanation of how many marks the task is worth, and the mark breakdown. Note: These are guidelines, not set in stone rules — you are of course free to use your judgement on mark awarding when you meet an edge case, or something that isn't clear cut. The overall mark awarded is out of 37. Work out their final mark, and then divide by 37 and multiply by 100 to give a percentage mark. For reference, you can find a [finished version of the site](index.html) that would be awarded top marks. ## Color
The text is difficult to read because of the current color scheme. Can you do a test of the current color contrast (text/background), report the results of the test, and then fix it by changing the assigned colors?
Two marks for this — one for checking the current text/background contrast in a checker like WebAIM's [Color Contrast Checker](http://webaim.org/resources/contrastchecker/) and reporting the results in some way, and one for updating the current color scheme to one with good contrast (i.e. passes WCAG AA in the checker).
## Semantic HTML
The content is still not very accessible - report on what happens when you try to navigate it using a screenreader.
One mark; Your report should give some kind of indication that you can't jump between headings and use them as signposts, and you can't even tell where headings and paragraphs start and end.
Can you update the article text to make it easier for screenreader users to navigate?
Eight marks.
  • The line breaks (<br> tags) all need to be removed (2).
  • The <font> elements need to be replaced with appropriate heading elements (<h1>, <h2>, <h3>) (2).
  • The paragraphs need to be wrapped in paragraph elements (<p>)(2).
  • In the CSS file, font[size="7"]/font[size="6"]/font[size="5"] need to be replaced with h1/h2/h3.
The navigation menu part of the site (wrapped in <div class="nav"></div>) could be made more accessible by putting it in a proper HTML5 semantic element. Which one should it be updated to? Make the update.
Three marks.
  • The <div class="nav"></div> needs be replaced with <nav></nav>
  • In the CSS file, instances of div[class="nav"] need to be replaced with nav.
## The images
The images are currently inaccessible to screenreader users. Can you fix this?
Three marks. You can fix this by adding in alternative text in any suitable way; see Text alternatives — describing the image in the text and perhaps also using aria-labelledby to link the two is good. you could also use a plain old alt attribute.
## The audio player
The audio isn't accessible to hearing impaired (deaf) people - can you add some kind of accessible alternative for these users?
Two marks. Any transcript system works for this simple example - a link to a separate file, the transcript written in the same page, etc. They just need to listen to the audio file, write out the transcription, and add it to their page in some way.
The audio isn't accessible to those using older browsers that don't support HTML5 audio. How can you allow them to still access the audio?
Two marks. Adding a link to the audio into the alternative contained inside the
## The forms
The input element in the search form at the top could do with a label, but we don't want to add a visible text label that would potentially spoil the design and isn't really needed by sighted users. How can you add a label that is only accessible to screenreaders?
Two marks. You can add a descriptive label into an aria-label attribute on the input element. This will then be read out by screenreaders when the input is encountered.
The two input elements in the comment form have visible text labels, but they are not unambiguously associated with their labels — how do you achieve this? Note that you'll need to update some of the CSS rule as well.
Four marks. The label text should be wrapped inside <label> elements, with for attributes containing the ID values of the input elements they are the labels for.
## The show/hide comment control
The show/hide comment control button is not current keyboard-accessible. Can you make it keyboard accessible, both in terms of focusing it, and activating it using the return key?
Two marks. This can be managed easily by changing the <div> element that currently marks the button up to a <button> element. Or you could use tabindex and JavaScript to fix the button; see Building keyboard accessibility back in. The former is a much easier method however.
## The table
The data table is not currently very accessible — it is hard for screenreader users to associate data rows and columns together, and the table also has no kind of summary to make it clear what it shows. Can you add some features to your HTML to fix this problem?
Six marks.
  • They should add a suitable summary of the table in a summary attribute or <caption> element.
  • They should turn each cell in the first row and column into headings (<th>).
  • They should add scope="col" to the headings in the first row, and scope="row" to the headings in the first column.
## Other considerations
Can you list two more ideas for improvements that would make the website more accessible?
Two marks for this. Anything reasonable really; the ideas we had are:
  • Add client-side validation to the comment form
  • Use media queries to make the site more usable on mobile devices.
  • Find a way to announce screenreader users how many comments are displayed when the show comments control button is clicked. For example, put the role attribute with "alert" value on the h2 element in the comments section and update its text like so "Comments (1 available)".
================================================ FILE: accessibility/assessment-finished/style.css ================================================ /* || General setup */ html, body { margin: 0; padding: 0; } html { font-size: 10px; background-color: #dde; } body { width: 80%; min-width: 1024px; margin: 0 auto; } /* || typography */ h1, h2, h3 { font-family: 'Sonsie One', cursive; color: #2a2a2a; } p, input, li, table, label { font-family: 'Open Sans Condensed', sans-serif; color: #2a2a2a; } h1 { font-size: 4rem; text-align: center; color: white; text-shadow: 2px 2px 10px black; } h2 { font-size: 3rem; text-align: center; } h3 { font-size: 2.2rem; } p, li, table { font-size: 1.6rem; line-height: 1.5; } /* || header layout */ nav, article, footer, .secondary { background-color: white; } article, footer, .secondary { padding: 10px 30px; } article { margin-right: 10px; } nav { height: 50px; display: flex; padding: 1% 0; margin-bottom: 10px; } nav ul { padding: 0; list-style-type: none; flex: 2; display: flex; } nav li { display: inline; text-align: center; flex: 1; } nav a { display: inline-block; font-size: 2rem; text-transform: uppercase; text-decoration: none; color: black; } nav .search { flex: 1; display: flex; align-items: center; height: 100%; padding: 0 2em; } .search input { font-size: 1.6rem; height: 32px; } .search input[type="search"] { flex: 3; } .search input[type="submit"] { flex: 1; margin-left: 1rem; background: #333; border: 0; color: white; } /* || main layout */ main { display: flex; } article { flex: 5; } .secondary { flex: 2; } footer { margin-top: 10px; } /* Table styling */ table { width: 100%; background-color: #dde; border-collapse: collapse; } th, td { padding: 10px; } td { text-align: center; } th[scope="col"] { border-bottom: 1px solid black; } tbody tr:nth-child(odd) { background-color: #def; } /* styling content images and audio */ img, audio { display: block; margin: 0 auto; } audio { width: 500px; } /* Comments styling */ .comments { background-color: #def; padding: 10px; } .show-hide { cursor: pointer; } .comments h2 { font-size: 2rem; } .comments h2:nth-of-type(2) { margin-bottom: 0; } .comment-form { margin-bottom: 3rem; } .comment-form .flex-pair { display: flex; padding: 0 3rem 1rem; } .comment-form label { align-self: center; flex: 2; text-align: right; } .comment-form input { margin-left: 1rem; flex: 6; } .comment-form input, .comment-form label, .show-hide { font-size: 1.6rem; height: 32px; } .comment-form input[type="submit"], .show-hide { background: #333; border: 0; color: white; } .comment-form input[type="submit"] { width: 30%; display: block; margin: 0 auto; } .comment-container { margin-top: 0; } .comment-container li { list-style-type: none; display: flex; } .comment-container li p:nth-child(1) { flex: 1; font-weight: bold; } .comment-container li p:nth-child(2) { flex: 5; } ================================================ FILE: accessibility/assessment-finished/transcript.html ================================================ Transcript

Audio transcript

This isn't really an audio fact file about bears, but it is an audio file that you can transcribe.

================================================ FILE: accessibility/assessment-start/assessment-files/index.html ================================================ Accessibility assessment
Welcome to our wildlife website
The trouble with Bears

By Evan Wild

Tall, lumbering, angry, dangerous. The real live bears of this world are proud, independent creatures, self-serving and always on the hunt for food. Nothing like the bears you see on TV, like Baloo from renowned documentary, The Jungle Book.

So what are bears really like, and why does the world's media portray them with such a skewed vision? In this article we try to answer those questions, and give you a real insight into the life of the bear.

Types of bear

Bears come in two varieties — large and medium. You don't get small bears. If you have seen a small bear, then it was in fact probably a baby bear (cub) from another species.

Bears can also be classified in terms of their habitat — both large and medium bears are just as at home in urban areas as they are in the countryside. Different habitats encourange different behaviour however, as you'll find out below. The below table also gives you some useful facts about bears.

Bear Type Coat Adult size Habitat Lifespan Diet
Wild Brown or black 1.4 to 2.8 meters Woods and forests 25 to 28 years Fish, meat, plants
Urban North Face 18 to 22 Condos and coffee shops 20 to 32 years Starbucks, sushi
Habitats and Eating habits

Wild bears eat a variety of meat, fish, fruit, nuts, and other naturally growing ingredients. In general they will hunt for food themselves in woodland or rivers, but at a push they will track down their sustenance from farms or country houses. They tend to live in relative isolation, in caves, tents, or cottages.



Urban (gentrified) bears on the other hand have largely abandoned the old ways. They will hunt other urban creatures if necessary (including other predators like rats and foxes), but prefer to scavenge from readily available urban food outlets like dumpsters, bins, and fast food joints. When food has proven scarce, urban bears have even been known to break into people's kitchens and steal essentials like baked beans, ready meals, and microwave ovens.



Urban bears will sleep anywhere they can, from bus shelters and parks, to the toilets in McDonald's, to their own apartment.

Mating rituals

Bears are romantic creatures by nature, and will naturally look for a mate that they can spend the rest of their lives with. They will woo a potential suitor by making their dwelling look attractive — for example with cave paintings or a bed of reeds in the case of a wild bear, and mood lighting and a Michael Bublé CD in the case of an urban bear.

The following audio clip contains a fact file providing more details about bear mating rituals, along with samples and quotes from experts.

Show comments
Add comment
Your name:
Your comment:
Comments
  • Bob Fossil

    Oh I am so glad you taught me all about the big brown angry guys in the woods. With their sniffing little noses and their bad attitudes, they can sure be a menace — I was thinking of putting them all in a truck and driving them outta here. I run a zoo, you know.

©Copyright 2050 by nobody. All rights reversed.

================================================ FILE: accessibility/assessment-start/assessment-files/main.js ================================================ // functionality for showing/hiding the comments section const showHideBtn = document.querySelector('.show-hide'); const commentWrapper = document.querySelector('.comment-wrapper'); commentWrapper.style.display = 'none'; showHideBtn.onclick = function() { let showHideText = showHideBtn.textContent; if(showHideText === 'Show comments') { showHideBtn.textContent = 'Hide comments'; commentWrapper.style.display = 'block'; } else { showHideBtn.textContent = 'Show comments'; commentWrapper.style.display = 'none'; } }; // functionality for adding a new comment via the comments form const form = document.querySelector('.comment-form'); const nameField = document.querySelector('#name'); const commentField = document.querySelector('#comment'); const list = document.querySelector('.comment-container'); form.onsubmit = function(e) { e.preventDefault(); submitComment(); }; function submitComment() { const listItem = document.createElement('li'); const namePara = document.createElement('p'); const commentPara = document.createElement('p'); const nameValue = nameField.value; const commentValue = commentField.value; namePara.textContent = nameValue; commentPara.textContent = commentValue; list.appendChild(listItem); listItem.appendChild(namePara); listItem.appendChild(commentPara); nameField.value = ''; commentField.value = ''; } ================================================ FILE: accessibility/assessment-start/assessment-files/style.css ================================================ /* || General setup */ html, body { margin: 0; padding: 0; } html { font-size: 10px; background-color: #dde; } body { width: 80%; min-width: 1024px; margin: 0 auto; } /* || typography */ font[size="7"], font[size="6"], font[size="5"] { font-family: 'Sonsie One', cursive; color: #2a2a2a; } p, input, li, table, label { font-family: 'Open Sans Condensed', sans-serif; color: #2a2a2a; } font[size="7"] { font-size: 4rem; text-align: center; color: white; text-shadow: 2px 2px 10px black; } font[size="6"] { font-size: 3rem; text-align: center; } font[size="5"] { font-size: 2.2rem; } p, li, table { font-size: 1.6rem; line-height: 1.5; } /* || header layout */ div[class="nav"], article, footer, .secondary { background-color: green; } article, footer, .secondary { padding: 10px 30px; } article { margin-right: 10px; } div[class="nav"] { height: 50px; background-color: ff80ff; display: flex; padding: 1% 0; margin-bottom: 10px; } div[class="nav"] ul { padding: 0; list-style-type: none; flex: 2; display: flex; } div[class="nav"] li { display: inline; text-align: center; flex: 1; } div[class="nav"] a { display: inline-block; font-size: 2rem; text-transform: uppercase; text-decoration: none; color: black; } div[class="nav"] .search { flex: 1; display: flex; align-items: center; height: 100%; padding: 0 2em; } .search input { font-size: 1.6rem; height: 32px; } .search input[type="search"] { flex: 3; } .search input[type="submit"] { flex: 1; margin-left: 1rem; background: #333; border: 0; color: white; } /* || main layout */ main { display: flex; } article { flex: 5; } .secondary { flex: 2; } footer { margin-top: 10px; } /* Table styling */ table { width: 100%; background-color: #dde; border-collapse: collapse; } th, td { padding: 10px; } td { text-align: center; } th[scope="col"] { border-bottom: 1px solid black; } tbody tr:nth-child(odd) { background-color: #def; } /* styling content images and audio */ img, audio { display: block; margin: 0 auto; } audio { width: 500px; } /* Comments styling */ .comments { background-color: #def; padding: 10px; } .show-hide { cursor: pointer; } .comments font[size="6"] { font-size: 2rem; } .comments font[size="6"]:nth-of-type(2) { margin-bottom: 0; } .comment-form { margin-bottom: 3rem; } .comment-form .flex-pair { display: flex; padding: 0 3rem 1rem; } .comment-form label { align-self: center; flex: 2; text-align: right; } .comment-form input { margin-left: 1rem; flex: 6; } .show-hide { text-align: center; width: 150px; } .comment-form input, .comment-form label, .show-hide { font-size: 1.6rem; line-height: 32px; } .comment-form input[type="submit"], .show-hide { background: #333; border: 0; color: white; } .comment-form input[type="submit"] { width: 30%; display: block; margin: 0 auto; } .comment-container { margin-top: 0; } .comment-container li { list-style-type: none; display: flex; } .comment-container li p:nth-child(1) { flex: 1; font-weight: bold; } .comment-container li p:nth-child(2) { flex: 5; } ================================================ FILE: accessibility/assessment-start/index.html ================================================ Accessibility assessment
Welcome to our wildlife website
The trouble with Bears

By Evan Wild

Tall, lumbering, angry, dangerous. The real live bears of this world are proud, independent creatures, self-serving and always on the hunt for food. Nothing like the bears you see on TV, like Baloo from renowned documentary, The Jungle Book.

So what are bears really like, and why does the world's media portray them with such a skewed vision? In this article we try to answer those questions, and give you a real insight into the life of the bear.

Types of bear

Bears come in two varieties — large and medium. You don't get small bears. If you have seen a small bear, then it was in fact probably a baby bear (cub) from another species.

Bears can also be classified in terms of their habitat — both large and medium bears are just as at home in urban areas as they are in the countryside. Different habitats encourange different behaviour however, as you'll find out below. The below table also gives you some useful facts about bears.

Bear Type Coat Adult size Habitat Lifespan Diet
Wild Brown or black 1.4 to 2.8 meters Woods and forests 25 to 28 years Fish, meat, plants
Urban North Face 18 to 22 Condos and coffee shops 20 to 32 years Starbucks, sushi
Habitats and Eating habits

Wild bears eat a variety of meat, fish, fruit, nuts, and other naturally growing ingredients. In general they will hunt for food themselves in woodland or rivers, but at a push they will track down their sustenance from farms or country houses. They tend to live in relative isolation, in caves, tents, or cottages.



Urban (gentrified) bears on the other hand have largely abandoned the old ways. They will hunt other urban creatures if necessary (including other predators like rats and foxes), but prefer to scavenge from readily available urban food outlets like dumpsters, bins, and fast food joints. When food has proven scarce, urban bears have even been known to break into people's kitchens and steal essentials like baked beans, ready meals, and microwave ovens.



Urban bears will sleep anywhere they can, from bus shelters and parks, to the toilets in McDonald's, to their own apartment.

Mating rituals

Bears are romantic creatures by nature, and will naturally look for a mate that they can spend the rest of their lives with. They will woo a potential suitor by making their dwelling look attractive — for example with cave paintings or a bed of reeds in the case of a wild bear, and mood lighting and a Michael Bublé CD in the case of an urban bear.

The following audio clip contains a fact file providing more details about bear mating rituals, along with samples and quotes from experts.

Show comments
Add comment
Your name:
Your comment:
Comments
  • Bob Fossil

    Oh I am so glad you taught me all about the big brown angry guys in the woods. With their sniffing little noses and their bad attitudes, they can sure be a menace — I was thinking of putting them all in a truck and driving them outta here. I run a zoo, you know.

©Copyright 2050 by nobody. All rights reversed.

================================================ FILE: accessibility/assessment-start/main.js ================================================ // functionality for showing/hiding the comments section const showHideBtn = document.querySelector('.show-hide'); const commentWrapper = document.querySelector('.comment-wrapper'); commentWrapper.style.display = 'none'; showHideBtn.onclick = function() { let showHideText = showHideBtn.textContent; if(showHideText === 'Show comments') { showHideBtn.textContent = 'Hide comments'; commentWrapper.style.display = 'block'; } else { showHideBtn.textContent = 'Show comments'; commentWrapper.style.display = 'none'; } }; // functionality for adding a new comment via the comments form const form = document.querySelector('.comment-form'); const nameField = document.querySelector('#name'); const commentField = document.querySelector('#comment'); const list = document.querySelector('.comment-container'); form.onsubmit = function(e) { e.preventDefault(); submitComment(); }; function submitComment() { const listItem = document.createElement('li'); const namePara = document.createElement('p'); const commentPara = document.createElement('p'); const nameValue = nameField.value; const commentValue = commentField.value; namePara.textContent = nameValue; commentPara.textContent = commentValue; list.appendChild(listItem); listItem.appendChild(namePara); listItem.appendChild(commentPara); nameField.value = ''; commentField.value = ''; } ================================================ FILE: accessibility/assessment-start/style.css ================================================ /* || General setup */ html, body { margin: 0; padding: 0; } html { font-size: 10px; background-color: #dde; } body { width: 80%; min-width: 1024px; margin: 0 auto; } /* || typography */ font[size="7"], font[size="6"], font[size="5"] { font-family: 'Sonsie One', cursive; color: #2a2a2a; } p, input, li, table, label { font-family: 'Open Sans Condensed', sans-serif; color: #2a2a2a; } font[size="7"] { font-size: 4rem; text-align: center; color: white; text-shadow: 2px 2px 10px black; } font[size="6"] { font-size: 3rem; text-align: center; } font[size="5"] { font-size: 2.2rem; } p, li, table { font-size: 1.6rem; line-height: 1.5; } /* || header layout */ div[class="nav"], article, footer, .secondary { background-color: green; } article, footer, .secondary { padding: 10px 30px; } article { margin-right: 10px; } div[class="nav"] { height: 50px; background-color: ff80ff; display: flex; padding: 1% 0; margin-bottom: 10px; } div[class="nav"] ul { padding: 0; list-style-type: none; flex: 2; display: flex; } div[class="nav"] li { display: inline; text-align: center; flex: 1; } div[class="nav"] a { display: inline-block; font-size: 2rem; text-transform: uppercase; text-decoration: none; color: black; } div[class="nav"] .search { flex: 1; display: flex; align-items: center; height: 100%; padding: 0 2em; } .search input { font-size: 1.6rem; height: 32px; } .search input[type="search"] { flex: 3; } .search input[type="submit"] { flex: 1; margin-left: 1rem; background: #333; border: 0; color: white; } /* || main layout */ main { display: flex; } article { flex: 5; } .secondary { flex: 2; } footer { margin-top: 10px; } /* Table styling */ table { width: 100%; background-color: #dde; border-collapse: collapse; } th, td { padding: 10px; } td { text-align: center; } th[scope="col"] { border-bottom: 1px solid black; } tbody tr:nth-child(odd) { background-color: #def; } /* styling content images and audio */ img, audio { display: block; margin: 0 auto; } audio { width: 500px; } /* Comments styling */ .comments { background-color: #def; padding: 10px; } .show-hide { cursor: pointer; } .comments font[size="6"] { font-size: 2rem; } .comments font[size="6"]:nth-of-type(2) { margin-bottom: 0; } .comment-form { margin-bottom: 3rem; } .comment-form .flex-pair { display: flex; padding: 0 3rem 1rem; } .comment-form label { align-self: center; flex: 2; text-align: right; } .comment-form input { margin-left: 1rem; flex: 6; } .show-hide { text-align: center; width: 150px; } .comment-form input, .comment-form label, .show-hide { font-size: 1.6rem; line-height: 32px; } .comment-form input[type="submit"], .show-hide { background: #333; border: 0; color: white; } .comment-form input[type="submit"] { width: 30%; display: block; margin: 0 auto; } .comment-container { margin-top: 0; } .comment-container li { list-style-type: none; display: flex; } .comment-container li p:nth-child(1) { flex: 1; font-weight: bold; } .comment-container li p:nth-child(2) { flex: 5; } ================================================ FILE: accessibility/css/form-css.html ================================================ Form CSS example

Form CSS example

================================================ FILE: accessibility/css/form-validation.html ================================================ Form validation example

Form validation example

================================================ FILE: accessibility/css/mouse-and-keyboard-events.html ================================================ Mouse and keyboard events example

Mouse and keyboard events example

A lego pirate figure with a cutlass, pistol, tricornered hat, peg leg, long hair and beard. ================================================ FILE: accessibility/css/table-css.html ================================================ Table CSS example

Table CSS example

Name Age Gender
Gabriel 13 Male
Elva 8 Female
Freida 5 Female
================================================ FILE: accessibility/css/validation.js ================================================ const inputs = document.querySelectorAll('input'); const labels = document.querySelectorAll('label'); const form = document.querySelector('form'); let formItems = []; const errorField = document.querySelector('.errors'); const errorList = document.querySelector('.errors ul'); for(let i = 0; i < inputs.length-1; i++) { let obj = {}; obj.label = labels[i]; obj.input = inputs[i]; formItems.push(obj); } errorField.style.left = '-100%'; form.onsubmit = validate; function validate(e) { errorList.innerHTML = ''; for(let i = 0; i < formItems.length; i++) { let testItem = formItems[i]; if(testItem.input.value === '') { errorField.style.left = '360px'; createLink(testItem); } } if(errorList.innerHTML !== '') { e.preventDefault(); } } function createLink(testItem) { const listItem = document.createElement('li'); const anchor = document.createElement('a'); anchor.textContent = testItem.input.name + ' field is empty: fill in your ' + testItem.input.name + '.'; anchor.href = '#' + testItem.input.name; anchor.onclick = function() { testItem.input.focus(); }; listItem.appendChild(anchor); errorList.appendChild(listItem); } ================================================ FILE: accessibility/html/accessible-image.html ================================================ Accessible image example

Images

A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth. A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.

The Mozilla red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.

================================================ FILE: accessibility/html/bad-form.html ================================================ Bad form example

Bad form

Enter your name:

Enter your age:

================================================ FILE: accessibility/html/bad-links.html ================================================ Bad links example

Bad links

Further information

================================================ FILE: accessibility/html/bad-semantics.html ================================================ Bad semantics example My heading

Prow scuttle parrel provost Sail ho shrouds spirits boom mizzenmast yardarm. Pinnace holystone mizzenmast quarter crow's nest nipperkin grog yardarm hempen halter furl. Swab barque interloper chantey doubloon starboard grog black jack gangway rutters. Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors. Bring a spring upon her cable holystone blow the man down spanker Shiver me timbers to go on account lookout wherry doubloon chase. Belay yo-ho-ho keelhaul squiffy black spot yardarm spyglass sheet transom heave to.

Trysail Sail ho Corsair red ensign hulk smartly boom jib rum gangway. Case shot Shiver me timbers gangplank crack Jenny's tea cup ballast Blimey lee snow crow's nest. Fluke jib scourge of the seven seas boatswain schooner gaff booty Jack Tar transom spirits. Crack Jennys tea cup Sail ho killick transom trysail Chain Shot. Measured fer yer chains lateen sail Davy Jones' Locker prow wench weigh anchor. Port me hang the jib Davy Jones' Locker skysail pirate. Sail ho run a shot across the bow fluke belaying pin boom carouser. Chase guns broadside Corsair mizzen provost Admiral of the Black. Red ensign list brigantine line booty hands. Booty topgallant grapple coffer pinnace fire ship.

My subheading

Yard Pirate Round hearties Sail ho log salmagundi. Ye scuttle smartly Jack Tar man-of-war measured fer yer chains. Shrouds sloop transom quarter wench case shot. Hempen halter Cat o'nine tails red ensign strike colors lugsail hogshead. Barbary Coast parrel bilge ho aft gibbet. Tack red ensign crimp yo-ho-ho Buccaneer gaff. Keel careen scuppers port hands reef sails. Hands square-rigged draft lugsail heave to bounty. Clap of thunder scuppers trysail cable yo-ho-ho coxswain. Jury mast cable mizzenmast hail-shot keelhaul execution dock. Black jack ho shrouds bilge water avast hardtack. Clipper deadlights brigantine measured fer yer chains poop deck Blimey. Topsail Arr yo-ho-ho pillage bucko handsomely. Draft pinnace holystone Cat o'nine tails Letter of Marque loaded to the gunwalls.

My 2nd subheading

Topgallant American Main coxswain poop deck sloop come about. Piracy hail-shot handsomely Spanish Main flogging interloper. Run a rig lee yo-ho-ho gangplank Pieces of Eight gabion. Sloop Spanish Main reef capstan deadlights rope's end. Six pounders red ensign mizzenmast mizzen chase guns topmast. Broadside fore splice the main brace heave down Chain Shot bounty. Poop deck ballast Jack Tar pressgang jack walk the plank. ================================================ FILE: accessibility/html/bad-table.html ================================================ Bad table example

Bad table

Name Age Gender
Gabriel 13 Male
Elva 8 Female
Freida 5 Female
================================================ FILE: accessibility/html/dino-info.html ================================================ Dinosaur longdesc

A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.

================================================ FILE: accessibility/html/good-form.html ================================================ Good form example

Good form

================================================ FILE: accessibility/html/good-links.html ================================================ Good links example

Good links

Further information

================================================ FILE: accessibility/html/good-semantics.html ================================================ Good semantics example

My heading

Prow scuttle parrel provost Sail ho shrouds spirits boom mizzenmast yardarm. Pinnace holystone mizzenmast quarter crow's nest nipperkin grog yardarm hempen halter furl. Swab barque interloper chantey doubloon starboard grog black jack gangway rutters. Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors. Bring a spring upon her cable holystone blow the man down spanker Shiver me timbers to go on account lookout wherry doubloon chase. Belay yo-ho-ho keelhaul squiffy black spot yardarm spyglass sheet transom heave to.

Trysail Sail ho Corsair red ensign hulk smartly boom jib rum gangway. Case shot Shiver me timbers gangplank crack Jennys tea cup ballast Blimey lee snow crow's nest rutters. Fluke jib scourge of the seven seas boatswain schooner gaff booty Jack Tar transom spirits. Crack Jennys tea cup Sail ho killick transom trysail Chain Shot. Measured fer yer chains lateen sail Davy Jones' Locker prow wench weigh anchor. Port me hang the jib Davy Jones' Locker skysail pirate. Sail ho run a shot across the bow fluke belaying pin boom carouser. Chase guns broadside Corsair mizzen provost Admiral of the Black. Red ensign list brigantine line booty hands. Booty topgallant grapple coffer pinnace fire ship.

My subheading

Yard Pirate Round hearties Sail ho log salmagundi. Ye scuttle smartly Jack Tar man-of-war measured fer yer chains. Shrouds sloop transom quarter wench case shot. Hempen halter Cat o'nine tails red ensign strike colors lugsail hogshead. Barbary Coast parrel bilge ho aft gibbet. Tack red ensign crimp yo-ho-ho Buccaneer gaff. Keel careen scuppers port hands reef sails. Hands square-rigged draft lugsail heave to bounty. Clap of thunder scuppers trysail cable yo-ho-ho coxswain. Jury mast cable mizzenmast hail-shot keelhaul execution dock. Black jack ho shrouds bilge water avast hardtack. Clipper deadlights brigantine measured fer yer chains poop deck Blimey. Topsail Arr yo-ho-ho pillage bucko handsomely. Draft pinnace holystone Cat o'nine tails Letter of Marque loaded to the gunwalls.

My 2nd subheading

Topgallant American Main coxswain poop deck sloop come about. Piracy hail-shot handsomely Spanish Main flogging interloper. Run a rig lee yo-ho-ho gangplank Pieces of Eight gabion. Sloop Spanish Main reef capstan deadlights rope's end. Six pounders red ensign mizzenmast mizzen chase guns topmast. Broadside fore splice the main brace heave down Chain Shot bounty. Poop deck ballast Jack Tar pressgang jack walk the plank.

================================================ FILE: accessibility/html/native-keyboard-accessibility.html ================================================ Native keyboard accessibility

Links

This is a link to Mozilla.

Another link, to the Mozilla Developer Network.

Buttons

Form

================================================ FILE: accessibility/html/style.css ================================================ /* || General setup */ html, body { margin: 0; padding: 0; } html { font-size: 10px; } body { width: 1200px; margin: 0 auto; } table { border-collapse: collapse; } /* || typography */ h1, h2, h3 { font-family: 'Sonsie One', cursive; color: #2a2a2a; } p, input, li, a { font-family: 'Open Sans Condensed', sans-serif; color: #2a2a2a; } h1 { font-size: 4rem; color: white; text-shadow: 2px 2px 10px black; } h2 { font-size: 3rem; } h3 { font-size: 2.2rem; } p, li, a { font-size: 1.6rem; line-height: 1.5; } /* || header layout */ #main td, #aside td, #footer td { padding: 10px; } #content { margin-right: 10px; } #nav { height: 50px; } #nav td { padding: 20px; } #nav a { display: block; font-size: 2rem; text-transform: uppercase; text-align: center; text-decoration: none; } input { font-size: 1.6rem; height: 32px; width: 100%; } button { width: 100%; height: 32px; background: #333; border: 0; color: white; } ================================================ FILE: accessibility/html/table-layout.html ================================================ My page title

Header

Article heading

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Donec a diam lectus. Set sit amet ipsum mauris. Maecenas congue ligula as quam viverra nec consectetur ant hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur.

subsection

Donec ut librero sed accu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor.

Pelientesque auctor nisi id magna consequat sagittis. Curabitur dapibus, enim sit amet elit pharetra tincidunt feugiat nist imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros.

Another subsection

Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum soclis natoque penatibus et manis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.

Vivamus fermentum semper porta. Nunc diam velit, adipscing ut tristique vitae sagittis vel odio. Maecenas convallis ullamcorper ultricied. Curabitur ornare, ligula semper consectetur sagittis, nisi diam iaculis velit, is fringille sem nunc vet mi.

Related

================================================ FILE: accessibility/mobile/common-job-types.html ================================================ Common job types example

Common job types form

================================================ FILE: accessibility/mobile/html5-form-examples.html ================================================ HTML5 form examples

HTML5 form examples

================================================ FILE: accessibility/mobile/multi-control-box-drag.html ================================================ Multi control box drag example
================================================ FILE: accessibility/mobile/simple-box-drag.html ================================================ Simple box drag example
================================================ FILE: accessibility/mobile/simple-button-example.html ================================================ Simple button example

Simple button example

================================================ FILE: accessibility/multimedia/audio-transcript-ui/index.html ================================================ Audio transcript example

Audio transcript example

00:00

Person1: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque at convallis libero, ut ultricies massa. Integer vel tempor nisi. Nunc scelerisque enim est. Duis lorem ipsum, semper vitae sem at, ultricies interdum ex.

Person 2: In consectetur maximus blandit. Curabitur convallis iaculis quam, eu porta erat suscipit sit amet. Morbi viverra placerat ipsum, non bibendum libero egestas eu. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed quis condimentum ante. Nullam ullamcorper faucibus eros. Quisque egestas non risus a faucibus. Curabitur luctus tincidunt turpis in scelerisque.

Person 1: Suspendisse sapien ipsum, lacinia eu bibendum in, congue eu purus. Sed fringilla sollicitudin faucibus. Cras sodales sapien neque, eget gravida augue lobortis ac. Mauris blandit faucibus porta.

Person 2: Fusce non libero eget nisl porta egestas ut sed elit. Nullam molestie lectus ut elementum sagittis. Donec dictum nunc leo, quis gravida diam varius non. Nam ac nisl vel nibh iaculis convallis vel eget arcu. Mauris pharetra purus ac ornare pellentesque. Fusce in leo nunc. Nunc eget vehicula sem, quis aliquam lorem.

Person 3: Ut auctor ornare pulvinar. Morbi nisl ipsum, pellentesque et bibendum eget, vestibulum in massa. Cras egestas cursus est sed ultrices. Etiam vel dui felis.

================================================ FILE: accessibility/multimedia/audio-transcript-ui/main.js ================================================ // grab references to buttons and video const playPauseBtn = document.querySelector('.playpause'); const stopBtn = document.querySelector('.stop'); const rwdBtn = document.querySelector('.rwd'); const fwdBtn = document.querySelector('.fwd'); const timeLabel = document.querySelector('.time'); const player = document.querySelector('audio'); // Remove the native controls from all players player.removeAttribute('controls'); // Define constructor for player controls object playPauseBtn.onclick = function() { if(player.paused) { player.play(); playPauseBtn.textContent = 'Pause'; } else { player.pause(); playPauseBtn.textContent = 'Play'; } }; stopBtn.onclick = function() { player.pause(); player.currentTime = 0; playPauseBtn.textContent = 'Play'; }; rwdBtn.onclick = function() { player.currentTime -= 3; }; fwdBtn.onclick = function() { player.currentTime += 3; if(player.currentTime >= player.duration || player.paused) { player.pause(); player.currentTime = 0; playPauseBtn.textContent = 'Play'; } }; player.ontimeupdate = function() { let minutes = Math.floor(player.currentTime / 60); let seconds = Math.floor(player.currentTime - minutes * 60); let minuteValue; let secondValue; if (minutes<10) { minuteValue = "0" + minutes; } else { minuteValue = minutes; } if (seconds<10) { secondValue = "0" + seconds; } else { secondValue = seconds; } mediaTime = minuteValue + ":" + secondValue; timeLabel.textContent = mediaTime; }; // Control transcript display const transcript = document.querySelector('.transcript'); const transcriptBtn = document.querySelector('.transcript-container button'); transcriptBtn.onclick = function() { if(transcriptBtn.textContent === 'Show transcript') { transcript.style.height = '150px'; transcriptBtn.textContent = 'Hide transcript'; } else { transcript.style.height = '0'; transcriptBtn.textContent = 'Show transcript'; } }; ================================================ FILE: accessibility/multimedia/custom-controls-OOJS/index.html ================================================ Multiple media players with custom controls

Multiple media players with custom controls

Audio player

Video player

================================================ FILE: accessibility/multimedia/custom-controls-OOJS/main.js ================================================ // Get references to all audio and video players // Store them all in a single array const videos = document.querySelectorAll('video'); const audios = document.querySelectorAll('audio'); let players = []; for(let a = 0; a < audios.length; a++) { players.push(audios[a]); } for(let v = 0; v < videos.length; v++) { players.push(videos[v]); } // Remove the native controls from all players for(let p = 0; p < players.length; p++) { players[p].removeAttribute('controls'); } // Define constructor for player controls object function PlayerController(player, playPauseBtn, stopBtn, rwdBtn, fwdBtn, timeLabel) { this.player = player; this.playPauseBtn = playPauseBtn; this.stopBtn = stopBtn; this.rwdBtn = rwdBtn; this.fwdBtn = fwdBtn; this.timeLabel = timeLabel; this.interval; this.playPauseBtn.onclick = function() { if(player.paused) { player.play(); playPauseBtn.textContent = 'Pause'; } else { player.pause(); playPauseBtn.textContent = 'Play'; } } this.stopBtn.onclick = function() { player.pause(); player.currentTime = 0; playPauseBtn.textContent = 'Play'; } this.rwdBtn.onclick = function() { player.currentTime -= 3; } this.fwdBtn.onclick = function() { player.currentTime += 3; if(player.currentTime >= player.duration || player.paused) { player.pause(); player.currentTime = 0; playPauseBtn.textContent = 'Play'; } } this.player.ontimeupdate = function() { let minutes = Math.floor(player.currentTime / 60); let seconds = Math.floor(player.currentTime - minutes * 60); let minuteValue; let secondValue; if (minutes<10) { minuteValue = "0" + minutes; } else { minuteValue = minutes; } if (seconds<10) { secondValue = "0" + seconds; } else { secondValue = seconds; } mediaTime = minuteValue + ":" + secondValue; timeLabel.textContent = mediaTime; } } // Add the controls bar to all players for(let i = 0; i < players.length; i++) { const controls = document.createElement('div'); controls.setAttribute('class', 'controls'); players[i].parentNode.appendChild(controls); const playpause = document.createElement('button'); const stop = document.createElement('button'); const rwd = document.createElement('button'); const fwd = document.createElement('button'); const time = document.createElement('div'); playpause.setAttribute('class', 'playpause'); stop.setAttribute('class', 'stop'); rwd.setAttribute('class', 'rwd'); fwd.setAttribute('class', 'fwd'); time.setAttribute('class', 'time'); playpause.textContent = 'Play'; stop.textContent = 'Stop'; rwd.textContent = 'Rwd'; fwd.textContent = 'Fwd'; time.textContent = '00:00'; controls.appendChild(playpause); controls.appendChild(stop); controls.appendChild(rwd); controls.appendChild(fwd); controls.appendChild(time); let playerInstance = new PlayerController(players[i], playpause, stop, rwd, fwd, time); } ================================================ FILE: accessibility/multimedia/custom-controls-basic/index.html ================================================ Basic custom controls

Basic custom controls

00:00
================================================ FILE: accessibility/multimedia/custom-controls-basic/main.js ================================================ // grab references to buttons and video const playPauseBtn = document.querySelector('.playpause'); const stopBtn = document.querySelector('.stop'); const rwdBtn = document.querySelector('.rwd'); const fwdBtn = document.querySelector('.fwd'); const timeLabel = document.querySelector('.time'); const player = document.querySelector('video'); // Remove the native controls from all players player.removeAttribute('controls'); // Define constructor for player controls object playPauseBtn.onclick = function() { if(player.paused) { player.play(); playPauseBtn.textContent = 'Pause'; } else { player.pause(); playPauseBtn.textContent = 'Play'; } }; stopBtn.onclick = function() { player.pause(); player.currentTime = 0; playPauseBtn.textContent = 'Play'; }; rwdBtn.onclick = function() { player.currentTime -= 3; }; fwdBtn.onclick = function() { player.currentTime += 3; if(player.currentTime >= player.duration || player.paused) { player.pause(); player.currentTime = 0; playPauseBtn.textContent = 'Play'; } }; player.ontimeupdate = function() { let minutes = Math.floor(player.currentTime / 60); let seconds = Math.floor(player.currentTime - minutes * 60); let minuteValue; let secondValue; if (minutes<10) { minuteValue = "0" + minutes; } else { minuteValue = minutes; } if (seconds<10) { secondValue = "0" + seconds; } else { secondValue = seconds; } mediaTime = minuteValue + ":" + secondValue; timeLabel.textContent = mediaTime; }; ================================================ FILE: accessibility/multimedia/custom-controls-start.html ================================================ Basic custom controls

Basic custom controls

00:00
================================================ FILE: accessibility/multimedia/custom-controls.css ================================================ * { box-sizing: border-box; } html { font-family: sans-serif; } .player { width: 480px; margin: 10px auto; border: 1px solid #ccc; } video, audio, .controls { width: 100%; } .controls { height: 36px; } button { display: block; float: left; border: 0; margin-right: 2px; height: 100%; width: 50px; cursor: pointer; } button:hover, button:focus { background-color: #ddd; } button:active { background-color: #ccc; } .controls div { font-size: 12px; display: inline-block; line-height: 36px; width: 45px; float: right; } video { margin-bottom: -5px; } ================================================ FILE: accessibility/multimedia/native-controls.html ================================================ Multiple media players with native controls

Multiple media players with native controls


================================================ FILE: accessibility/tasks/html-css/aria/aria1-download.html ================================================ WAI-ARIA: Task 1

My favorite animals:

Pig
Gazelle
Llama
Majestic moose
Hedgehog
================================================ FILE: accessibility/tasks/html-css/aria/aria1.html ================================================ WAI-ARIA: Task 1

My favorite animals:

Pig
Gazelle
Llama
Majestic moose
Hedgehog
================================================ FILE: accessibility/tasks/html-css/aria/aria2-download.html ================================================ WAI-ARIA: Task 2
================================================ FILE: accessibility/tasks/html-css/aria/aria2.html ================================================ WAI-ARIA: Task 2
================================================ FILE: accessibility/tasks/html-css/aria/marking.md ================================================ # WAI-ARIA marking guide The aim of these tasks is to demonstrate an understanding of the techniques covered in the [WAI-ARIA Basics](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/WAI-ARIA_basics) lesson in Learn Web Development on MDN. ## Task 1 In our first ARIA task, we present you with a section of non-semantic markup, which is obviously meant to be a list. Assuming you are not able to change the elements used, how can you allow screenreader users to recognize this as a list? The `list` and `listitem` roles are what you need here. The updated markup would look like so: ```html
Pig
Gazelle
Llama
Majestic moose
Hedgehog
``` ## Task 2 In our second WAI-ARIA task, we present a simple search form, and we want you to add in a couple of WAI-ARIA features to improve its accessibility: 1. How can you allow the search form to be called out as a separate landmark on the page by screenreaders, to make it easily findable? 2. How can you give the search input a suitable label, without explicitly adding a visible text label to the DOM? Answers: 1. Give the `
` element a `role="search"`. Most screenreaders will explicitly call this out as a search form, and/or include it as a separate landmark in the page's landmarks list. 2. Include label text inside an `aria-label=""` attribute on the `` element. This way it won't be visible on the page, but it will be read out by screenreaders. The finished HTML should look something like this: ```html
``` ## Task 3 For this final WAI-ARIA task, we return to an example we previously saw in the [CSS and JavaScript skilltest](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/CSS_and_JavaScript/Test_your_skills:_CSS_and_JavaScript_accessibility). As before, we have a simple app that presents a list of animal names. Clicking one of the animal names causes a further description of that animal to appear in a box below the list. Here, we are starting with a mouse- and keyboard-accessible version. The problem we have now is that when the DOM changes to show a new description, screenreaders cannot see what has changed. Can you update it so that description changes are announced by the screenreader? There are two ways to solve this: - Add an `aria-live=""` attribute to the animal-description `
` to turn it into a live region, so when its content changes, the updated content will be read out by a screenreader. The best value is probably `assertive`, which makes the screenreader read out the updated content as soon as it changed. `polite` means that the screenreader will wait until other descriptions have finished before it starts reading out the changed content. - Add a `role="alert"` attribute to the animal-description `
`, to make it have alert box semantics. This has the same effect on the screenreader as setting `aria-live="assertive"` on it. ================================================ FILE: accessibility/tasks/html-css/css/css-a11y1-download.html ================================================ CSS accessibility: Task 1 ================================================ FILE: accessibility/tasks/html-css/css/css-a11y1.html ================================================ CSS accessibility: Task 1
================================================ FILE: accessibility/tasks/html-css/css/css-a11y2-download.html ================================================ CSS accessibility: Task 2

I am the eggman

Prow scuttle parrel provost Sail ho shrouds spirits boom mizzenmast yardarm. Pinnace holystone mizzenmast quarter crow's nest nipperkin grog yardarm hempen halter furl.

They are the eggman

Swab barque interloper chantey doubloon starboard grog black jack gangway rutters.

I am the walrus

Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors.

================================================ FILE: accessibility/tasks/html-css/css/css-a11y2.html ================================================ CSS accessibility: Task 2

I am the eggman

Prow scuttle parrel provost Sail ho shrouds spirits boom mizzenmast yardarm. Pinnace holystone mizzenmast quarter crow's nest nipperkin grog yardarm hempen halter furl.

They are the eggman

Swab barque interloper chantey doubloon starboard grog black jack gangway rutters.

I am the walrus

Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors.

================================================ FILE: accessibility/tasks/html-css/css/marking.md ================================================ # CSS and JS accessibility marking guide The aim of these tasks is to demonstrate an understanding of the techniques covered in the [CSS and JavaScript accessibility best practices](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/CSS_and_JavaScript) lesson in Learn Web Development on MDN. ## Task 1 In the first task you are presented with a list of links. However, their accessibility is pretty bad — there is no way to really tell that they are links, or to tell which one the user is focussed on. We'd like you to assume that the existing ruleset with the `a` selector is supplied by some CMS, and that you can't change it — instead, you need to create new rules to make the links look and behave like links, and for the user to be able to tell where they are in the list. The CSS could look something like this: ```css li a { text-decoration: underline; color: rgb(150, 0, 0); } li a:hover, li a:focus { text-decoration: none; color: rgb(255, 0, 0); } ``` ## Task 2 In this next task you are presented with a simple bit of content — just headings and paragraphs. There are accessibility issues with the colors and sizing of the text; we'd like you to: 1. Explain what the problems are, and what the guidelines are that state the acceptable values for color and sizing. 2. Select new values for the color and font-size that fix the problem. 3. Update the CSS with these new values to fix the problem. 4. Test the code to make sure the problem is now fixed. Explain what tools or methods you used to select the new values and test the code. The answers: 1. (Q1) The problems are that first of all, the color contrast is not acceptable, as per WCAG criteria [1.4.3 (AA)](https://www.w3.org/TR/WCAG21/#contrast-minimum) and [1.4.6 (AAA)](https://www.w3.org/TR/WCAG21/#contrast-enhanced), and secondly, the text is sized using vw units, which means that it is not zoomable in most browsers. [WCAG 1.4.4 (AA)](https://www.w3.org/TR/WCAG21/#resize-text) states that text should be resizable. 2. (Qs 2 and 3) to fix the code, you need to - Choose a much better contrasting set of background and foreground colors. - Use some different units to size the text (such as rem or even px), or even implement something that uses a combination of vw and other units, if you want it resizable but still relative in part to the viewport size 3. For testing: - You can test color contrast using a tool such as [aXe](https://www.deque.com/axe/), The [Firefox Accessibility Inspector](https://developer.mozilla.org/en-US/docs/Tools/Accessibility_inspector), or even a simple standalone web page tool like the [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/). - For text resizing, you'd need to load the example in a browser and try to resize it. Resizing vw unit-sized text works in Safari, but not Firefox or Chromium-based browsers. For the updated code, something like this would work for the updated color scheme: ```css main { padding: 20px; background-color: red; } h1, h2, p { color: black; } ``` And something like this would work for the font sizing: ```css h1 { font-size: calc(2.5rem); } h2 { font-size: calc(2rem); } p { font-size: calc(1.2rem); } ``` Or this, if you want to do something a bit cleverer that gives you resizable viewport-relative units: ```css h1 { font-size: calc(1.5vw + 1rem); } h2 { font-size: calc(1.2vw + 0.7rem); } p { font-size: calc(1vw + 0.4rem); } ``` ## Task 3 In our final task here, you have some JavaScripting to do. We have a simple app that presents a list of animal names. Clicking one of the animal names causes a further description of that animal to appear in a box below the list. But it is not very accessible — in its current state you can only operate it with the mouse. We'd like you to add to the HTML and JavaScript to make it keyboard acessible too. Answers: 1. To begin with, you'll need to add `tabindex="0"` to the list items to make them focusable via the keyboard. 2. Then you'll need to add in another event listener inside the `forEach()` loop, to make the code respond to keys being pressed while the list items are selected. It is probably a good idea to make it respond to a specific key, such as "Enter", in which case something like the following is probably acceptable: ```css item.addEventListener('keyup', function(e) { if(e.key === 'Enter') { handleSelection(e); } }); ``` ================================================ FILE: accessibility/tasks/html-css/html/html-a11y1-download.html ================================================ HTML accessibility: Task 1 Need help?

If you have any problems with our products, our support center can offer you all the help you need, whether you want:

1. Advice choosing a new product
2. Tech support on an existing product
3. Refund and cancellation assistance

Contact us now

Our help center contains live chat, e-mail addresses, and phone numbers.

Find Contact Details

Find out answers

Our Forums section contains a large knowledge base of searchable previously asked questions, and you can always ask a new question if you can't find the answer you're looking for.

Access Forums
================================================ FILE: accessibility/tasks/html-css/html/html-a11y1.html ================================================ HTML accessibility: Task 1
Need help?

If you have any problems with our products, our support center can offer you all the help you need, whether you want:

1. Advice choosing a new product
2. Tech support on an existing product
3. Refund and cancellation assistance

Contact us now

Our help center contains live chat, e-mail addresses, and phone numbers.

Find Contact Details

Find out answers

Our Forums section contains a large knowledge base of searchable previously asked questions, and you can always ask a new question if you can't find the answer you're looking for.

Access Forums
================================================ FILE: accessibility/tasks/html-css/html/html-a11y2-download.html ================================================ HTML accessibility: Task 2
  • Name
  • Age
  • Email address
================================================ FILE: accessibility/tasks/html-css/html/html-a11y2.html ================================================ HTML accessibility: Task 2
  • Name
  • Age
  • Email address
================================================ FILE: accessibility/tasks/html-css/html/html-a11y3-download.html ================================================ HTML accessibility: Task 3

For more information about our activities, check out our fundraising page (click here), education page (click here), sponsorship pack (click here), and assessment sheets (click here).

================================================ FILE: accessibility/tasks/html-css/html/html-a11y3.html ================================================ HTML accessibility: Task 3

For more information about our activities, check out our fundraising page (click here), education page (click here), sponsorship pack (click here), and assessment sheets (click here).

================================================ FILE: accessibility/tasks/html-css/html/html-a11y4-download.html ================================================ HTML accessibility: Task 4
A star that I use to decorate my page

Groovy images

================================================ FILE: accessibility/tasks/html-css/html/html-a11y4.html ================================================ HTML accessibility: Task 4
A star that I use to decorate my page

Groovy images

================================================ FILE: accessibility/tasks/html-css/html/marking.md ================================================ # HTML accessibility marking guide The aim of these tasks is to demonstrate an understanding of the techniques covered in the [HTML: A good basis for accessibility](https://developer.mozilla.org/en-US/docs/Learn/Accessibility/HTML) lesson in Learn Web Development on MDN. ## Task 1 In this task we will test your understanding of text semantics, and why they are good for accessibility. You don't need to worry too much about recreating the _exact_ same look and text sizing, as long as the semantics are good. The given text is a simple information panel with action buttons: ```html Need help?

If you have any problems with our products, our support center can offer you all the help you need, whether you want:

1. Advice choosing a new product
2. Tech support on an existing product
3. Refund and cancellation assistance

Contact us now

Our help center contains live chat, e-mail addresses, and phone numbers.

Find Contact Details


Find out answers

Our Forums section contains a large knowledge base of searchable previously asked questions, and you can always ask a new question if you can't find the answer you're looking for.

Access forums
``` But of course, this is terrible for semantics and accessibility. A much better set of markup would look like so: ```html

Need help?

If you have any problems with our products, our support center can offer you all the help you need, whether you want:

  • Advice choosing a new product
  • Tech support on an existing product
  • Refund and cancellation assistance

Contact us now

Our help center contains live chat, e-mail addresses, and phone numbers.

Find out answers

Our Forums section contains a large knowledge base of searchable previously asked questions, and you can always ask a new question if you can't find the answer you're looking for.

``` You can get a couple of extra marks for: 1. Just using `

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, XOXO +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

================================================ FILE: css/css-layout/flexbox/flex-align0.html ================================================ Flexbox align 0 — starting code
================================================ FILE: css/css-layout/flexbox/flex-align1.html ================================================ Flexbox align 1 — center aligned horizontally and vertically
================================================ FILE: css/css-layout/flexbox/flex-ordering.html ================================================ Flexbox ordering example
================================================ FILE: css/css-layout/flexbox/flexbox-wrap0.html ================================================ Flexbox wrap 0 — children overflowing

Sample flexbox example

First article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Second article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Third article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, XOXO +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

Fourth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Fifth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Sixth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, XOXO +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

Seventh article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Eighth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Ninth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, XOXO +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

Tenth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Eleventh article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Twelfth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, XOXO +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

================================================ FILE: css/css-layout/flexbox/flexbox-wrap1.html ================================================ Flexbox wrap 1 — wrapping our content to new rows

Sample flexbox example

First article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Second article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Third article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

Fourth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Fifth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Six article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

Seventh article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Eighth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Ninth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

Tenth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Eleventh article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Twelfth article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

================================================ FILE: css/css-layout/flexbox/flexbox0.html ================================================ Flexbox 0 — starting code

Sample flexbox example

First article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Second article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Third article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, XOXO +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

================================================ FILE: css/css-layout/flexbox/flexbox1.html ================================================ Flexbox 1 — basic flexbox model chosen

Sample flexbox example

First article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Second article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Third article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, XOXO +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

================================================ FILE: css/css-layout/flexbox/flexbox2.html ================================================ Flexbox 2 — flexible sized items

Sample flexbox example

First article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Second article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Third article

Tacos actually microdosing, pour-over semiotics banjo chicharrones retro fanny pack portland everyday carry vinyl typewriter. Tacos PBR&B pork belly, everyday carry ennui pickled sriracha normcore hashtag polaroid single-origin coffee cold-pressed. PBR&B tattooed trust fund twee, leggings salvia iPhone photo booth health goth gastropub hammock.

Cray food truck brunch, XOXO +1 keffiyeh pickled chambray waistcoat ennui. Organic small batch paleo 8-bit. Intelligentsia umami wayfarers pickled, asymmetrical kombucha letterpress kitsch leggings cold-pressed squid chartreuse put a bird on it. Listicle pickled man bun cornhole heirloom art party.

================================================ FILE: css/css-layout/floats/0_two-column-layout.html ================================================ 2 column layout example

2 column layout example

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

================================================ FILE: css/css-layout/floats/1-basic-example.html ================================================ Simple float example

Simple float example

Float

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate.

Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

================================================ FILE: css/css-layout/floats/1_three-column-layout.html ================================================ 3 column layout example

3 column layout example

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Third column

Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.

================================================ FILE: css/css-layout/floats/2-line-boxes.html ================================================ Simple float example

Simple float example

Float

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate.

Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

================================================ FILE: css/css-layout/floats/2_float-disaster.html ================================================ Float disaster

Float disaster

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Third column

Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.

©2016 your imagination. This isn't really copyright, this is a mockery of the very concept. Use as you wish.

================================================ FILE: css/css-layout/floats/2a_fixed-by-clear.html ================================================ Float disaster

Float disaster

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Third column

Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.

©2016 your imagination. This isn't really copyright, this is a mockery of the very concept. Use as you wish.

================================================ FILE: css/css-layout/floats/3-clearing.html ================================================ Simple clearing example

Float clearing example

Float

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate.

Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

================================================ FILE: css/css-layout/floats/3_broken-layout.html ================================================ Float disaster

Float disaster

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Third column

Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.

©2016 your imagination. This isn't really copyright, this is a mockery of the very concept. Use as you wish.

================================================ FILE: css/css-layout/floats/4-clearfix.html ================================================ Simple clearing example

"clearfix" example

Float

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate.

Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

================================================ FILE: css/css-layout/floats/4_fixed-layout-border-box.html ================================================ Fixed layout border-box

Fixed layout border-box

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Third column

Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.

©2016 your imagination. This isn't really copyright, this is a mockery of the very concept. Use as you wish.

================================================ FILE: css/css-layout/floats/5-overflow.html ================================================ Simple clearing example

clearing with overflow example

Float

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate.

Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

================================================ FILE: css/css-layout/floats/5_fixed-height-columns.html ================================================ Fixed height columns

Fixed height columns

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Third column

Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.

©2016 your imagination. This isn't really copyright, this is a mockery of the very concept. Use as you wish.

================================================ FILE: css/css-layout/floats/6-flow-root.html ================================================ Simple clearing example

flow-root example

Float

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate.

Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

================================================ FILE: css/css-layout/floats/fixed-layout-adjusted-percentages.html ================================================ Fixed layout adjusted percentages

Fixed layout adjusted percentages

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Third column

Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.

©2016 your imagination. This isn't really copyright, this is a mockery of the very concept. Use as you wish.

================================================ FILE: css/css-layout/floats/simple-float.html ================================================ Simple float example

Simple float example

A pretty butterfly with red, white, and brown coloring, sitting on a large leaf

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

================================================ FILE: css/css-layout/floats/three-column-layout-wrong-order.html ================================================ 3 column layout wrong order

3 column layout wrong order

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Third column

Nam consequat scelerisque mattis. Duis pulvinar dapibus magna, eget congue purus mollis sit amet. Sed euismod lacus sit amet ex tempus, a semper felis ultrices. Maecenas a efficitur metus. Nullam tempus pharetra pharetra. Morbi in leo mauris. Nullam gravida ligula eros, lacinia sagittis lorem fermentum ut. Praesent dapibus eros vel mi pretium, nec convallis nibh blandit. Sed scelerisque justo ac ligula mollis laoreet. In mattis, risus et porta scelerisque, augue neque hendrerit orci, sit amet imperdiet risus neque vitae lectus. In tempus lectus a quam posuere vestibulum. Duis quis finibus mi. Nullam commodo mi in enim maximus fermentum. Mauris finibus at lorem vel sollicitudin.

================================================ FILE: css/css-layout/floats/two-column-layout-fixed.html ================================================ 2 column layout fixed example

2 column layout fixed example

First column

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum, tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.

Second column

Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut, facilisis sed est. Nam id risus quis ante semper consectetur eget aliquam lorem. Vivamus tristique elit dolor, sed pretium metus suscipit vel. Mauris ultricies lectus sed lobortis finibus. Vivamus eu urna eget velit cursus viverra quis vestibulum sem. Aliquam tincidunt eget purus in interdum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

================================================ FILE: css/css-layout/fundamental-layout-comprehension/index.html ================================================ Layout Task

An Exciting Blog Post

placeholder

Veggies es bonus vobis, proinde vos postulo essum magis kohlrabi welsh onion daikon amaranth tatsoi tomatillo melon azuki bean garlic.

Gumbo beet greens corn soko endive gumbo gourd. Parsley shallot courgette tatsoi pea sprouts fava bean collard greens dandelion okra wakame tomato. Dandelion cucumber earthnut pea peanut soko zucchini.

Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus winter purslane kale. Celery potato scallion desert raisin horseradish spinach carrot soko. Lotus root water spinach fennel kombu maize bamboo shoot green bean swiss chard seakale pumpkin onion chickpea gram corn pea. Brussels sprout coriander water chestnut gourd swiss chard wakame kohlrabi beetroot carrot watercress. Corn amaranth salsify bunya nuts nori azuki bean chickweed potato bell pepper artichoke.

Nori grape silver beet broccoli kombu beet greens fava bean potato quandong celery. Bunya nuts black-eyed pea prairie turnip leek lentil turnip greens parsnip. Sea lettuce lettuce water chestnut eggplant winter purslane fennel azuki bean earthnut pea sierra leone bologi leek soko chicory celtuce parsley jícama salsify.

Celery quandong swiss chard chicory earthnut pea potato. Salsify taro catsear garlic gram celery bitterleaf wattle seed collard greens nori. Grape wattle seed kombu beetroot horseradish carrot squash brussels sprout chard.

================================================ FILE: css/css-layout/fundamental-layout-comprehension/styles.css ================================================ body { background-color: #fff; color: #333; margin: 0; font: 1.2em / 1.2 Arial, Helvetica, sans-serif; } img { max-width: 100%; display: block; } .logo { font-size: 200%; padding: 50px 20px; margin: 0 auto; max-width: 980px; } .grid { margin: 0 auto; padding: 0 20px; max-width: 980px; } nav { background-color: #000; padding: .5em; } nav ul { margin: 0; padding: 0; list-style: none; } nav a { color: #fff; text-decoration: none; padding: .5em 1em; } .photos { list-style: none; margin: 0; padding: 0; } .feature { width: 200px; } ================================================ FILE: css/css-layout/fundamental-layout-comprehension-finish/index.html ================================================ Layout Task

An Exciting Blog Post

placeholder

Veggies es bonus vobis, proinde vos postulo essum magis kohlrabi welsh onion daikon amaranth tatsoi tomatillo melon azuki bean garlic.

Gumbo beet greens corn soko endive gumbo gourd. Parsley shallot courgette tatsoi pea sprouts fava bean collard greens dandelion okra wakame tomato. Dandelion cucumber earthnut pea peanut soko zucchini.

Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus winter purslane kale. Celery potato scallion desert raisin horseradish spinach carrot soko. Lotus root water spinach fennel kombu maize bamboo shoot green bean swiss chard seakale pumpkin onion chickpea gram corn pea. Brussels sprout coriander water chestnut gourd swiss chard wakame kohlrabi beetroot carrot watercress. Corn amaranth salsify bunya nuts nori azuki bean chickweed potato bell pepper artichoke.

Nori grape silver beet broccoli kombu beet greens fava bean potato quandong celery. Bunya nuts black-eyed pea prairie turnip leek lentil turnip greens parsnip. Sea lettuce lettuce water chestnut eggplant winter purslane fennel azuki bean earthnut pea sierra leone bologi leek soko chicory celtuce parsley jícama salsify.

Celery quandong swiss chard chicory earthnut pea potato. Salsify taro catsear garlic gram celery bitterleaf wattle seed collard greens nori. Grape wattle seed kombu beetroot horseradish carrot squash brussels sprout chard.

================================================ FILE: css/css-layout/fundamental-layout-comprehension-finish/marking-guide.md ================================================ # Marking guide for "Fundamental Layout Comprehension" The following guide outlines a marking guide for the MDN Learning Area CSS Layout Topic. Each subtask detailed in the assessment is listed below, along with an explanation of how many marks the task is worth, and the mark breakdown. Note: These are guidelines, not set in stone rules — you are of course free to use your judgement on mark awarding when you meet an edge case, or somethign that isn't clearly cut. The overall mark awarded is out of 25. Work out their final mark, and then divide by 25 and multiply by 100 to give a percentage mark. For reference, you can find a finished example in this folder that would be awarded top marks. While the actual amount of code that is required to be added is relatively small, this task is about making the right choices for this layout. **Display the navigation items in a row, with an equal amount of space between the items.** Here the student should use flexbox, adding `display: flex` to `nav ul` (2 marks), and `justify-content: space-between` (2 marks) to distribute the additional space between the items. **The navigation bar should scroll with the content and then become stuck at the top of the viewport when it reaches it.** The selector `nav` should have `position: sticky` (2 marks) plus an offset value of `top: 0` (2 marks). **The image that is inside the article should have text wrapped around it.** The image should be floated left `float: left` (2 marks) with a right and bottom margin to move the text away from it (3 marks). **The `
` and `