Skip to content

Foundation Icons

The Foundation framework doesn't include a built-in icon library, but it can be easily integrated with various icon libraries. This chapter covers how to use icons in Foundation, including Foundation Icon Fonts 3 and other popular icon libraries.

Foundation Icon Fonts 3

Foundation Icon Fonts 3 is the official icon font library provided by ZURB, containing hundreds of commonly used icons.

Installing Foundation Icons

Method 1: CDN Import

html
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.min.css">

Method 2: Download and Install

  1. Download from Zurb Foundation Icons
  2. Extract files to your project directory
  3. Import the CSS file
html
<link rel="stylesheet" href="css/foundation-icons.css">

Basic Usage

Use the <i> tag with class names prefixed by fi-:

html
<i class="fi-home"></i> Home
<i class="fi-mail"></i> Mail
<i class="fi-heart"></i> Favorite
<i class="fi-star"></i> Rating

Common Icon List

Class NameIconDescription
fi-home🏠Home
fi-mail✉️Mail
fi-heart❤️Heart
fi-starStar
fi-magnifying-glass🔍Search
fi-plusAdd
fi-minusMinus
fi-x✖️Close
fi-checkConfirm
fi-arrow-rightRight Arrow
fi-arrow-leftLeft Arrow
fi-upload⬆️Upload
fi-download⬇️Download
fi-trash🗑️Delete
fi-pencil✏️Edit
fi-widget⚙️Settings
fi-lock🔒Lock
fi-unlock🔓Unlock
fi-social-facebookfFacebook
fi-social-twittertTwitter

Icon Sizes

Control icon size through CSS:

html
<style>
    .icon-small { font-size: 12px; }
    .icon-medium { font-size: 24px; }
    .icon-large { font-size: 36px; }
    .icon-xlarge { font-size: 48px; }
</style>

<i class="fi-home icon-small"></i>
<i class="fi-home icon-medium"></i>
<i class="fi-home icon-large"></i>
<i class="fi-home icon-xlarge"></i>

Icon Colors

Set colors using CSS color property:

