Foundation CSS Media Components

Pro Tip: Media components are essential for creating engaging user interfaces. Foundation provides semantic, accessible components that work beautifully across all devices.

Explore Foundation's powerful media components system. Learn to create cards, badges, thumbnails, media objects, and more to build visually appealing and functional interfaces.

๐Ÿƒ Cards

Foundation cards are flexible containers for displaying content and actions about a single subject.

Basic Card Example

Card Title

Some quick example text to build on the card title and make up the bulk of the card's content.

Go somewhere
Featured
Special title treatment

With supporting text below as a natural lead-in to additional content.

Foundation Card Code:
<!-- Basic Card -->
<div class="card">
  <div class="card-divider">
    <h4>Card Title</h4>
  </div>
  <div class="card-section">
    <p>Card content goes here.</p>
  </div>
</div>

<!-- Card with Image -->
<div class="card">
  <img src="image.jpg" class="card-image">
  <div class="card-section">
    <h4>Card with Image</h4>
    <p>Card content goes here.</p>
  </div>
</div>

<!-- Card with Footer -->
<div class="card">
  <div class="card-section">
    <h4>Card Title</h4>
    <p>Card content goes here.</p>
  </div>
  <div class="card-divider">
    <a href="#" class="button">Action</a>
    <a href="#" class="button hollow">Cancel</a>
  </div>
</div>

Card Variations

Primary Card

Some quick example text to build on the card title.

Success Card

Some quick example text to build on the card title.

Warning Card

Some quick example text to build on the card title.

Foundation Card Colors:
<!-- Colored Cards -->
<div class="card primary">
  <div class="card-section">
    <h4>Primary Card</h4>
    <p>Content here.</p>
  </div>
</div>

<div class="card success">
  <div class="card-section">
    <h4>Success Card</h4>
    <p>Content here.</p>
  </div>
</div>

<div class="card warning">
  <div class="card-section">
    <h4>Warning Card</h4>
    <p>Content here.</p>
  </div>
</div>

<div class="card alert">
  <div class="card-section">
    <h4>Alert Card</h4>
    <p>Content here.</p>
  </div>
</div>

Card Layouts

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content.

...
Card title

This is a short card.

...
Card title

This is a longer card with supporting text below as a natural lead-in.

Foundation Card Grid:
<!-- Card Grid Layout -->
<div class="grid-x grid-margin-x">
  <div class="cell small-12 medium-4">
    <div class="card">
      <img src="image.jpg" class="card-image">
      <div class="card-section">
        <h4>Card Title</h4>
        <p>Content here.</p>
      </div>
    </div>
  </div>
  <div class="cell small-12 medium-4">
    <div class="card">
      <img src="image.jpg" class="card-image">
      <div class="card-section">
        <h4>Card Title</h4>
        <p>Content here.</p>
      </div>
    </div>
  </div>
  <div class="cell small-12 medium-4">
    <div class="card">
      <img src="image.jpg" class="card-image">
      <div class="card-section">
        <h4>Card Title</h4>
        <p>Content here.</p>
      </div>
    </div>
  </div>
</div>

๐Ÿท๏ธ Badges & Labels

Badges

PrimarySecondarySuccessDangerWarningInfoLightDark

Pill Badges

PrimarySecondarySuccess

Badge in Heading

Example heading New

Labels

Default LabelSuccess LabelWarning LabelAlert Label

Badge with Button

Inline Badges

This is a paragraph with an inline badge and another success badge for demonstration.

Foundation Badges & Labels:
<!-- Badges -->
<span class="badge primary">Primary</span>
<span class="badge secondary">Secondary</span>
<span class="badge success">Success</span>
<span class="badge warning">Warning</span>
<span class="badge alert">Alert</span>

<!-- Labels -->
<span class="label primary">Primary Label</span>
<span class="label secondary">Secondary Label</span>
<span class="label success">Success Label</span>
<span class="label warning">Warning Label</span>
<span class="label alert">Alert Label</span>

<!-- Badge in Button -->
<a href="#" class="button primary">
  Notifications
  <span class="badge alert">4</span>
</a>

<!-- Badge with Count -->
<span class="badge primary">1</span>
<span class="badge secondary">2</span>
<span class="badge success">3</span>

<!-- Secondary Badge -->
<span class="badge secondary">Default</span>
<span class="badge primary">New</span>
<span class="badge success">Updated</span>

๐Ÿ–ผ๏ธ Thumbnails

Image Thumbnails

Thumbnail

Default Thumbnail

Circular

Circular Thumbnail

Bordered

Bordered Thumbnail

Responsive

Responsive Thumbnail

Thumbnail Grid

Thumb 1
Thumb 2
Thumb 3
Thumb 4
Thumb 5
Thumb 6
Foundation Thumbnails:
<!-- Basic Thumbnail -->
<img class="thumbnail" src="image.jpg" alt="Thumbnail">

<!-- Linked Thumbnail -->
<a href="#">
  <img class="thumbnail" src="image.jpg" alt="Thumbnail">
</a>

<!-- Thumbnail with Caption -->
<div class="thumbnail">
  <img src="image.jpg" alt="Thumbnail">
  <div class="caption">
    <h5>Thumbnail Label</h5>
    <p>Description text here.</p>
    <a href="#" class="button tiny">Action</a>
  </div>
</div>

<!-- Thumbnail Grid -->
<div class="grid-x grid-margin-x small-up-2 medium-up-4">
  <div class="cell">
    <img class="thumbnail" src="image1.jpg" alt="Image 1">
  </div>
  <div class="cell">
    <img class="thumbnail" src="image2.jpg" alt="Image 2">
  </div>
  <div class="cell">
    <img class="thumbnail" src="image3.jpg" alt="Image 3">
  </div>
  <div class="cell">
    <img class="thumbnail" src="image4.jpg" alt="Image 4">
  </div>
</div>

๐Ÿ“‘ Accordion

Basic Accordion

This is the first item's accordion body. It is shown by default, until the collapse plugin adds the appropriate classes that we use to style each element.

This is the second item's accordion body. It is hidden by default, but shown when the user clicks on the trigger.

This is the third item's accordion body. It is hidden by default, but shown when the user clicks on the trigger.
Foundation Accordion:
<!-- Basic Accordion -->
<ul class="accordion" data-accordion>
  <li class="accordion-item is-active" data-accordion-item>
    <a href="#" class="accordion-title">Accordion 1</a>
    <div class="accordion-content" data-tab-content>
      <p>Panel 1 content goes here.</p>
    </div>
  </li>
  <li class="accordion-item" data-accordion-item>
    <a href="#" class="accordion-title">Accordion 2</a>
    <div class="accordion-content" data-tab-content>
      <p>Panel 2 content goes here.</p>
    </div>
  </li>
</ul>

<!-- Multi-expand Accordion -->
<ul class="accordion" data-accordion data-multi-expand="true">
  <li class="accordion-item" data-accordion-item>
    <a href="#" class="accordion-title">Item 1</a>
    <div class="accordion-content" data-tab-content>
      <p>Content 1</p>
    </div>
  </li>
</ul>

<!-- Nested Accordion -->
<ul class="accordion" data-accordion>
  <li class="accordion-item" data-accordion-item>
    <a href="#" class="accordion-title">Parent Item</a>
    <div class="accordion-content" data-tab-content>
      <ul class="accordion" data-accordion>
        <li class="accordion-item" data-accordion-item>
          <a href="#" class="accordion-title">Nested Item</a>
          <div class="accordion-content" data-tab-content>
            <p>Nested content</p>
          </div>
        </li>
      </ul>
    </div>
  </li>
</ul>

๐Ÿ“‚ Tabs

Basic Tabs

Home tab content. This is some placeholder content for the home tab.

Profile tab content. This is some placeholder content for the profile tab.

Contact tab content. This is some placeholder content for the contact tab.

Vertical Tabs

Vertical home content
Vertical profile content
Vertical contact content
Foundation Tabs:
<!-- Basic Tabs -->
<ul class="tabs" data-tabs id="example-tabs">
  <li class="tabs-title is-active">
    <a href="#panel1" aria-selected="true">Tab 1</a>
  </li>
  <li class="tabs-title">
    <a href="#panel2">Tab 2</a>
  </li>
</ul>

<div class="tabs-content" data-tabs-content="example-tabs">
  <div class="tabs-panel is-active" id="panel1">
    <p>Tab 1 content</p>
  </div>
  <div class="tabs-panel" id="panel2">
    <p>Tab 2 content</p>
  </div>
</div>

<!-- Vertical Tabs -->
<div class="grid-x grid-margin-x">
  <div class="cell medium-3">
    <ul class="vertical tabs" data-tabs id="vertical-tabs">
      <li class="tabs-title is-active">
        <a href="#panel1v">Tab 1</a>
      </li>
      <li class="tabs-title">
        <a href="#panel2v">Tab 2</a>
      </li>
    </ul>
  </div>
  <div class="cell medium-9">
    <div class="tabs-content vertical" data-tabs-content="vertical-tabs">
      <div class="tabs-panel is-active" id="panel1v">
        <p>Content 1</p>
      </div>
      <div class="tabs-panel" id="panel2v">
        <p>Content 2</p>
      </div>
    </div>
  </div>
</div>

