Skip to content

Instantly share code, notes, and snippets.

@jonathantneal
Last active December 11, 2018 06:03
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jonathantneal/034233c9ed5610cb3459 to your computer and use it in GitHub Desktop.
Save jonathantneal/034233c9ed5610cb3459 to your computer and use it in GitHub Desktop.
<h> polyfill
h {
display: block;
}
h6, h {
font-size: 0.67em;
margin: 2.33em 0;
}
h5, h[level="5"] {
font-size: 0.83em;
margin: 1.67em 0;
}
h4, h[level="4"] {
font-size: 1em;
margin: 1.33em 0;
}
h3, h[level="3"] {
font-size: 1.17em;
margin: 1em 0;
}
h2, h[level="2"] {
font-size: 1.5em;
margin: 0.83em 0;
}
h1, h[level="1"] {
font-size: 2em;
margin: 0.67em 0;
}
(function (nodeName, sectionRE) {
function defineHeading(node) {
// initialize heading level as 1
var level = 1, parent = node;
// while parent element exists
while (parent = parent.parentElement) {
// if parent element is a sectioning element
if (sectionRE.test(parent.nodeName)) {
// increase heading level
++level;
}
}
// IE9-11 DOMSubtreeModified needs a timeout
setTimeout(function () {
// define heading role
node.setAttribute('role', 'heading');
// define heading level
node.setAttribute('level', level);
node.setAttribute('aria-level', level);
});
}
function defineHeadings() {
Array.prototype.forEach.call(document.getElementsByTagName(nodeName), defineHeading);
}
// if heading is an unknown element
if (document.createElement(nodeName) instanceof HTMLUnknownElement) {
defineHeadings();
document.addEventListener('DOMContentLoaded', defineHeadings);
document.addEventListener('DOMSubtreeModified', defineHeadings);
}
})('h', /^(article|aside|nav|section)$/i);
(function (nodeName, sectionRE) {
function defineHeading(node) {
// initialize heading level as 1
var level = 1, parent = node;
// while parent element exists
while (parent = parent.parentElement) {
// if parent element is a sectioning element
if (sectionRE.test(parent.nodeName)) {
// increase heading level
++level;
}
}
// IE9-11 DOMSubtreeModified needs a timeout
setTimeout(function () {
// define heading role
node.setAttribute('role', 'heading');
// define heading level
node.setAttribute('level', level);
node.setAttribute('aria-level', level);
});
}
function defineHeadings() {
for (var all = document.getElementsByTagName(nodeName), index = 0; all[index]; ++index) {
defineHeading(all[index]);
}
}
// if heading is an unknown element
if (document.addEventListener) {
if (document.createElement(nodeName) instanceof HTMLUnknownElement) {
defineHeadings();
document.addEventListener('DOMContentLoaded', defineHeadings);
document.addEventListener('DOMSubtreeModified', defineHeadings);
}
}
// or this is Internet Explorer
else {
document.createElement(nodeName);
document.attachEvent('onreadystatechange', defineHeadings);
document.attachEvent('onpropertychange', defineHeadings);
}
})('h', /^(article|aside|nav|section)$/i);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment