Skip to content

Foundation Input Sizing

Foundation provides flexible input sizing controls. This chapter will introduce how to control the size of form elements.

Default Size

Foundation inputs default to full container width:

html
<input type="text" placeholder="Default width input">

Using Grid to Control Width

Control input width through the grid system:

html
<div class="grid-x grid-margin-x">
    <div class="cell small-3">
        <input type="text" placeholder="25% width">
    </div>
    <div class="cell small-6">
        <input type="text" placeholder="50% width">
    </div>
    <div class="cell small-3">
        <input type="text" placeholder="25% width">
    </div>
</div>

Responsive Width

html
<div class="grid-x grid-margin-x">
    <!-- Full width on small screens, 50% on medium, 33% on large -->
    <div class="cell small-12 medium-6 large-4">
        <input type="text" placeholder="Responsive width">
    </div>
</div>

Input Height

Custom Height

html
<style>
    input.small-input {
        height: 2rem;
        padding: 0.25rem 0.5rem;
        font-size: 0.875rem;
    }
    input.large-input {
        height: 3.5rem;
        padding: 0.75rem 1rem;
        font-size: 1.25rem;
    }
</style>

<input type="text" class="small-input" placeholder="Small input">
<input type="text" placeholder="Default input">
<input type="text" class="large-input" placeholder="Large input">

Input Group Size

html
<style>
    .input-group.small .input-group-label,
    .input-group.small .input-group-field,
    .input-group.small .button {
        height: 2rem;
        padding: 0.25rem 0.5rem;
        font-size: 0.875rem;
    }
    .input-group.large .input-group-label,
    .input-group.large .input-group-field,
    .input-group.large .button {
        height: 3.5rem;
        padding: 0.75rem 1rem;
        font-size: 1.25rem;
    }
</style>

<div class="input-group small">
    <span class="input-group-label">@</span>
    <input class="input-group-field" type="text" placeholder="Small">
    <div class="input-group-button">
        <button class="button" type="button">Submit</button>
    </div>
</div>

<div class="input-group large">
    <span class="input-group-label">@</span>
    <input class="input-group-field" type="text" placeholder="Large">
    <div class="input-group-button">
        <button class="button" type="button">Submit</button>
    </div>
</div>

Textarea Size

html
<!-- Control height with rows -->
<textarea rows="3" placeholder="3 rows height"></textarea>
<textarea rows="6" placeholder="6 rows height"></textarea>

<!-- Fixed height -->
<textarea style="height: 200px;" placeholder="Fixed height"></textarea>

<!-- Auto-resizing -->
<textarea style="resize: vertical; min-height: 100px;" placeholder="Resizable height"></textarea>

Select Box Size

html
<style>
    select.small-select {
        height: 2rem;
        padding: 0.25rem 0.5rem;
        font-size: 0.875rem;
    }
    select.large-select {
        height: 3.5rem;
        padding: 0.75rem 1rem;
        font-size: 1.25rem;
    }
</style>

<select class="small-select">
    <option>Small select</option>
</select>

<select>
    <option>Default select</option>
</select>

<select class="large-select">
    <option>Large select</option>
</select>

Form Size Utility Classes

Create unified size classes:

html
<style>
    /* Small form elements */
    .form-small input,
    .form-small select,
    .form-small textarea,
    .form-small .button {
        height: 2rem;
        padding: 0.25rem 0.5rem;
        font-size: 0.875rem;
    }

    /* Large form elements */
    .form-large input,
    .form-large select,
    .form-large textarea,
    .form-large .button {
        height: 3.5rem;
        padding: 0.75rem 1rem;
        font-size: 1.25rem;
    }
</style>

<form class="form-small">
    <input type="text" placeholder="Small form">
    <button class="button" type="submit">Submit</button>
</form>

<form class="form-large">
    <input type="text" placeholder="Large form">
    <button class="button" type="submit">Submit</button>
</form>

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 Input Sizing Example</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/foundation-sites@6.7.5/dist/css/foundation.min.css">
    <style>
        .demo-section {
            margin-bottom: 40px;
            padding: 20px;
            background: #f8f8f8;
            border-radius: 4px;
        }
        .demo-section h3 {
            margin-bottom: 20px;
        }

        /* Size classes */
        .input-small,
        select.input-small {
            height: 2rem !important;
            padding: 0.25rem 0.5rem !important;
            font-size: 0.875rem !important;
        }
        .input-large,
        select.input-large {
            height: 3.5rem !important;
            padding: 0.75rem 1rem !important;
            font-size: 1.25rem !important;
        }

        .input-group.small .input-group-label,
        .input-group.small .input-group-field,
        .input-group.small .button {
            height: 2rem;
            padding: 0.25rem 0.5rem;
            font-size: 0.875rem;
            line-height: 1.5rem;
        }
        .input-group.large .input-group-label,
        .input-group.large .input-group-field,
        .input-group.large .button {
            height: 3.5rem;
            padding: 0.75rem 1rem;
            font-size: 1.25rem;
            line-height: 2rem;
        }
    </style>