html
<style>
    .icon-primary { color: #1779ba; }
    .icon-success { color: #3adb76; }
    .icon-warning { color: #ffae00; }
    .icon-alert { color: #cc4b37; }
</style>

<i class="fi-heart icon-primary"></i>
<i class="fi-heart icon-success"></i>
<i class="fi-heart icon-warning"></i>
<i class="fi-heart icon-alert"></i>

Using Font Awesome

Font Awesome is one of the most popular icon libraries, offering a rich selection of icons.

Installing Font Awesome

html
<!-- Font Awesome 5 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">

<!-- Or Font Awesome 6 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">

Basic Usage

html
<!-- Solid icons -->
<i class="fas fa-home"></i>
<i class="fas fa-user"></i>
<i class="fas fa-cog"></i>

<!-- Regular icons -->
<i class="far fa-heart"></i>
<i class="far fa-star"></i>

<!-- Brand icons -->
<i class="fab fa-github"></i>
<i class="fab fa-twitter"></i>

Font Awesome Size Classes

html
<i class="fas fa-home fa-xs"></i>    <!-- 0.75em -->
<i class="fas fa-home fa-sm"></i>    <!-- 0.875em -->
<i class="fas fa-home"></i>          <!-- 1em -->
<i class="fas fa-home fa-lg"></i>    <!-- 1.33em -->
<i class="fas fa-home fa-2x"></i>    <!-- 2em -->
<i class="fas fa-home fa-3x"></i>    <!-- 3em -->
<i class="fas fa-home fa-5x"></i>    <!-- 5em -->
<i class="fas fa-home fa-7x"></i>    <!-- 7em -->
<i class="fas fa-home fa-10x"></i>   <!-- 10em -->

Icons with Buttons

Buttons with Icons

html
<a class="button" href="#">
    <i class="fi-home"></i> Home
</a>

<a class="button success" href="#">
    <i class="fi-check"></i> Confirm
</a>

<a class="button alert" href="#">
    <i class="fi-trash"></i> Delete
</a>

Icon-Only Buttons

html
<a class="button" href="#" aria-label="Home">
    <i class="fi-home"></i>
</a>

<a class="button secondary" href="#" aria-label="Settings">
    <i class="fi-widget"></i>
</a>

<a class="button alert" href="#" aria-label="Delete">
    <i class="fi-trash"></i>
</a>

Icon Button Groups

html
<div class="button-group">
    <a class="button secondary" aria-label="Bold"><i class="fi-bold"></i></a>
    <a class="button secondary" aria-label="Italic"><i class="fi-italic"></i></a>
    <a class="button secondary" aria-label="Underline"><i class="fi-underline"></i></a>
</div>

Icons with Forms

Input Field Prefix Icons

html
<div class="input-group">
    <span class="input-group-label">
        <i class="fi-mail"></i>
    </span>
    <input class="input-group-field" type="email" placeholder="Enter email">
</div>

<div class="input-group">
    <span class="input-group-label">
        <i class="fi-lock"></i>
    </span>
    <input class="input-group-field" type="password" placeholder="Enter password">
</div>

<div class="input-group">
    <span class="input-group-label">
        <i class="fi-magnifying-glass"></i>
    </span>
    <input class="input-group-field" type="search" placeholder="Search...">
    <div class="input-group-button">
        <button class="button" type="submit">Search</button>
    </div>
</div>

Icons with Navigation

html
<ul class="menu">
    <li><a href="#"><i class="fi-home"></i> Home</a></li>
    <li><a href="#"><i class="fi-page"></i> Articles</a></li>
    <li><a href="#"><i class="fi-photo"></i> Gallery</a></li>
    <li><a href="#"><i class="fi-mail"></i> Contact</a></li>
</ul>

Vertical Navigation with Icons

html
<ul class="vertical menu">
    <li><a href="#"><i class="fi-home"></i> Home</a></li>
    <li><a href="#"><i class="fi-torso"></i> Profile</a></li>
    <li><a href="#"><i class="fi-widget"></i> Settings</a></li>
    <li><a href="#"><i class="fi-power"></i> Logout</a></li>
</ul>

Icon Animations

Rotating Icons

html
<style>
    .icon-spin {
        animation: spin 2s linear infinite;
    }
    @keyframes spin {
        from { transform: rotate(0deg); }
        to { transform: rotate(360deg); }
    }
</style>

<i class="fi-loop icon-spin"></i> Loading...

Pulsing Icons

html
<style>
    .icon-pulse {
        animation: pulse 1s ease-in-out infinite;
    }
    @keyframes pulse {
        0%, 100% { opacity: 1; }
        50% { opacity: 0.5; }
    }
</style>

<i class="fi-heart icon-pulse" style="color: red;"></i>

Font Awesome Animation Classes

html
<!-- Spin -->
<i class="fas fa-spinner fa-spin"></i>

<!-- Pulse spin -->
<i class="fas fa-spinner fa-pulse"></i>

Icon Stacking

Font Awesome Stacking

html
<span class="fa-stack fa-2x">
    <i class="fas fa-circle fa-stack-2x"></i>
    <i class="fas fa-flag fa-stack-1x fa-inverse"></i>
</span>

<span class="fa-stack fa-2x">
    <i class="fas fa-square fa-stack-2x"></i>
    <i class="fas fa-terminal fa-stack-1x fa-inverse"></i>
</span>

Social Media Icons

html
<div class="social-icons">
    <a href="#" class="button hollow" aria-label="Facebook">
        <i class="fi-social-facebook"></i>
    </a>
    <a href="#" class="button hollow" aria-label="Twitter">
        <i class="fi-social-twitter"></i>
    </a>
    <a href="#" class="button hollow" aria-label="LinkedIn">
        <i class="fi-social-linkedin"></i>
    </a>
    <a href="#" class="button hollow" aria-label="GitHub">
        <i class="fi-social-github"></i>
    </a>
</div>

<style>
    .social-icons .button {
        margin: 0 5px;
        font-size: 24px;
    }
</style>

Complete Example

html
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Foundation Icons Example</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.5/dist/css/foundation.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <style>
        .icon-demo { font-size: 24px; margin: 10px; display: inline-block; }
        .icon-demo i { margin-right: 5px; }
        .demo-section { margin-bottom: 30px; }
        .icon-grid { display: flex; flex-wrap: wrap; }
        .icon-item {
            width: 120px;
            text-align: center;
            padding: 15px;
            margin: 5px;
            background: #f4f4f4;
            border-radius: 4px;
        }
        .icon-item i { font-size: 32px; display: block; margin-bottom: 10px; }
        .icon-item span { font-size: 12px; color: #666; }
        .icon-spin { animation: spin 2s linear infinite; }
        @keyframes spin {
            from { transform: rotate(0deg); }
            to { transform: rotate(360deg); }
        }
    </style>
</head>
<body>
    <div class="grid-container">
        <h1>Foundation Icons Showcase</h1>

        <div class="demo-section">
            <h2>Foundation Icons</h2>
            <div class="icon-grid">
                <div class="icon-item">
                    <i class="fi-home"></i>
                    <span>fi-home</span>
                </div>
                <div class="icon-item">
                    <i class="fi-mail"></i>
                    <span>fi-mail</span>
                </div>
                <div class="icon-item">
                    <i class="fi-heart"></i>
                    <span>fi-heart</span>
                </div>
                <div class="icon-item">
                    <i class="fi-star"></i>
                    <span>fi-star</span>
                </div>
                <div class="icon-item">
                    <i class="fi-magnifying-glass"></i>
                    <span>fi-magnifying-glass</span>
                </div>
                <div class="icon-item">
                    <i class="fi-widget"></i>
                    <span>fi-widget</span>
                </div>
                <div class="icon-item">
                    <i class="fi-trash"></i>
                    <span>fi-trash</span>
                </div>
                <div class="icon-item">
                    <i class="fi-pencil"></i>
                    <span>fi-pencil</span>
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h2>Icon Sizes</h2>
            <i class="fi-home" style="font-size: 16px;"></i>
            <i class="fi-home" style="font-size: 24px;"></i>
            <i class="fi-home" style="font-size: 32px;"></i>
            <i class="fi-home" style="font-size: 48px;"></i>
            <i class="fi-home" style="font-size: 64px;"></i>
        </div>

        <div class="demo-section">
            <h2>Icon Colors</h2>
            <i class="fi-heart" style="font-size: 32px; color: #1779ba;"></i>
            <i class="fi-heart" style="font-size: 32px; color: #3adb76;"></i>
            <i class="fi-heart" style="font-size: 32px; color: #ffae00;"></i>
            <i class="fi-heart" style="font-size: 32px; color: #cc4b37;"></i>
        </div>

        <div class="demo-section">
            <h2>Buttons with Icons</h2>
            <a class="button" href="#"><i class="fi-home"></i> Home</a>
            <a class="button success" href="#"><i class="fi-check"></i> Save</a>
            <a class="button warning" href="#"><i class="fi-pencil"></i> Edit</a>
            <a class="button alert" href="#"><i class="fi-trash"></i> Delete</a>
        </div>

        <div class="demo-section">
            <h2>Icon Button Groups</h2>
            <div class="button-group">
                <a class="button secondary"><i class="fi-bold"></i></a>
                <a class="button secondary"><i class="fi-italic"></i></a>
                <a class="button secondary"><i class="fi-underline"></i></a>
            </div>
            &nbsp;
            <div class="button-group">
                <a class="button secondary"><i class="fi-align-left"></i></a>
                <a class="button secondary"><i class="fi-align-center"></i></a>
                <a class="button secondary"><i class="fi-align-right"></i></a>
            </div>
        </div>

        <div class="demo-section">
            <h2>Form Icons</h2>
            <div class="input-group">
                <span class="input-group-label"><i class="fi-mail"></i></span>
                <input class="input-group-field" type="email" placeholder="Enter email">
            </div>
            <div class="input-group">
                <span class="input-group-label"><i class="fi-lock"></i></span>
                <input class="input-group-field" type="password" placeholder="Enter password">
            </div>
        </div>

        <div class="demo-section">
            <h2>Animated Icons</h2>
            <i class="fi-loop icon-spin" style="font-size: 32px;"></i>
            <span style="margin-left: 10px;">Loading...</span>
        </div>

        <div class="demo-section">
            <h2>Font Awesome Icons</h2>
            <i class="fas fa-home fa-2x"></i>
            <i class="fas fa-user fa-2x"></i>
            <i class="fas fa-cog fa-2x"></i>
            <i class="far fa-heart fa-2x"></i>
            <i class="fab fa-github fa-2x"></i>
            <i class="fas fa-spinner fa-spin fa-2x"></i>
        </div>
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.5/dist/js/foundation.min.js"></script>
    <script>$(document).foundation();</script>
</body>
</html>

Icon Best Practices

  1. Accessibility: Always add aria-label or title attributes to icon-only elements
  2. Decorative icons: Decorative icons should have aria-hidden="true"
  3. Semantics: Choose icons that match their function
  4. Consistency: Use the same icon library throughout the project
  5. Performance: Only import the icons you need, consider using SVG icons
html
<!-- Functional icons - need accessibility -->
<button aria-label="Delete item">
    <i class="fi-trash" aria-hidden="true"></i>
</button>

<!-- Decorative icons - hidden from screen readers -->
<a href="#">
    <i class="fi-mail" aria-hidden="true"></i> Send Email
</a>

Summary

In this chapter we learned:

  • Installation and usage of Foundation Icon Fonts 3
  • Integration of Font Awesome icon library
  • Controlling icon sizes and colors
  • Combining icons with buttons, forms, and navigation
  • Icon animation effects
  • Accessibility best practices for icons

Next chapter, we will learn Foundation Labels.


Tip: When choosing an icon library, consider project requirements, file size, and maintenance costs. For small projects, consider using SVG icons to reduce HTTP requests.

Content is for learning and research only.