Decreasing The Want For Pseudo-Components

No Comments

Per the W3C spec, “a pseudo-element represents a component indirectly current within the doc tree”. They’ve been round since model 1 of the CSS specification, when ::first-letter and ::first-line had been launched. The favored ::earlier than and ::after pseudo-elements had been added in model 2 — these characterize content material that doesn’t exist within the supply doc in any respect. They are often regarded as two additional components you may “tack onto” their originating aspect. When front-end builders hear “pseudo-elements”, we consider ::earlier than and ::after as a rule, as we use them in numerous methods so as to add decorations to our components.

There are extra pseudo-elements past these. They’re listed within the spec throughout three classes: typographic, spotlight, and tree-abiding.

Apparently, after years of internet improvement, I by no means discovered myself utilizing ::first-line, nevertheless it’s fairly neat and responds properly to window resizing! Test it out.

Pseudo-Aspect Model

Lots of you studying this will likely be accustomed to a pseudo-element model:

We use a comparatively positioned wrapper aspect with massive proper padding to accommodate our angle — that is our <button>;
Many people, college students of the sliding doorways approach, are accustomed to nesting a component to tackle the button’s background-color;
Lastly, we completely place a pseudo-element with its border guidelines into our <button>’s proper padding empty area — we use ::earlier than for this.

Apart from these steps, our hover types should account for each our nested aspect and pseudo-element. This may appear manageable for you, however the extra sophisticated our button designs get, the extra overhead we now have with hover types. Additionally, with this model, buttons with phrase wrapping simply plain fail.

Go to the ultimate showcase to see these different button types made simpler with out pseudo-elements. Particularly, the blue bevel button’s pseudo-element model is fairly brutal. The quantity of total work is significantly lowered due to clip-path.

Button Wipes

A wiping impact is a well-liked button model. I’ve included left-to-right and top-to-bottom wipes.

Pseudo-Aspect Model

This may be achieved by transitioning a pseudo-element’s rework.

We completely place a ::earlier than pseudo-element and provides it a rework: scaleX(0) so it’s not seen.
We additionally should explicitly set its transform-origin: 0 0 to make sure the wipe is available in from the left reasonably than heart (transform-origin defaults to heart).
We arrange transitions on the rework for some easy jazz animation on/off hover.
As a result of our pseudo-element is totally positioned, we require a nested aspect to carry the button’s textual content, place: relative on this nested aspect creates a brand new stacking context so our textual content stays on high of our wiping pseudo-element.
On hover, we are able to goal our pseudo-element and transition its scaleX to now be 1 (rework: scaleX(1)).

See the Pen Button wipe with pseudo-element by Marcel.

No Pseudo-Aspect Model

Why fear about nested components, pseudo-element positioning, stacking contexts, and sprawling hover guidelines if we don’t must?

We are able to attain for linear-gradient() and background-size to nail this down.

We give our <button> a background-color for its default state, whereas additionally organising a linear-gradient by way of background-image — however the background-size will likely be 0, so we gained’t see something by default.
On hover, we transition the background-size to 100% 100% which provides us our wipe impact!

Keep in mind, linear-gradient() makes use of the background-image property and background-image supersedes background-color, so that is what takes priority on hover.

That’s it. No nested aspect required. Need a vertical wipe? Simply change the linear-gradient route and the background-size values. I’ve modified these by way of CSS customized properties.

See the Pen Button wipe with NO pseudo-element by Marcel.

Tiles With Display Colour Overlays

It is a widespread sample the place a semi-transparent coloration overlays a tile/card. Our instance’s tile additionally has a background-image. It’s usually essential on this sample to retain a set aspect-ratio in order that tiles look uniform if a couple of seems in a set.

Pseudo Model

A number of the identical issues come into play with our pseudo-element model:

We use the aspect-ratio “padding-trick”, setting a 60% padding-top worth (5:3 ratio) for our tile.
We should place our display screen coloration overlay pseudo-element, giving it a 100% width and top to fill the tile — we goal this pseudo-element on hover to vary its background-color.
Because of the pseudo-element’s absolute positioning, we should use a nested aspect for our textual content content material, additionally giving it place: absolute to ensure that it to seem above our display screen coloration overlay within the stacking order and to make sure it seems the place it ought to throughout the tile.

See the Pen Tile display screen coloration overlay with pseudo-element by Marcel.

No Pseudo-Aspect Model

It may be a lot less complicated due to the aspect-ratio and background-blend-mode properties.

Notice: aspect-ratio doesn’t work in Safari 14.x, however will in model 15.

That stated, as of this writing, caniuse lists it with 70%+ international help.

The “padding-trick” is changed by aspect-ratio: 400/240 (we may use any 5:3-based worth right here).
We use each background-image and background-color properties at the side of background-blend-mode — merely change the background-color of our tile aspect on hover.


background-blend-mode blends a background-color with a component’s background-image. Any Photoshop customers studying it will discover background-blend-mode harking back to Photoshop’s mixing modes. Not like mix-blend-mode, background-blend-mode doesn’t create a brand new stacking context! So no z-index hell!

See the Pen Tile display screen coloration overlay with NO pseudo-element by Marcel.

You will discover the full showcase demo right here →


Entrance-end improvement is thrilling and fast-moving. With newer CSS properties, we are able to brush the mud off our previous methods and provides them one other look. Doing this helps foster lowered and less complicated code. Pseudo-elements are useful, however we don’t want to achieve for them as a lot.

    About Marketing Solution Australia

    We are a digital marketing company with a focus on helping our customers achieve great results across several key areas.

    Request a free quote

    We offer professional SEO services that help websites increase their organic search score drastically in order to compete for the highest rankings even when it comes to highly competitive keywords.

    Subscribe to our newsletter!

    More from our blog

    See all posts

    Leave a Comment