</head>
<body>
    <div class="grid-container">
        <h1>Foundation Input Sizing Showcase</h1>

        <div class="demo-section">
            <h3>Input Height</h3>
            <div class="grid-x grid-margin-x">
                <div class="cell medium-4">
                    <label>Small Input</label>
                    <input type="text" class="input-small" placeholder="Small">
                </div>
                <div class="cell medium-4">
                    <label>Default Input</label>
                    <input type="text" placeholder="Default">
                </div>
                <div class="cell medium-4">
                    <label>Large Input</label>
                    <input type="text" class="input-large" placeholder="Large">
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h3>Grid Controlled Width</h3>
            <div class="grid-x grid-margin-x">
                <div class="cell small-3">
                    <input type="text" placeholder="3 columns">
                </div>
                <div class="cell small-4">
                    <input type="text" placeholder="4 columns">
                </div>
                <div class="cell small-5">
                    <input type="text" placeholder="5 columns">
                </div>
            </div>
            <br>
            <div class="grid-x grid-margin-x">
                <div class="cell small-6">
                    <input type="text" placeholder="6 columns (50%)">
                </div>
                <div class="cell small-6">
                    <input type="text" placeholder="6 columns (50%)">
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h3>Select Box Size</h3>
            <div class="grid-x grid-margin-x">
                <div class="cell medium-4">
                    <label>Small Select</label>
                    <select class="input-small">
                        <option>Option 1</option>
                        <option>Option 2</option>
                    </select>
                </div>
                <div class="cell medium-4">
                    <label>Default Select</label>
                    <select>
                        <option>Option 1</option>
                        <option>Option 2</option>
                    </select>
                </div>
                <div class="cell medium-4">
                    <label>Large Select</label>
                    <select class="input-large">
                        <option>Option 1</option>
                        <option>Option 2</option>
                    </select>
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h3>Input Group Size</h3>
            <div class="grid-x grid-margin-x">
                <div class="cell medium-4">
                    <label>Small Input Group</label>
                    <div class="input-group small">
                        <span class="input-group-label">@</span>
                        <input class="input-group-field" type="text" placeholder="Username">
                        <div class="input-group-button">
                            <button class="button" type="button">Submit</button>
                        </div>
                    </div>
                </div>
                <div class="cell medium-4">
                    <label>Default Input Group</label>
                    <div class="input-group">
                        <span class="input-group-label">@</span>
                        <input class="input-group-field" type="text" placeholder="Username">
                        <div class="input-group-button">
                            <button class="button" type="button">Submit</button>
                        </div>
                    </div>
                </div>
                <div class="cell medium-4">
                    <label>Large Input Group</label>
                    <div class="input-group large">
                        <span class="input-group-label">@</span>
                        <input class="input-group-field" type="text" placeholder="Username">
                        <div class="input-group-button">
                            <button class="button" type="button">Submit</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h3>Textarea Size</h3>
            <div class="grid-x grid-margin-x">
                <div class="cell medium-4">
                    <label>3 Rows Height</label>
                    <textarea rows="3" placeholder="3 rows"></textarea>
                </div>
                <div class="cell medium-4">
                    <label>5 Rows Height</label>
                    <textarea rows="5" placeholder="5 rows"></textarea>
                </div>
                <div class="cell medium-4">
                    <label>Resizable Height</label>
                    <textarea rows="3" style="resize: vertical;" placeholder="Draggable"></textarea>
                </div>
            </div>
        </div>

        <div class="demo-section">
            <h3>Responsive Width</h3>
            <div class="grid-x grid-margin-x">
                <div class="cell small-12 medium-6 large-4">
                    <label>Responsive Input</label>
                    <input type="text" placeholder="Small 100%, Medium 50%, Large 33%">
                </div>
            </div>
        </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>

Input Sizing Best Practices

  1. Consistency: Keep element sizes consistent within the same form
  2. Touch-friendly: Mobile input height should be at least 44px
  3. Responsiveness: Adjust input width based on screen size
  4. Readability: Ensure font size is appropriate

Summary

In this chapter, we learned:

  • Using grid to control input width
  • Customizing input height
  • Input group sizing
  • Responsive inputs

Next chapter, we will learn Foundation Switch.

Content is for learning and research only.