You reach for the justify button and it is not there. WordPress removed it in 2016, and nothing replaced it.

Figuring out how to justify text in WordPress now means working with CSS, the block editor, or a plugin instead of a toolbar icon.

Every method here writes the same declaration: text-align: justify.

The fix takes three lines of CSS. The wrong version of it wrecks your paragraphs on phones.

What follows covers:

  • Block editor and Classic Editor methods
  • Additional CSS, plus site-wide rules through theme.json or a child theme
  • Plugins that restore the missing button
  • Fixing spacing gaps, mobile readability, and rules that refuse to apply

What Is Justified Text in WordPress

Justified text is text aligned flush to both the left and right content margins, with word spacing stretched to fill each line. WordPress produces it through a single declaration, text-align: justify, applied to a paragraph, a block, or a content container.

The last line of a justified paragraph stays left aligned by default.

That behavior sits under a separate property, text-align-last, which almost nobody bothers to change.

ValueRendered resultIn core toolbar
leftFlush left with a ragged right edgeYes
centerCenter-aligned with ragged edges on both sidesYes
rightFlush right with a ragged left edgeYes
justifyFlush against both left and right marginsNo

Where the property actually lands: classic themes wrap post content in .entry-content, while block themes output .wp-block-post-content.

Paragraph blocks render as plain <p> tags with no alignment class attached, so a justify rule has to target the block itself or one of those wrappers.

Justification belongs to the same family of paragraph controls as leading and indentation. Changing the space between lines adjusts the same block of copy without touching alignment at all.

Why WordPress Removed the Justify Button

WordPress 4.7 stripped the justify and underline buttons from the Classic Editor toolbar in December 2016. Andrew Ozz, the core contributor who maintained the TinyMCE integration, cited uneven browser implementation and reduced readability. The block editor never shipped a replacement control.

The change came out of core ticket #27159, which also reshuffled the toolbar rows and moved the headings dropdown up.

Underline went for a different reason. WP Tavern reported that readers keep mistaking underlined text for links.

What core exposes today:

  • Left
  • Center
  • Right

Keyboard shortcuts survived the cut. WP Tavern confirmed both shortcuts kept working in 4.7, so Alt+Shift+J still justifies inside the Classic Editor.

It does nothing in a paragraph block. There is no equivalent shortcut in Gutenberg, which is where most of the confusion starts.

W3Techs puts WordPress at 41.9% of all websites in 2026, which explains why a toolbar decision from 2016 still fills support forums a decade later.

The declaration itself never stopped working. Readability concerns are real, though, and W3C guidance on type that stays readable for everyone sides with the core team here.

How to Justify Text in the WordPress Block Editor

The block editor offers no justify button. Two methods work without a plugin: attach a custom CSS class to the paragraph block and define the rule once, or open the block Options menu, pick Edit as HTML, and add an inline style attribute directly.

Gutenberg adoption passed 60% of WordPress sites in 2026, up from 37% in 2020, so most people hitting this problem are working in blocks rather than switching the editor on or off.

Applying a Reusable Justify Class

Best method for repeat use. Define it once, apply it forever.

  • Select the paragraph block, open Block > Advanced > Additional CSS class(es)
  • Type justify-me (or any name you like)
  • Add the matching rule under Appearance > Customize > Additional CSS

