--- name: core-preflight description: Understanding Tailwind's Preflight base styles and how to extend or disable them --- # Preflight Preflight is Tailwind's opinionated set of base styles that smooth over cross-browser inconsistencies. ## Overview Built on top of modern-normalize, Preflight is automatically injected when you import `tailwindcss`: ```css @layer theme, base, components, utilities; @import "tailwindcss/theme.css" layer(theme); @import "tailwindcss/preflight.css" layer(base); @import "tailwindcss/utilities.css" layer(utilities); ``` ## Key Resets ### Margins Removed All default margins are removed from headings, paragraphs, blockquotes, etc: ```css *, ::after, ::before { margin: 0; padding: 0; } ``` This prevents accidentally relying on browser default margins that aren't part of your spacing scale. ### Border Styles Reset Borders are reset to make adding borders easier: ```css *, ::after, ::before { box-sizing: border-box; border: 0 solid; } ``` Since the `border` utility only sets `border-width`, this ensures adding `border` always creates a solid `1px` border using `currentColor`. ### Headings Unstyled All headings are unstyled by default: ```css h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } ``` **Reasons:** - Avoids deviating from your type scale - In UI development, headings should often be visually de-emphasized ### Lists Unstyled Ordered and unordered lists have no bullets or numbers: ```css ol, ul, menu { list-style: none; } ``` Style lists using utilities: ```html ``` **Accessibility:** Add `role="list"` for screen readers when keeping lists unstyled: ```html ``` ### Images Are Block-Level Images and replaced elements are `display: block`: ```css img, svg, video, canvas, audio, iframe, embed, object { display: block; vertical-align: middle; } ``` Use `inline` utility if needed: ```html ... ``` ### Images Are Constrained Images and videos are constrained to parent width: ```css img, video { max-width: 100%; height: auto; } ``` Override with `max-w-none`: ```html ... ``` ### Hidden Attribute Elements with `hidden` attribute stay hidden: ```css [hidden]:where(:not([hidden="until-found"])) { display: none !important; } ``` ## Extending Preflight Add base styles to the `base` layer: ```css @layer base { h1 { font-size: var(--text-2xl); font-weight: 600; } h2 { font-size: var(--text-xl); font-weight: 600; } a { color: var(--color-blue-600); text-decoration-line: underline; } } ``` ## Disabling Preflight Import Tailwind components individually, omitting Preflight: ```css @layer theme, base, components, utilities; @import "tailwindcss/theme.css" layer(theme); /* @import "tailwindcss/preflight.css" layer(base); */ /* Omitted */ @import "tailwindcss/utilities.css" layer(utilities); ``` ## Working Around Third-Party Libraries Some libraries may conflict with Preflight. Override Preflight styles: ```css @layer base { .google-map * { border-style: none; } } ``` ## Key Points - Preflight normalizes cross-browser inconsistencies - Margins, borders, headings, and lists are reset - Images are block-level and constrained by default - Extend Preflight with `@layer base` - Disable by omitting the preflight import - Override Preflight styles when needed for third-party libraries