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.
+ This is my lovely blog
+
+
My article
+
+ 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.
-
-
-
+
+ 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.
+
+
+
+
-
-
-
-
\ No newline at end of file
+
+
diff --git a/css/css-layout/grids/9-placement-completed.html b/css/css-layout/grids/9-placement-completed.html
index 7e0d5205a1..09f6870c43 100644
--- a/css/css-layout/grids/9-placement-completed.html
+++ b/css/css-layout/grids/9-placement-completed.html
@@ -1,8 +1,8 @@
-
-
-
+
+
+
CSS Grid - line-based placement starting point
-
+
diff --git a/css/css-layout/grids/css-grid-finished.html b/css/css-layout/grids/css-grid-finished.html
index a1a957cdc0..6e7a3ce966 100644
--- a/css/css-layout/grids/css-grid-finished.html
+++ b/css/css-layout/grids/css-grid-finished.html
@@ -1,7 +1,8 @@
-
+
+
CSS grids example
-
+
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.
-
-
-
The second tab
-
-
This tab hasn't got any Lorem Ipsum in it. But the content isn't very exciting all the same.
-
-
-
The third tab
-
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in augue. And now an ordered list: how exciting!
-
-
-
dui neque eleifend lorem, a auctor libero turpis at sem.
+ This is fake content. Your main web page contents would probably go
+ here.
+
+
+ This is fake content. Your main web page contents would probably go
+ here.
+
+
+ This is fake content. Your main web page contents would probably go
+ here.
+
+
+ This is fake content. Your main web page contents would probably go
+ here.
+
+
+ This is fake content. Your main web page contents would probably go
+ here.
+
+
+ This is fake content. Your main web page contents would probably go
+ here.
+
+
+ This is fake content. Your main web page contents would probably go
+ here.
+
+
+ This is fake content. Your main web page contents would probably go
+ here.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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.
+
+
+
+
+
The second tab
+
+ This tab hasn't got any Lorem Ipsum in it. But the content isn't
+ very exciting all the same.
+
+
+
+
+
The third tab
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in
+ augue. And now an ordered list: how exciting!
+
+
+
dui neque eleifend lorem, a auctor libero turpis at sem.
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.
-
-
-
The second tab
-
-
This tab hasn't got any Lorem Ipsum in it. But the content isn't very exciting all the same.
-
-
-
The third tab
-
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in augue. And now an ordered list: how exciting!
-
-
-
dui neque eleifend lorem, a auctor libero turpis at sem.
-
Aliquam ut porttitor urna.
-
Nulla facilisi
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/css/css-layout/practical-positioning-examples/info-box.html b/css/css-layout/practical-positioning-examples/info-box.html
deleted file mode 100644
index 2c2185a04b..0000000000
--- a/css/css-layout/practical-positioning-examples/info-box.html
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
-
- Tabbed info box
-
-
-
-
-
-
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.
-
-
-
The second tab
-
-
This tab hasn't got any Lorem Ipsum in it. But the content isn't very exciting all the same.
-
-
-
The third tab
-
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in augue. And now an ordered list: how exciting!
-
-
-
dui neque eleifend lorem, a auctor libero turpis at sem.
+ 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.
+
+
+
+
+
The second tab
+
+ This tab hasn't got any Lorem Ipsum in it. But the content isn't
+ very exciting all the same.
+
+
+
+
+
The third tab
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in
+ augue. And now an ordered list: how exciting!
+
+
+
dui neque eleifend lorem, a auctor libero turpis at sem.
+ 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.
+
+
+
+
+
The second tab
+
+ This tab hasn't got any Lorem Ipsum in it. But the content isn't
+ very exciting all the same.
+
+
+
+
+
The third tab
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Pellentesque turpis nibh, porttitor nec venenatis eu, pulvinar in
+ augue. And now an ordered list: how exciting!
+
+
+
dui neque eleifend lorem, a auctor libero turpis at sem.
+
Aliquam ut porttitor urna.
+
Nulla facilisi
+
+
+
+
+
+
+
+
diff --git a/css/css-layout/practical-positioning-examples/tabs-manual.js b/css/css-layout/practical-positioning-examples/tabs-manual.js
new file mode 100644
index 0000000000..d2ba7a3c79
--- /dev/null
+++ b/css/css-layout/practical-positioning-examples/tabs-manual.js
@@ -0,0 +1,138 @@
+/*
+ * This content is licensed according to the W3C Software License at
+ * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
+ *
+ * File: tabs-manual.js
+ *
+ * Desc: Tablist widget that implements ARIA Authoring Practices
+ */
+
+"use strict";
+
+class TabsManual {
+ constructor(groupNode) {
+ this.tablistNode = groupNode;
+
+ this.tabs = [];
+
+ this.firstTab = null;
+ this.lastTab = null;
+
+ this.tabs = Array.from(this.tablistNode.querySelectorAll("[role=tab]"));
+ this.tabpanels = [];
+
+ for (let i = 0; i < this.tabs.length; i += 1) {
+ const tab = this.tabs[i];
+ const tabpanel = document.getElementById(
+ tab.getAttribute("aria-controls")
+ );
+
+ tab.tabIndex = -1;
+ tab.setAttribute("aria-selected", "false");
+ this.tabpanels.push(tabpanel);
+
+ tab.addEventListener("keydown", this.onKeydown.bind(this));
+ tab.addEventListener("click", this.onClick.bind(this));
+
+ if (!this.firstTab) {
+ this.firstTab = tab;
+ }
+ this.lastTab = tab;
+ }
+
+ this.setSelectedTab(this.firstTab);
+ }
+
+ setSelectedTab(currentTab) {
+ for (let i = 0; i < this.tabs.length; i += 1) {
+ const tab = this.tabs[i];
+ if (currentTab === tab) {
+ tab.setAttribute("aria-selected", "true");
+ tab.removeAttribute("tabindex");
+ this.tabpanels[i].classList.remove("is-hidden");
+ } else {
+ tab.setAttribute("aria-selected", "false");
+ tab.tabIndex = -1;
+ this.tabpanels[i].classList.add("is-hidden");
+ }
+ }
+ }
+
+ moveFocusToTab(currentTab) {
+ currentTab.focus();
+ }
+
+ moveFocusToPreviousTab(currentTab) {
+ let index;
+
+ if (currentTab === this.firstTab) {
+ this.moveFocusToTab(this.lastTab);
+ } else {
+ index = this.tabs.indexOf(currentTab);
+ this.moveFocusToTab(this.tabs[index - 1]);
+ }
+ }
+
+ moveFocusToNextTab(currentTab) {
+ let index;
+
+ if (currentTab === this.lastTab) {
+ this.moveFocusToTab(this.firstTab);
+ } else {
+ index = this.tabs.indexOf(currentTab);
+ this.moveFocusToTab(this.tabs[index + 1]);
+ }
+ }
+
+ /* EVENT HANDLERS */
+
+ onKeydown(event) {
+ const tgt = event.currentTarget;
+ let flag = false;
+
+ switch (event.key) {
+ case "ArrowLeft":
+ this.moveFocusToPreviousTab(tgt);
+ flag = true;
+ break;
+
+ case "ArrowRight":
+ this.moveFocusToNextTab(tgt);
+ flag = true;
+ break;
+
+ case "Home":
+ this.moveFocusToTab(this.firstTab);
+ flag = true;
+ break;
+
+ case "End":
+ this.moveFocusToTab(this.lastTab);
+ flag = true;
+ break;
+
+ default:
+ break;
+ }
+
+ if (flag) {
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ }
+
+ // Since this example uses buttons for the tabs, the click onr also is activated
+ // with the space and enter keys
+ onClick(event) {
+ this.setSelectedTab(event.currentTarget);
+ }
+}
+
+// Initialize tablist
+
+window.addEventListener("load", function () {
+ const tablists = document.querySelectorAll("[role=tablist].manual");
+ for (let i = 0; i < tablists.length; i++) {
+ new TabsManual(tablists[i]);
+ }
+});
diff --git a/css/css-layout/stacking-and-float/index.html b/css/css-layout/stacking-and-float/index.html
index 9306031feb..1246b19c1e 100644
--- a/css/css-layout/stacking-and-float/index.html
+++ b/css/css-layout/stacking-and-float/index.html
@@ -1,7 +1,8 @@
-
-
-
+
+
+
+
Stacking and float
-
+
diff --git a/css/introduction-to-css/box-model/index.html b/css/introduction-to-css/box-model/index.html
index 1f70e96d09..226db53a05 100644
--- a/css/introduction-to-css/box-model/index.html
+++ b/css/introduction-to-css/box-model/index.html
@@ -1,7 +1,8 @@
-
+
+
Box model
diff --git a/css/introduction-to-css/cascade-and-inheritance/index.html b/css/introduction-to-css/cascade-and-inheritance/index.html
index d4df1ddecb..09c3e1e67b 100644
--- a/css/introduction-to-css/cascade-and-inheritance/index.html
+++ b/css/introduction-to-css/cascade-and-inheritance/index.html
@@ -1,7 +1,8 @@
-
+
+
CSS values and units
diff --git a/css/introduction-to-css/css-selectors/combinators.html b/css/introduction-to-css/css-selectors/combinators.html
index a16562738a..52597762f6 100644
--- a/css/introduction-to-css/css-selectors/combinators.html
+++ b/css/introduction-to-css/css-selectors/combinators.html
@@ -1,7 +1,8 @@
-
+
+
Combinators exampleHow to Use Webfonts
-
-
+
+
@@ -162,18 +162,18 @@
Installing Webfonts
-
+
Webfonts are supported by all major browser platforms but not all in the same way. There are currently four different font formats that must be included in order to target all browsers. This includes TTF, WOFF, EOT and SVG.
-
+
1. Upload your webfonts
You must upload your webfont kit to your website. They should be in or near the same directory as your CSS files.
-
+
2. Include the webfont stylesheet
A special CSS @font-face declaration helps the various browsers select the appropriate font it needs without causing you a bunch of headaches. Learn more about this syntax by reading the Fontspring blog post about it. The code for it is as follows:
Getting webfonts to work cross-browser can be tricky. Use the information in the sidebar to help you if you find that fonts aren't loading in a particular browser.
diff --git a/css/styling-text/web-fonts/google-font.html b/css/styling-text/web-fonts/google-font.html
index 495ef6bbf9..335e9b81e2 100644
--- a/css/styling-text/web-fonts/google-font.html
+++ b/css/styling-text/web-fonts/google-font.html
@@ -1,7 +1,8 @@
-
+
+
Web font example
@@ -15,12 +16,12 @@
Hipster ipsum is the best
It is the quaintest
-
Bespoke green juice aesthetic leggings DIY williamsburg selvage. Bespoke health goth tote bag, fingerstache venmo ennui thundercats butcher trust fund cardigan hella. Wolf vinyl you probably haven't heard of them taxidermy, ugh quinoa neutra meditation asymmetrical mixtape church-key kitsch man bun occupy. Knausgaard butcher raw denim ramps, offal seitan williamsburg venmo gastropub mlkshk cardigan chillwave chartreuse single-origin coffee twee. Ethical asymmetrical banjo typewriter fap. Polaroid waistcoat tousled selfies four dollar toast locavore thundercats. Truffaut post-ironic skateboard trust fund.
+
Bespoke green juice aesthetic leggings DIY williamsburg selvage. Bespoke health goth tote bag, fingerstache venmo ennui thundercats butcher trust fund cardigan. Wolf vinyl you probably haven't heard of them taxidermy, ugh quinoa neutral meditation asymmetrical mixtape church-key kitsch man bun occupy. Knausgaard butcher raw denim ramps, offal seitan williamsburg venmo gastropub mlkshk cardigan chillwave chartreuse single-origin coffee twee. Ethical asymmetrical banjo typewriter fap. Polaroid waistcoat tousled selfies four dollar toast locavore thundercats. Truffaut post-ironic skateboard trust fund.
No, really...
-
Trust fund celiac farm-to-table PBR&B. Brunch art party mumblecore, fingerstache cred echo park literally stumptown humblebrag chambray. Mlkshk vinyl distillery humblebrag crucifix. Mustache craft beer put a bird on it, irony deep v poutine ramps williamsburg heirloom brooklyn.
+
Trust fund celiac farm-to-table PBR&B. Brunch art party mumblecore, fingerstache cred echo park literally stumptown humblebrag chambray. Vinyl distillery humblebrag crucifix. Mustache craft beer put a bird on it, irony deep v poutine ramps williamsburg heirloom brooklyn.
-
Taxidermy tofu YOLO, sustainable etsy flexitarian art party stumptown portland. Ethical williamsburg retro paleo. Put a bird on it leggings yuccie actually, skateboard jean shorts paleo lomo salvia plaid you probably haven't heard of them.
+
Taxidermy tofu YOLO, sustainable etsy art party stumptown portland. Ethical williamsburg retro paleo. Put a bird on it leggings actually, skateboard jean shorts paleo salvia plaid you probably haven't heard of them.
\ No newline at end of file
diff --git a/css/styling-text/web-fonts/web-font-finished.html b/css/styling-text/web-fonts/web-font-finished.html
index 9a467982ba..f94c6a0357 100644
--- a/css/styling-text/web-fonts/web-font-finished.html
+++ b/css/styling-text/web-fonts/web-font-finished.html
@@ -1,7 +1,8 @@
-
+
+
Web font example
diff --git a/css/styling-text/web-fonts/web-font-start.html b/css/styling-text/web-fonts/web-font-start.html
index 25ee79ce43..efe371fdea 100644
--- a/css/styling-text/web-fonts/web-font-start.html
+++ b/css/styling-text/web-fonts/web-font-start.html
@@ -1,7 +1,8 @@
-
+
+
Web font example
diff --git a/html/forms/basic-input-examples/index.html b/html/forms/basic-input-examples/index.html
index cd9bf5d5e0..aaffab201e 100644
--- a/html/forms/basic-input-examples/index.html
+++ b/html/forms/basic-input-examples/index.html
@@ -1,5 +1,5 @@
-
+
diff --git a/html/forms/color-example/index.html b/html/forms/color-example/index.html
index 271073303c..c66610730b 100644
--- a/html/forms/color-example/index.html
+++ b/html/forms/color-example/index.html
@@ -1,5 +1,5 @@
-
+
diff --git a/html/forms/date-picker-fallback/index.html b/html/forms/date-picker-fallback/index.html
index 7f16565d61..4a623379b0 100644
--- a/html/forms/date-picker-fallback/index.html
+++ b/html/forms/date-picker-fallback/index.html
@@ -1,9 +1,9 @@
-
-
-
-
- date control with fallback
+
+
+
+
+ date control with fallback
-
+