Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set the table to width: 100%; so it fills the width of its containing block. If it still looks narrow, the constraint is usually on a parent element—not the table. Check ancestor max-width, padding, grid or flex sizing, and competing CSS. For predictable columns, add table-layout: fixed;. On small screens, place the table in an horizontally scrollable wrapper rather than shrinking every cell until it is unreadable.

The basic full-width rule

This is the minimum CSS:

table {
  width: 100%;
}

The percentage is measured against the table’s containing block. It does not mean “the entire viewport.” A centered article column, a card, a grid track, or a flex item can all be narrower than the viewport, and the table will correctly fill only that available width.

Use a normal table structure so browsers retain table semantics and assistive technology can associate headers with data:

<table>
  <thead>
    <tr>
      <th scope="col">Plan</th>
      <th scope="col">Price</th>
      <th scope="col">Features</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Basic</td>
      <td>$10</td>
      <td>Core features</td>
    </tr>
  </tbody>
</table>

Then apply the width to every table you intend to stretch, or use a class if only some tables should be full width:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Sale
HTML and CSS: Design and Build Websites
  • HTML CSS Design and Build Web Sites
  • Comes with secure packaging
  • It can be a gift option
.article-table {
  width: 100%;
}

MDN documents width: 100% as the way to make the table fill its containing block. See the MDN table-layout reference for how width and layout algorithms interact.

Make column widths predictable with fixed layout

Automatic layout (table-layout: auto, the default) lets cell content influence column sizes. That is useful when text length should determine the layout, but it can produce uneven columns and can require more content to be examined before the final geometry is known.

Use fixed layout when the table should distribute its declared width predictably:

table {
  width: 100%;
  table-layout: fixed;
}

With the fixed algorithm, the browser uses explicit widths on <col> elements or first-row cells, then shares remaining space among columns. MDN states: “The fixed table layout algorithm is used. When using this keyword, the table’s width needs to be specified explicitly using the `width` property.”

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Declare important column proportions

<table class="article-table">
  <colgroup>
    <col class="col-plan">
    <col class="col-price">
    <col class="col-features">
  </colgroup>
  ...
</table>
.article-table {
  width: 100%;
  table-layout: fixed;
}

.col-plan { width: 22%; }
.col-price { width: 18%; }
.col-features { width: 60%; }

.article-table th,
.article-table td {
  padding: .75rem;
  overflow-wrap: anywhere;
}

Fixed layout does not eliminate overflow problems. A long URL, hash, or unbroken identifier can force content outside a cell unless you choose a wrapping, clipping, or scrolling policy.

Responsive full-width tables without destroying readability

On a narrow viewport, a table can be 100% of its container and still be too narrow for its minimum readable columns. Do not solve that by changing the table to a block and allowing every cell to collapse. Instead, keep the table’s table display and put it in a scrolling wrapper:

<div class="table-wrap">
  <table class="article-table">
    <thead>
      <tr>
        <th scope="col">Plan</th>
        <th scope="col">Price</th>
        <th scope="col">Features</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Basic</td>
        <td>$10</td>
        <td>Core features</td>
      </tr>
    </tbody>
  </table>
</div>
.table-wrap {
  width: 100%;
  overflow-x: auto;
}

.table-wrap table {
  width: 100%;
  min-width: 36rem;
}

The wrapper fills its parent, while the table has a readable minimum width. On screens narrower than that minimum, users can scroll horizontally. MDN’s table element guidance describes this overflow pattern and warns that making the table itself display: block can make it lose table integrity and cause cells to become extremely narrow. A styling tutorial also pairs table-layout: fixed with width: 100% and notes that narrow screens may require additional responsive work: MDN’s styling tables tutorial.

Choose a minimum width deliberately

36rem is an example, not a universal requirement. Set it from your content: a three-column pricing table may need less space than a ten-column analytics table. Test the narrowest viewport you support and confirm that headers remain understandable, horizontal scrolling is discoverable, and the page itself does not acquire accidental vertical or horizontal jumps.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

When the table is not reaching the viewport edge

A full-width table means full width of its containing block. To make it wider, change the layout around it—not just the table rule.

Inspect parent constraints

  • Look for max-width on the article, card, or layout container.
  • Check fixed or percentage widths on ancestors, including grid tracks.
  • Check flex items: a sibling, flex-basis, or minimum content size may limit available space.
  • Account for parent padding and horizontal margins; the table fills the content box, not the padding area.
  • Check whether the table sits inside a narrow column while another grid column occupies the remaining viewport.

