Add styling CSS pseudo-elements
This commit is contained in:
44
src/posts/styling-css-pseudo.md
Normal file
44
src/posts/styling-css-pseudo.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
layout: "../layouts/BlogPost.astro"
|
||||
title: "Styling a CSS pseudo-element with JavaScript"
|
||||
slug: styling-css-pseudo
|
||||
description: "JavaScript can't target pseudo-elements, but that doesn't mean you can't mess with them!"
|
||||
added: "Mar 05 2024"
|
||||
tags: [technical]
|
||||
---
|
||||
|
||||
In JavaScript, you can't do some kind of query selector like:
|
||||
|
||||
```js
|
||||
document.querySelector("div::after");
|
||||
```
|
||||
|
||||
But, with the power of CSS variables, you can still change the styles of those selectors with JavaScript!
|
||||
|
||||
In your CSS, pick a variable name and assign it to something:
|
||||
|
||||
```css
|
||||
div::after {
|
||||
/* 50px is the default value if --somewidth doesn't exist */
|
||||
width: var(--somewidth, 50px);
|
||||
}
|
||||
```
|
||||
|
||||
And in your JavaScript, you use the [`setProperty` function](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/setProperty) to assign a value to that variable!
|
||||
|
||||
```js
|
||||
// this is just grabbing a div, you can change it to select any element
|
||||
const element = document.getElementsByTagName("div")[0];
|
||||
|
||||
element.style.setProperty("--somewidth", "50%");
|
||||
```
|
||||
|
||||
So there ya go! You can obviously make this more complex as needed. Here's an example of all of this in action! It's a template I made for tracking fundraising efforts (feel free to use the template [on CodePen](https://codepen.io/cassidoo/pen/KKYpjMJ)).
|
||||
Specifically note **line 38** in the CSS, and **line 25** in the JavaScript!
|
||||
|
||||
<p class="codepen" data-height="300" data-theme-id="light" data-default-tab="css,result" data-slug-hash="KKYpjMJ" data-user="cassidoo" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
|
||||
<span>See the Pen <a href="https://codepen.io/cassidoo/pen/KKYpjMJ">
|
||||
Money goal tracker template</a> by Cassidy (<a href="https://codepen.io/cassidoo">@cassidoo</a>)
|
||||
on <a href="https://codepen.io">CodePen</a>.</span>
|
||||
</p>
|
||||
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
|
||||
Reference in New Issue
Block a user