Skip to content
Aaron Carmen
Elementor

Custom CSS in Elementor: 3 Ways That Work Without Pro (Tested)

By Aaron CarmenUpdated October 20, 20264 min readTested on WordPress 7.1.3, October 20, 2026

Quick answer

Elementor's Custom CSS boxes are Pro features, and the cheapest plan that includes them is Advanced Solo at $84 a year. Without Pro, give the widget a CSS class under Advanced → CSS Classes, then add your CSS in WordPress's Additional CSS. If a colour you set in Elementor's Style tab wins, clear it there or add !important.

On this page
  1. What’s locked in Elementor free
  2. Method 1: a CSS class plus WordPress’s Additional CSS
  3. Why your CSS might not work
  4. Method 2: the HTML widget, for one page only
  5. Method 3: use Elementor’s own controls first
  6. What I didn’t test

Custom CSS in Elementor looks like it should be one click away: every widget has a Custom CSS section under Advanced. On the free version it’s locked. I tested Elementor 4.3.5 free on a test site running WordPress 7.1.3, found which CSS boxes are Pro-only, and styled a real Elementor button three ways that work without Pro, checking each result on the live page.

What’s locked in Elementor free

In Elementor 4.3.5 free, all four places to type CSS showed an upgrade prompt instead of a code box:

Where In Elementor free
Widget → Advanced → Custom CSS Locked: “Meet Our Custom CSS” upgrade prompt
Page Settings → Advanced → Custom CSS Locked
Site Settings → Custom CSS Locked
New atomic elements → Style → Custom CSS Locked, with a crown icon
Elementor Edit Button panel with the Advanced tab open and the Custom CSS section showing a Meet Our Custom CSS upgrade prompt
The Custom CSS section on a button widget in Elementor 4.3.5 free. Every other Custom CSS box was locked the same way. October 20, 2026.

If you want those boxes, check the plan. On October 20, 2026, Elementor’s pricing page listed Custom code & CSS as not included in Essential, the $60-a-year plan. The cheapest plan that included it was Advanced Solo at $84 a year for one site. My Elementor free vs Pro comparison covers what else each plan adds.

What is free is the CSS Classes field, in the same Advanced tab. That’s the key to the methods below.

Method 1: a CSS class plus WordPress’s Additional CSS

This is the method I’d use on most sites. You tag the widget with a class name in Elementor, then write the CSS in WordPress itself.

  1. Give the widget a class

    Click the widget, open Advanced, and type a name in CSS Classes, such as book-cta. Elementor’s own hint says to type it without the dot. Click Publish or Update.

  2. Open Additional CSS

    In a block theme, go to Appearance → Editor → Styles, open the three-dot menu and choose Additional CSS. In a classic theme, go to Appearance → Customize → Additional CSS.

  3. Add your CSS and save

    Target the class, with the dot this time. For a button, the visible part is .elementor-button inside the widget.

This is the CSS I used on the test site:

.book-cta .elementor-button {
  background-color: #0b6e4f;
  border-radius: 999px;
}
WordPress Site Editor Styles panel with the Additional CSS box containing a rule for .book-cta .elementor-button setting a green background and rounded corners
Additional CSS in the Site Editor of Twenty Twenty-Five, a block theme. WordPress 7.1.3, October 20, 2026.

Target the right part of the widget

Elementor adds your class to the widget’s outer wrapper, not to the button itself. On my test site, the wrapper carried book-cta and the link inside it had the class elementor-button, which is why the rule targets .book-cta .elementor-button. A rule on .book-cta alone would style the wrapper box instead. For other widgets, right-click the element on the live page and choose Inspect to see the class names inside it.

On the live page, the button turned green with fully rounded corners, and the CSS also showed in Elementor’s editor preview. Because Additional CSS loads on every page, the same class works anywhere you add it.

An Elementor button reading Book a whitening visit, now dark green with fully rounded corners, under a photo on the test page
The button after the Additional CSS was saved, on the live page. Elementor 4.3.5 free.

Why your CSS might not work

The first time most people try this, nothing changes. On my test site, that happened as soon as I also set a background colour in the button’s Style tab.

