Why your EPUB looks fine everywhere except Kindle

Yasmeen Sardar
Last updated on August 13, 2026

On this page

Share

On this page

A client sent me a file last month with a note attached: “It’s perfect in Apple Books and completely broken on my Kindle.” She was right on both counts, and the reason had nothing to do with her CSS being wrong.

01The symptom

You export an EPUB. You check it in Calibre, Apple Books, maybe Thorium. Everything holds — indents, drop caps, scene breaks, the lot. Then it lands on a Kindle and the first line of every paragraph is flush left, your scene breaks have collapsed into ordinary line spacing, and the chapter openers have lost their spacing entirely.

Nothing in your stylesheet changed. What changed is that Amazon converted your file before displaying it.

Worth knowing

Kindle does not read your EPUB directly. It converts to KFX (or older MOBI variants), and conversion is where declarations get dropped, rewritten, or overridden by the device’s own reader defaults.

02Why Kindle ignores your CSS

Three things happen during conversion, and each one breaks a different part of a typical stylesheet.

  • Unsupported properties are discarded silently. No warning, no fallback — the declaration simply isn’t in the converted file.
  • Reader settings win. If the reader has chosen a font size, line height, or margin, those override yours. This is by design and you cannot opt out of it.
  • Some properties are rewritten. Margins in em often survive; the same value in px may be recalculated against a screen density you didn’t anticipate.

Design for what survives, not for what validates. An EPUB that passes epubcheck can still fall apart on a six-year-old Paperwhite.Something I wish I’d been told earlier

03A reset that survives conversion

This is the base I start every book from. It’s deliberately unambitious — it assumes the reader’s settings will win and only asserts the things that carry meaning.

Margins and indents

The single most common failure is the first-line indent, because the usual approach fights the reader’s paragraph spacing instead of working with it.

CSS
/* Body text: let the reader own size and leading */
p {
  margin: 0;
  text-indent: 1.2em;
  text-align: justify;
  widows: 2;
  orphans: 2;
}

/* No indent after a break in the flow */
p.first,
h1 + p,
h2 + p,
hr + p {
  text-indent: 0;
}

/* Scene break: space that cannot collapse */
hr.scene {
  border: 0;
  height: 0;
  margin: 1.4em 0;
  text-align: center;
}
hr.scene::after {
  content: "\2042";
  color: #555;
}

Note the margin: 0 on paragraphs. Setting both a margin and an indent is what produces the doubled-up spacing you see in badly converted files.

Fonts and fallbacks

Embedded fonts are the second-biggest source of surprise. They work — until the reader turns them off, which most readers eventually do.

Careful

Never rely on an embedded font to carry meaning. If a symbol only exists in your display face, it will vanish the moment the reader switches to their preferred font.

Property Kindle (KFX) Apple Books Safe to use?
text-indent Supported Supported Yes
float Partial Supported Drop caps only
position: absolute Stripped Partial No
@font-face Supported Supported With fallbacks
Custom line-height Overridden Overridden Headings only

04Testing on real devices

Calibre’s viewer is useful for catching structural errors and useless for predicting Kindle rendering. The only reliable check is the conversion path the file will actually take.

  1. Convert with Kindle Previewer — this runs Amazon’s own conversion, not an approximation of it.
  2. Sideload to a physical device if you have one. E-ink rendering differs from the tablet preview.
  3. Check at the largest and smallest reader font sizes. Most layout failures only appear at the extremes.
Screenshot — Kindle Previewer output
Kindle Previewer showing the converted file at three font sizes.

05What I ruled out

Before landing on conversion as the cause, I checked the things that usually get blamed:

  • Validation errors — the file passed epubcheck cleanly, so malformed markup wasn’t it.
  • The stylesheet not linking — headings were still styled, which meant the CSS was loading and only specific properties were missing.
  • A caching issue on the device — a fresh sideload to a factory-reset Kindle reproduced it exactly.

That last one matters. If the problem survives a clean device, it’s in the file or the conversion, and you can stop chasing the reader.

06Checklist before you upload

  • Paragraph margins set to zero, indentation handled by text-indent
  • Every embedded font paired with a generic fallback
  • Scene breaks using a character, not a background image
  • Checked in Kindle Previewer at minimum and maximum font size
  • Table of contents links tested after conversion, not before

None of this is exotic. It’s just that the failure mode is silent, so you only find out when the book is already live and a reader emails you about it.