๐Ÿ“ฐ Media Object

Media Object Examples

...
Media heading

This is some content from a media component. You can replace this with any content and adjust it as needed.

...
Circular Media

This is a media object with a circular image. It's great for user profiles and avatars.

...
Nested Media

This is a nested media object within another media object.

Right Aligned Media

This media object has the image on the right side instead of the left.

...
Foundation Media Object:
<!-- Basic Media Object -->
<div class="media-object">
  <div class="media-object-section">
    <div class="thumbnail">
      <img src="avatar.jpg" alt="Avatar">
    </div>
  </div>
  <div class="media-object-section">
    <h4>Media Title</h4>
    <p>Media content goes here.</p>
  </div>
</div>

<!-- Media Object with Main Section -->
<div class="media-object">
  <div class="media-object-section main-section">
    <h4>Main Section</h4>
    <p>This is the main content section.</p>
  </div>
  <div class="media-object-section">
    <div class="thumbnail">
      <img src="image.jpg" alt="Image">
    </div>
  </div>
</div>

<!-- Stacked Media Objects -->
<div class="media-object stack-for-small">
  <div class="media-object-section">
    <img src="image.jpg" alt="Image">
  </div>
  <div class="media-object-section">
    <h4>Stacked on Small</h4>
    <p>Stacks on small screens.</p>
  </div>
</div>

๐ŸŽ  Orbit (Carousel)

Image Carousel

Foundation Orbit (Carousel):
<!-- Basic Orbit Carousel -->
<div class="orbit" role="region" aria-label="Gallery" data-orbit>
  <div class="orbit-wrapper">
    <div class="orbit-controls">
      <button class="orbit-previous">
        <span class="show-for-sr">Previous Slide</span>โ—€
      </button>
      <button class="orbit-next">
        <span class="show-for-sr">Next Slide</span>โ–ถ
      </button>
    </div>
    <ul class="orbit-container">
      <li class="is-active orbit-slide">
        <figure class="orbit-figure">
          <img class="orbit-image" src="slide1.jpg" alt="Slide 1">
          <figcaption class="orbit-caption">
            <h3>Slide 1 Title</h3>
            <p>Slide 1 description.</p>
          </figcaption>
        </figure>
      </li>
      <li class="orbit-slide">
        <img class="orbit-image" src="slide2.jpg" alt="Slide 2">
      </li>
    </ul>
  </div>
  <nav class="orbit-bullets">
    <button class="is-active" data-slide="0">
      <span class="show-for-sr">First slide</span>
    </button>
    <button data-slide="1">
      <span class="show-for-sr">Second slide</span>
    </button>
  </nav>
</div>

<!-- Orbit with Timer -->
<div class="orbit" data-orbit data-auto-play="false">
  <!-- Orbit content -->
</div>

<!-- Orbit with Specific Timing -->
<div class="orbit" data-orbit data-timer-delay="5000">
  <!-- Orbit content -->
</div>

๐Ÿ“Š Progress Bars

Basic Progress Bars

25%
50%
75%
90%

Striped & Animated

45%
65%

Multiple Bars

Success
Warning
Danger
Foundation Progress Bars:
<!-- Basic Progress Bar -->
<div class="progress" role="progressbar">
  <div class="progress-meter" style="width: 25%">
    <p class="progress-meter-text">25%</p>
  </div>
</div>

<!-- Progress Bar with Colors -->
<div class="primary progress">
  <div class="progress-meter" style="width: 50%"></div>
</div>

<div class="success progress">
  <div class="progress-meter" style="width: 75%"></div>
</div>

<div class="warning progress">
  <div class="progress-meter" style="width: 90%"></div>
</div>

<!-- Progress Bar with Text -->
<div class="progress" role="progressbar">
  <div class="progress-meter" style="width: 65%">
    <span class="progress-meter-text">65% Complete</span>
  </div>
</div>

<!-- Native Progress Element -->
<progress value="75" max="100">75%</progress>

<!-- Meter Element -->
<meter value="0.6">60%</meter>

๐Ÿ’ก Tooltips

Tooltip Examples

Foundation Tooltips:
<!-- Basic Tooltip -->
<button class="button" data-tooltip title="This is a tooltip">
  Hover me
</button>

<!-- Tooltip with Position -->
<button class="button" data-tooltip 
        data-position="top" 
        title="Top tooltip">
  Top
</button>

<button class="button" data-tooltip 
        data-position="bottom" 
        title="Bottom tooltip">
  Bottom
</button>

<button class="button" data-tooltip 
        data-position="left" 
        title="Left tooltip">
  Left
</button>

<button class="button" data-tooltip 
        data-position="right" 
        title="Right tooltip">
  Right
</button>