If the design intentionally uses a readable article measure, keep the table inside it and use the wrapper pattern for overflow. If the table alone should break out, create an explicit wider container in your layout rather than relying on negative margins that can create clipping and accessibility problems.

Check display and cascade

  • A competing selector or inline style may override width: 100%. Inspect the computed width in browser developer tools.
  • Frameworks sometimes set tables to display: inline-table, display: block, or another non-table display. Remove that override unless you have a tested reason to keep it.
  • Use box-sizing: border-box when borders or padding make the outer box exceed the intended width:
*, *::before, *::after {
  box-sizing: border-box;
}

This makes declared width include border and padding. It prevents a table or wrapper from becoming wider than its containing block because of the box model.

Content, wrapping, and overflow decisions

Full width controls the table’s outer size; it cannot make impossible content fit. Decide what should happen to long values:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Wrap: use overflow-wrap: anywhere; for URLs, hashes, and other unbroken strings.
  • Clip: use a deliberate maximum height or ellipsis pattern only when hidden text is acceptable and a way to inspect the full value exists.
  • Scroll: keep the table’s minimum width and let the wrapper scroll horizontally when columns need physical space.

For normal prose, prefer natural wrapping. Fixed layout plus aggressive wrapping can make rows tall, so compare it with automatic layout when cell content is highly variable.

A practical implementation checklist

  1. Give the table width: 100%.
  2. Choose table-layout: auto for content-driven columns or fixed for predictable distribution.
  3. If using fixed layout, specify key widths with <col> or first-row cells.
  4. Wrap wide tables in a width: 100%; overflow-x: auto; container.
  5. Set a content-appropriate min-width on the inner table.
  6. Inspect ancestor width, padding, margins, grid tracks, flex sizing, and max-width.
  7. Remove unintended display overrides and competing width rules.
  8. Choose wrapping, clipping, or scrolling for long unbroken strings.
  9. Test both a wide desktop viewport and the narrowest target viewport with real data.

Common failures and fixes

“Width: 100%” still looks narrow

The containing block is narrow. Inspect ancestors and computed styles; increase the parent width or place the table in the intended grid track.

The table is wider than the page

A minimum width, long unbroken content, border/padding, or a fixed ancestor is causing overflow. Add the scrolling wrapper, use box-sizing: border-box, and apply an explicit overflow policy.

Rank #4
Sale
Web Design with HTML, CSS, JavaScript and jQuery Set
  • Brand: Wiley
  • Set of 2 Volumes
  • A handy two-book set that uniquely combines related technologies Highly visual format and accessible language makes these books highly effective learning tools Perfect for beginning web designers and front-end developers

Columns collapse on mobile

Do not set the table itself to display: block. Restore table display and put it inside the overflow wrapper with a suitable min-width.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Fixed layout produces ugly text wrapping

Define better column proportions, allow controlled wrapping, or return to table-layout: auto when content length should drive widths.

Padding appears to prevent edge-to-edge width

The table is filling the parent’s content box. Remove or adjust parent padding only if edge-to-edge presentation is actually required; otherwise it is expected spacing.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If you need a rendered image or PDF of a table page rather than CSS debugging, ScreenshotNeo can capture the URL with one request. Its cleanup step accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each cleanup step can be disabled. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status in X-Page-Verdict and X-Billed headers. An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.

Use the API documentation at https://screenshotneo.com/docs/ for all options. A minimal cURL capture is:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

The same request in Python:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

And Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo supports full-page capture with lazy images loaded, CSS-selector element capture, dark mode, device presets and custom viewports, retina scale, PDF paper settings and page ranges, custom CSS or JavaScript, clicks, selector or network-idle waits, request and resource blocking, custom headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed image links, asynchronous jobs with signed webhooks, bulk capture of 100 URLs per call, usage reporting, and an OpenAPI specification. Parameter names used by other screenshot APIs also work. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up free.

FAQ

Does width: 100% mean viewport width?

No. It means 100% of the containing block. The parent layout determines the maximum available width.

Should every table use fixed layout?

No. Use automatic layout when cell content should determine column widths; use fixed layout for predictable distribution.

Is horizontal scrolling acceptable for accessibility?

It is often preferable to unreadable columns. Keep semantic table markup, make the scroll area obvious, and test keyboard and touch access on narrow screens.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Frequently Asked Questions

Can I make only one table full width?

Yes. Apply width: 100% to a class such as .article-table instead of every table element.

Why does my full-width table overflow by a few pixels?

Check borders, padding, parent sizing, and long unbroken strings; use box-sizing: border-box and an overflow policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.