Useful Tests for JS-powered Styling
This page is filled with JavaScript-based tests that are useful for styling, whether it's trying to target selectors CSS can't normally reach, or trying to use element queries or container queries check out the list below for tests that can be used with the CSS reprocessors like EQCSS, JS-in-CSS, Selectory, reproCSS, and more!
Width-based tests
el => el.offsetWidth < 500 // less than 500px wide
el => el.offsetWidth <= 500 // less or equal to 500px wide
el => el.offsetWidth == 500 // 500px wide
el => el.offsetWidth >= 500 // greater or equal to 500px wide
el => el.offsetWidth > 500 // greater than 500px wide
Height-based tests
el => el.offsetHeight < 500 // less than 500px tall
el => el.offsetHeight <= 500 // less or equal to 500px tall
el => el.offsetHeight == 500 // 500px tall
el => el.offsetHeight >= 500 // greater or equal to 500px tall
el => el.offsetHeight > 500 // greater than 500px tall
Text Length tests
el => el.value.length < 5 // less than 5 characters
el => el.value.length <= 5 // less or equal to 5 characters
el => el.value.length == 5 // 5 characters
el => el.value.length >= 5 // greater or equal to 5 characters
el => el.value.length > 5 // greater than 5 characters
el => el.textContent.length < 5 // less than 5 characters
el => el.textContent.length <= 5 // less or equal to 5 characters
el => el.textContent.length == 5 // 5 characters
el => el.textContent.length >= 5 // greater or equal to 5 characters
el => el.textContent.length > 5 // greater than 5 characters
Children-based tests
el => el.children.length < 5 // less than 5 children
el => el.children.length <= 5 // less or equal to 5 children
el => el.children.length == 5 // 5 children
el => el.children.length >= 5 // greater or equal to 5 children
el => el.children.length > 5 // greater than 5 children
Scroll-based tests
el => el.scrollLeft < 50 // less than 50px scrolled right
el => el.scrollLeft <= 50 // less or equal to 50px scrolled right
el => el.scrollLeft == 50 // 50px scrolled right
el => el.scrollLeft >= 50 // greater or equal to 50px scrolled right
el => el.scrollLeft > 50 // greater than 50px scrolled right
el => el.scrollTop < 50 // less than 50px scrolled down
el => el.scrollTop <= 50 // less or equal to 50px scrolled down
el => el.scrollTop == 50 // 50px scrolled down
el => el.scrollTop >= 50 // greater or equal to 50px scrolled down
el => el.scrollTop > 50 // greater than 50px scrolled down
Aspect-ratio-based tests
el => el.offsetWidth/el.offsetHeight < 16/9 // less than 16/9
el => el.offsetWidth/el.offsetHeight <= 16/9 // less or equal to 16/9
el => el.offsetWidth/el.offsetHeight == 16/9 // 16/9
el => el.offsetWidth/el.offsetHeight >= 16/9 // greater or equal to 16/9
el => el.offsetWidth/el.offsetHeight < 16/9 // greater than 16/9
Orientation-based tests
el => el.offsetWidth < el.offsetHeight // portrait orientation
el => el.offsetWidth == el.offsetHeight // square orientation
el => el.offsetWidth > el.offsetHeight // landscape orientation
Selectors
Parent of el
el.parentNode
Closest Matching Ancestor of el
el.closest('selector')
Previous Sibling of el
el.previousElementSibling
el
Contains Selector
el.querySelector('selector')
Demos
Using EQCSS
Using Selectory
Using reproCSS
Using JS-in-CSS
More info at responsive.style