<!-- Tooltip with Hover Delay -->
<button class="button" data-tooltip 
        data-hover-delay="500" 
        title="Delayed tooltip">
  Hover with delay
</button>

<!-- Tooltip on Disabled Element -->
<div class="disabled" data-tooltip 
     title="This element is disabled">
  Disabled with tooltip
</div>

<!-- Click Trigger Tooltip -->
<button class="button" data-tooltip 
        data-click-open="true" 
        title="Click to open">
  Click me
</button>

๐Ÿ“ฃ Callouts

Callout Examples

Primary Callout
This is a primary callout for important information.
Success Callout
This is a success callout for positive actions.
Warning Callout
This is a warning callout for cautionary information.
Danger Callout
This is a danger callout for critical information.
Callout with Heading

This is an info callout with a heading and some additional content.


You can add buttons or links here as well.

Foundation Callouts:
<!-- Basic Callout -->
<div class="callout">
  <h5>This is a callout</h5>
  <p>Callout content goes here.</p>
</div>

<!-- Colored Callouts -->
<div class="callout primary">
  <h5>Primary Callout</h5>
  <p>Important information.</p>
</div>

<div class="callout success">
  <h5>Success Callout</h5>
  <p>Positive confirmation.</p>
</div>

<div class="callout warning">
  <h5>Warning Callout</h5>
  <p>Cautionary information.</p>
</div>

<div class="callout alert">
  <h5>Alert Callout</h5>
  <p>Critical information.</p>
</div>

<!-- Callout with Close Button -->
<div class="callout" data-closable>
  <h5>Closable Callout</h5>
  <p>You can close this callout.</p>
  <button class="close-button" data-close>&times;</button>
</div>

<!-- Small Callout -->
<div class="callout small">
  <h5>Small Callout</h5>
  <p>Compact callout for less important info.</p>
</div>

<!-- Large Callout -->
<div class="callout large">
  <h5>Large Callout</h5>
  <p>Prominent callout for important info.</p>
</div>

๐Ÿ”ข Pagination

Basic Pagination

Pagination Sizes

Foundation Pagination:
<!-- Basic Pagination -->
<nav aria-label="Pagination">
  <ul class="pagination">
    <li class="pagination-previous disabled">
      <span class="show-for-sr">Previous page</span>
    </li>
    <li class="current"><span class="show-for-sr">You're on page</span> 1</li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li class="ellipsis"></li>
    <li><a href="#">12</a></li>
    <li class="pagination-next">
      <a href="#">Next <span class="show-for-sr">page</span></a>
    </li>
  </ul>
</nav>

<!-- Pagination with Arrows -->
<ul class="pagination">
  <li class="pagination-previous">
    <a href="#">Previous</a>
  </li>
  <li class="current">1</li>
  <li><a href="#">2</a></li>
  <li><a href="#">3</a></li>
  <li class="pagination-next">
    <a href="#">Next</a>
  </li>
</ul>

<!-- Centered Pagination -->
<ul class="pagination text-center">
  <li class="pagination-previous disabled">Previous</li>
  <li class="current">1</li>
  <li><a href="#">2</a></li>
  <li><a href="#">3</a></li>
  <li class="pagination-next"><a href="#">Next</a></li>
</ul>

๐ŸŽฏ Practice Exercise

Create a product card component with:

  • Product image with thumbnail style
  • Product title with badge showing "New" or "Sale"
  • Rating stars using badges or custom icons
  • Price with discount badge if applicable
  • Add to cart button with tooltip
  • Quick view button that opens a modal
  • Responsive layout using card grid
<!-- Foundation Product Card Solution -->
<div class="card">
  <div class="card-image position-relative">
    <img src="product.jpg" alt="Product">
    <span class="badge success position-absolute top-0 left-0">
      New
    </span>
    <span class="badge alert position-absolute top-0 right-0">
      Sale
    </span>
  </div>
  
  <div class="card-section">
    <h5 class="card-title">
      Product Name
      <span class="badge warning float-right">
        <i class="fi-star"></i> 4.5
      </span>
    </h5>
    
    <p class="card-text">
      Product description goes here.
    </p>
    
    <div class="grid-x grid-margin-x align-middle">
      <div class="cell auto">
        <h6 class="text-primary">
          $49.99
          <small class="text-muted text-line-through">
            $59.99
          </small>
        </h6>
      </div>
      
      <div class="cell shrink">
        <button class="button primary tiny" 
                data-tooltip 
                title="Add to cart">
          <i class="fi-shopping-cart"></i>
        </button>
        
        <button class="button secondary tiny" 
                data-open="quickViewModal">
          <i class="fi-eye"></i>
        </button>
      </div>
    </div>
  </div>
</div>