aboutsummaryrefslogtreecommitdiff
path: root/_posts/2018-12-19-jsincss-parent-selector.md
diff options
context:
space:
mode:
authorBradley Taunt <bt@btxx.org>2024-05-25 16:14:03 -0400
committerBradley Taunt <bt@btxx.org>2024-05-25 16:16:54 -0400
commite417a818e207a6cca6e2f3c471611673ab836a62 (patch)
tree664686a365c3d1e73349b5a667fa892f46445fef /_posts/2018-12-19-jsincss-parent-selector.md
Initial commit for Jekyll testing and conversion, updated
Diffstat (limited to '_posts/2018-12-19-jsincss-parent-selector.md')
-rw-r--r--_posts/2018-12-19-jsincss-parent-selector.md80
1 files changed, 80 insertions, 0 deletions
diff --git a/_posts/2018-12-19-jsincss-parent-selector.md b/_posts/2018-12-19-jsincss-parent-selector.md
new file mode 100644
index 0000000..f7244ba
--- /dev/null
+++ b/_posts/2018-12-19-jsincss-parent-selector.md
@@ -0,0 +1,80 @@
+---
+layout: post
+title: "Using Parent Selectors in CSS"
+date: 2018-12-19
+---
+
+
+I recently saw a Twitter thread posted by <a href="https://twitter.com/innovati/status/1068998114491678720">Tommy Hodgins</a> on implementing highly requested styling features in CSS with only a minimal amount of JavaScript. Many of his examples are great, but the `parent` selector instantly peaked my interest.
+
+Being able to target an element's parent always becomes a minor annoyance (since vanilla CSS does not support it) - so you always end up having to do something a little ugly like:
+
+
+ var el = document.getElementById('custom-div');
+ var parent = el.closest(selectors);
+
+
+And then add any custom styling to the parent element directly in JavaScript - or toggle a class which opens a whole other can of worms.
+
+## Save the day with <a href="https://www.npmjs.com/package/jsincss-parent-selector">jsincss-parent-selector</a> and <a href="https://github.com/tomhodgins/qaffeine">qaffeine</a>
+
+By using the `jsincss-parent-selector` and `qaffeine` plugins we can target an element's parent in CSS without breaking a sweat. Let's break it down:
+
+### Import the packages
+
+
+ npm install jsincss-parent-selector qaffeine
+
+
+### HTML (ex. index.html)
+
+Now we add our very simple HTML skeleton:
+
+
+ <!doctype html>
+ <html>
+ <head>
+ <link rel="stylesheet" href="output.css">
+ </head>
+ <body>
+ <header>
+ <main>
+ <h2>This is a header</h2>
+ </main>
+ </header>
+ </body>
+ <script src=output.js></script>
+ </html>
+
+
+### JavaScript (ex. input.js)
+
+
+ const qaffeine = require('qaffeine')
+ const parent = require('jsincss-parent-selector')
+
+ qaffeine(
+ {
+ stylesheet: {},
+ rules: {
+ parent
+ }
+ },
+ 'input.css',
+ 'output.js',
+ 'output.css'
+ )
+
+
+### CSS (ex. input.css)
+
+
+ header {
+ display: block;
+ }
+ main[--js-parent] {
+ background: blue;
+ }
+
+
+Then simply run `node` against your `js` file. That's it! I would also suggest checking out Tommy's <a href="https://www.youtube.com/watch?v=rG8cLe7VbW0">video covering this topic</a> if you prefer to follow along.