Elementor writes its own CSS for that colour with a long selector: four class names, including the page and the widget’s ID. My rule had two. In CSS, the more specific selector wins, so the button stayed red even though my green rule was on the page. My border-radius still applied, because Elementor hadn’t set one.

Two fixes both worked on the test site:

  • Clear the setting in Elementor. Reset the colour in the Style tab, and your CSS takes over. This is the tidier fix.
  • Add !important to the line, as in background-color: #0b6e4f !important;. This worked too, but use it sparingly: it also overrides the setting for anyone who later edits that widget in Elementor and wonders why nothing changes.

The editor preview can differ from the live page

One more thing I hit: with no colour set in Elementor, the editor preview still showed the button in Elementor’s default accent green, while the live page showed my colour. In the preview, Elementor added its default global colour with the same long selector. So check the published page, not just the editor, before deciding your CSS isn’t working.

Method 2: the HTML widget, for one page only

If the CSS should only apply on one page, Elementor’s free HTML widget can hold it. Drag an HTML widget onto the page and type your CSS inside a <style> tag:

<style>
.book-cta .elementor-button { letter-spacing: 2px; }
</style>

On the test site, the button’s letter spacing changed to 2px on the live page. The widget doesn’t show anything to visitors. The downside is that the CSS is hidden inside the page’s layout, where the next person to edit the site may not find it, so I’d keep this for one-off tweaks.

Method 3: use Elementor’s own controls first

Before writing CSS, check whether a control already does it. The Style and Advanced tabs in Elementor free cover colours, typography, spacing, borders, rounded corners, shadows and positioning. The new atomic elements also have a free Classes field, where you can create a named class and style it with the visual controls, then reuse it on other elements. CSS is worth it for things the controls can’t do, such as hover effects on a part of a widget or styling inside a third-party plugin’s output.

What I didn’t test

I didn’t install Elementor Pro, so I haven’t tested Pro’s own Custom CSS box. My test site uses a block theme, so the classic-theme Customizer route is from WordPress’s documentation rather than my own test.

If you’d rather not dig through selectors, tidying up an Elementor site’s styling is part of my WordPress development work. For fonts specifically, see my guide to changing fonts in WordPress.

FAQ

Common questions

Is custom CSS free in Elementor?

Not the built-in boxes. In Elementor 4.3.5 free, the Custom CSS sections for widgets, pages, Site Settings and the new atomic elements all showed an upgrade prompt. You can still add CSS for free through WordPress's own Additional CSS or Elementor's free HTML widget.

Which Elementor Pro plan includes custom CSS?

On October 20, 2026, Elementor's pricing page listed Custom code & CSS as not included in Essential ($60 a year) and included from Advanced Solo ($84 a year for 1 site) upward.

Why isn't my custom CSS working in Elementor?

Usually because a setting in Elementor's Style tab is more specific. On my test site, a background colour set in Elementor used a selector with four classes and beat my two-class rule. Clearing the colour in Elementor, or adding !important, fixed it. Also check that the class name has no dot in the CSS Classes field.

Where is Additional CSS in WordPress?

In a block theme, go to Appearance → Editor → Styles, open the three-dot menu and choose Additional CSS. In a classic theme, it's in Appearance → Customize → Additional CSS. Either way, the CSS loads on every page of the site.

Aaron Carmen, SEO specialist

About the author

Aaron Carmen

Senior WordPress Developer and SEO Specialist

I've built and optimized WordPress websites since 2013, 13+ years in total, including 9.5 years building WordPress sites for every client of a dental marketing agency. Today I help local businesses and agencies with WordPress development and SEO, so they get found on Google Search, Google Maps and AI search.

Sources

  1. Elementor pricing, checked October 20, 2026
  2. Elementor on WordPress.org, checked October 20, 2026
  3. WordPress Advanced Administration Handbook: CSS, checked October 20, 2026
  4. WordPress documentation: Customizer, Additional CSS, checked October 20, 2026

WordPress is a trademark of the WordPress Foundation. Aaron Carmen is not affiliated with or endorsed by the WordPress Foundation or the WordPress open source project.

Contact

Want this done for you?

Tell me about your site and what you need. I'll reply within one business day with any questions, then a fixed quote.

  • Reply within one business day
  • No obligation, no hard sell
  • Form and email only, calls optional
What you need

Prefer email? hello@aaroncarmen.com