.justify-me { text-align: justify; } `

Editing a Block as HTML

Faster for one-off paragraphs. Click the three dots on the block toolbar, choose Edit as HTML, and drop the style straight into the tag.

` <p style="text-align: justify;">Your paragraph text.</p> `

The catch: inline styles pass block validation, but a stray attribute or malformed tag triggers the “This block contains unexpected or invalid content” warning.

Editing raw markup inside a block is fine as long as the tag stays well formed.

How to Justify Text With Additional CSS

Appearance > Customize > Additional CSS applies justification across an entire site without touching theme files. The rule targets either a custom class for individual paragraphs or a content wrapper for every post. Block themes expose the same panel under Styles in the Site Editor.

One warning before you paste anything: Additional CSS is stored per theme. Switch themes and the rule disappears with it.

Targeting Single Paragraphs

` p.justify-me, .wp-block-paragraph.justify-me { text-align: justify; } `

Why two selectors: some themes style p directly, others hook the block class, and covering both avoids a specificity fight.

Targeting All Post Content

Site-wide justification needs a content wrapper, not a class.

` .entry-content p, .wp-block-post-content p { text-align: justify; } `

Specificity trouble: theme stylesheets load after the Customizer in some setups, and a selector like .single .entry-content p beats yours on weight alone.

Check the score with a selector weight calculator before reaching for !important.

How to Justify Text in the Classic Editor

Classic Editor users have three routes: switch to the Text tab and add the style attribute manually, use the Alt+Shift+J shortcut, or restore the toolbar button with Advanced Editor Tools. All three write the same text-align: justify declaration.

Classic Editor passed 9 million active installations by March 2026, and Automattic has extended official support at least through the end of 2026.

The Text tab route is the fastest. Wrap the paragraph and move on.

` <p style="text-align: justify;">Paragraph text here.</p> `

For the button itself, install Advanced Editor Tools and open Settings > Advanced Editor Tools.

Drag Justify from the unused buttons row into the toolbar, save, and the 4.6 layout comes back.

Text alignment and paragraph indentation both live in this toolbar once it is configured.

Which Plugins Add a Justify Button

Four plugins restore justify in WordPress: Advanced Editor Tools rebuilds the TinyMCE toolbar, Justify for Paragraph Block adds the control to Gutenberg, EditorsKit puts it under More Rich Text Tools, and Jetpack includes it by default for sites already running it.

PluginEditorInstall base
Advanced Editor ToolsClassic Editor, Classic block2 million+
Justify for Paragraph BlockBlock EditorSmall, actively updated
EditorsKitBlock EditorLegacy, dated
JetpackBlock EditorUse if already installed

Advanced Editor Tools carries a 4.3 out of 5 rating from the WordPress.org directory and is authored by Andrew Ozz, the same contributor who removed the button from core in the first place.

Justify for Paragraph Block, built by Nick Digital Projects, ships something the others skip: optional typography settings that turn on browser hyphenation for justified paragraphs.

EditorsKit added justify back in version 1.5 after its developer counted 10 Gutenberg GitHub issues and 8 support topics asking for it. It has not kept pace with recent core releases.

Honest take: a three line CSS rule does the same job with zero plugin weight, zero update surface, and no risk of block validation errors when the plugin gets deactivated later.

How to Justify Text Site-Wide

Site-wide justification happens in one of two places. Block themes take custom CSS through theme.json or Site Editor > Styles > Additional CSS. Classic themes take it through a child theme stylesheet, which survives parent theme updates.

Classic themes still run roughly 82% of WordPress sites according to ThemeSniffer data from 50,000 sites, even though block theme adoption grew 50% year over year.

Block Themes and theme.json

Twenty Twenty-Five, shipped with WordPress 6.7 in November 2024, remains the current default. No Twenty Twenty-Six exists.

theme.json route (version 2 and up supports per-block custom CSS):

` "styles": { "blocks": { "core/paragraph": { "css": "text-align: justify;" } } } `

Site Editor > Styles > Blocks > Paragraph handles type sizing and spacing, but alignment still needs the CSS above.

Classic Themes and Child Stylesheets

Drop the rule into your child theme’s style.css and it outlives every parent theme update.

` .entry-content p:not(.wp-block-pullquote p) { text-align: justify; } `

Exclude these from any global rule: headings, image captions, buttons, widget areas, and list items. Justified captions look broken at almost any width.

Editing theme files means Appearance > Theme File Editor, which is hidden on many managed hosts. If that menu item is nowhere to be found, FTP or the host file manager gets you there instead.

Same access problem applies when you need to modify functions.php to enqueue the child stylesheet.

How Page Builders Handle Justified Text

Elementor, Divi, and Beaver Builder expose justification directly in their design panels, so no CSS is needed. Elementor puts it under Text Editor > Style > Alignment. WPBakery ships no native control and needs a custom class instead.

BuilderWhere the control livesShare of WordPress sites
ElementorText Editor → Style → Alignment32.67%
WPBakeryNo native option; use a custom CSS class8.52%
DiviText Module → Design → Text5.72%
Beaver BuilderText Editor Module → Style~0.4% of all sites

HTTP Archive’s April 2026 crawl supplies those first three figures, with Elementor up 2.51 percentage points year over year.

Elementor quirk worth knowing: the Justified option exists on the Text Editor widget but not in Column typography settings.

A GitHub feature request for it has sat open since 2020. Column-level justification still needs a CSS rule in the Advanced panel.

Divi handles this better. The Text module offers alignment per device breakpoint, so desktop justification with mobile left alignment takes two clicks.

Troubleshooting order changes when a builder is involved. Builder-generated CSS loads after theme CSS and usually wins, which means your Customizer rule gets ignored rather than applied.

How to Fix Gaps and Rivers in Justified Text

Rivers appear when the browser stretches word spacing to fill lines that fall short. Three fixes work together: turn on hyphenation with hyphens: auto, keep line length above 45 characters, and cap word spacing so the browser cannot stretch gaps without limit.

The W3C describes the defect precisely in failure technique F88: spaces between words form rivers of white running down the page, which makes reading hard and sometimes impossible.

Turning On Hyphenation

Two things are required. The CSS property, and a lang attribute the browser can match to a dictionary.

` .entry-content p { text-align: justify; hyphens: auto; } `

MDN lists hyphens as Baseline widely available since September 2023, with support in Chrome 88+, Firefox 6+, and Safari 5.1+.

Opera Mini ignores it entirely, so rendering differences between browsers stay part of the picture.

Controlling Word and Letter Spacing

Hyphenation alone leaves stubborn lines. Two more properties tighten the result.

  • text-justify: inter-word distributes extra space between words rather than characters
  • word-spacing: normal with a small negative letter-spacing pulls loose lines back
  • text-align-last: left keeps the closing line from stretching

Line length does more work than any of them. Robert Bringhurst’s 45 to 75 character range remains the benchmark, with 66 characters cited most often as the target.

Justified Text and Readability on Mobile.

Viewports under 480px produce 4 to 6 words per line, which magnifies every spacing gap justification creates. Reverting to left alignment below a breakpoint solves it in three lines of CSS. Mobile reading comfort sits closer to 30 to 50 characters per line.

StatCounter put mobile at 64.35% of global web traffic as of July 2025, so the narrow case is now the common case.

` @media (max-width: 600px) { .entry-content p { text-align: left; } } `

A breakpoint at 600px catches most phones in portrait. Anything narrower than your content container’s minimum comfortable measure deserves the same treatment.

Breakpoint rules are the cheapest fix available here, and they cost nothing in page weight.

Where the guidelines land: WCAG 2.1 Success Criterion 1.4.8 states that text is not justified, and F88 documents justified blocks as an outright failure of that criterion.

The criterion sits at Level AAA, not AA. Most sites are not held to it, though W3C notes that irregular word spacing causes real trouble for readers with cognitive disabilities and low vision.

That places justification in the same bucket as other barrier-reducing decisions: optional on paper, worth taking seriously in practice.

Test before publishing. Chrome DevTools device mode reproduces the 375px and 414px widths where justified paragraphs fall apart fastest.

Why Justified Text Is Not Applying

Four causes account for nearly every case: a caching layer serving stale CSS, theme stylesheet specificity beating your rule, minification dropping a late-added declaration, and block validation stripping an inline style after an update.

SymptomLikely cause
Works in the editor, but not on the front endPage cache or CDN cache
Rule is visible but crossed out in DevToolsCSS specificity conflict
Rule is missing from the stylesheetCSS minification or file combination issue
Style disappeared after an updateBlock validation or theme/plugin changes

Caching and Minification

Purge first, debug second. LiteSpeed Cache alone runs on more than 7 million sites with a 4.8 star rating, WP Rocket on over 2 million, and W3 Total Cache on roughly 1 million.

Any of them will happily serve a stylesheet from before your edit.

Host-level caching sits above all three. Kinsta, SiteGround, and similar managed platforms run their own layer that a plugin purge does not touch.

Plugins that compress CSS files sometimes drop rules appended after the cache was built, so disable minification temporarily while testing.

Specificity and Block Validation

Open DevTools, select the paragraph, and read the Computed panel. The winning declaration is listed with its source file and line number.

Common culprit: a theme selector like .single-post .entry-content p scores higher than a bare .entry-content p and quietly overrides it.

Inline styles added through Edit as HTML survive normal saves. They get stripped when a plugin update changes how a block parses its own markup, which is exactly why the class method holds up better over time.

When Justified Text Improves a WordPress Layout

Justification works at content widths above 600px with 16px to 18px body type, on printed-style documents, and in multi-column layouts. It fails in sidebars, cards, blockquotes, list items, and any mobile-first template where the measure drops below 45 characters.

ContextVerdict
Wide single-column article (≈66ch measure)Works well with hyphenation
Legal pages, reports, or downloadable documentsWorks well
Card grids and sidebarsAvoid
Pull quotes and captionsAvoid

Baymard found that product descriptions running wider than 80 characters per line were skipped 41% more often than those held to 60 to 70 characters.

Measure comes first. Justification applied to a container that is already too wide compounds a problem instead of fixing one.

WordPress core themes ship left aligned for a reason. Twenty Twenty-Five, the default since WordPress 6.7 in November 2024, makes no exception.

Anyone building from the small screen up will find justification fights the layout at every breakpoint below tablet.

My take after enough of these: justified text without hyphenation is not worth shipping. The two belong together, or neither belongs on the page.

FAQ on How To Justify Text In WordPress

Why is there no justify button in WordPress?

WordPress 4.7 removed it in December 2016. Core contributor Andrew Ozz cited uneven browser implementation and reduced readability. The block editor, shipped with WordPress 5.0, never added a replacement control to the paragraph block toolbar.

How do I justify text in Gutenberg without a plugin?

Select the paragraph block, open Block > Advanced > Additional CSS class(es), and add a class name. Then define text-align: justify for that class under Appearance > Customize > Additional CSS.

Is there a keyboard shortcut for justified text?

Alt+Shift+J still works inside the Classic Editor, since shortcuts survived the 4.7 toolbar change. The block editor has no equivalent. Pressing it in a paragraph block does nothing at all.

Which plugin adds a justify button back?

Advanced Editor Tools rebuilds the Classic Editor toolbar and runs on over 2 million sites. Justify for Paragraph Block handles Gutenberg. Jetpack already includes the option if you have it installed.

How do I justify every paragraph on my site?

Target the content wrapper rather than a class. Use .entry-content p for classic themes or .wp-block-post-content p for block themes, added through Additional CSS or a child theme stylesheet.

Why is my justify CSS not working?

Four usual causes: a caching plugin serving stale CSS, theme stylesheet specificity beating your selector, minification dropping the rule, or block validation stripping an inline style. Check the Computed panel in DevTools.

How do I fix the big gaps in justified text?

Add hyphens: auto alongside the justify declaration and confirm the lang attribute exists on the html element. Widening the container helps too. Rivers form fastest when lines drop below 45 characters.

Should I justify text on mobile?

No. Viewports under 480px squeeze 4 to 6 words per line, which stretches word spacing badly. Add a media query that reverts to text-align: left below your chosen breakpoint.

Does justified text hurt accessibility?

WCAG 2.1 Success Criterion 1.4.8 states that text is not justified, and failure technique F88 names justified blocks directly. That criterion sits at Level AAA, not the AA standard most sites target.

Can page builders justify text natively?

Elementor, Divi, and Beaver Builder all include a justified option in their alignment controls. WPBakery does not. Divi additionally allows different alignment per device breakpoint, which handles the mobile problem automatically.

Conclusion

Knowing how to justify text in WordPress comes down to picking a delivery method for one declaration. The class approach through Additional CSS beats every alternative for maintenance.

Skip the plugin unless you need the toolbar button for a client who edits their own posts.

Whatever route you take, pair justification with hyphens: auto` and a breakpoint that reverts to left alignment. Rivers of white space are what people actually notice, not the tidy right margin.

Check your work in the Computed panel before blaming the theme. Nine times out of ten it is a cache or a stronger selector.

And if the paragraph sits in a card, a sidebar, or a narrow column, leave it ragged.