This pseudo element ::after
won’t show up in my browser at all. I am using React.js and Material UI makeStyles
.
This is the code:
modalTitle: {
borderBottom: '2px solid red',
display: 'block',
margin: '10px 15px',
padding: '0',
width: '100px',
'&::after': {
background: 'green',
content: '',
display: 'block',
height: '2px',
width: '2px',
},
},
Note that the code below modalTitle
shows up and works, only the pseudo element doesn’t go through. Any thoughts?
Advertisement
Answer
This is a tricky one. When you use makeStyles
, it accepts a styles object (or a function that returns an object). This object has the class names as keys and objects containing attribute-value pairs as values. These values are strings (like "block"
, "green"
, or "10px 15px"
).
The ::before
and ::after
pseudo-elements in CSS allows us to insert content onto the page. Every pseudo-element must have a CSS content
property, without it the default value of content is set to normal
/none
, and no content is displayed.
The problem with your code is that you add content: ''
in your object, but you need to pass an empty string as the CSS value, like this: content: '""'
.
Similarly, if you want to insert some text using content
you can’t simply add the string, you need to use quotes around the text and pass it as a string:
// ❌ this one doesn't work
{
content: 'some text',
}
// ✅ this one does work
{
content: '"some text"',
}
So, you can use the following and it will add the element:
const useStyles = makeStyles({
modalTitle: {
borderBottom: '2px solid red',
display: 'block',
margin: '10px 15px',
padding: '0',
width: '100px',
'&::after': {
background: 'green',
content: '""',
display: 'block',
height: '2px',
width: '2px',
},
},
});