Skip to content
Drempd Logo
  • home
  • portfolio
  • web design journal
  • blog
    • adventure
    • san diego
    • projects
    • website design
    • code notes
  • contact
Blog Web Dev A SASS Stylesheet For Great Forms

A SASS Stylesheet For Great Forms

By Forrest Smith - Drempd.com

Forms have always a bit of a pain in the ass to get formatted correctly. One of my largest pet peeves has been making sure that the text given on the label lines up with the text within a textbox. Since padding, margins, font size, and line-heights all play a role in this, any time a change in any of these would throw off the form alignments once again. This probably isn’t too big of a deal if you only have one site, but if you manage many websites, having to work on this over and over gets a bit old. With SASS and the use of variables, you can get around this issue by calculating the padding and margins around form fields from the line heights and font sizes. The form will automatically recalculate the margins and padding if any of the variables change.

This SASS code has quite a bit of other standardization strategies for keeping form upkeep easy. It’s not all the way there, I think over time I’ll continue to upgrade this code to make it as robust as possible.

Just give your form the class of ‘frm-stnd’, and include the stylesheet.

SCSS:

//Variables: 
    $label-width: 200px;
    $label-margin-right: 10px;
    $form-font-size: 12px;
    $form-line-height: 18px;
    $form-font-size-note: 10px;
    $form-row-margin-bottom: 3px;
    $form-font: Verdana;
    $form-input-bg: #f3fafd;
    $form-input-border-color: #c3d7fd;

//Ideally you don't have to edit anything below: ------------------------------ 

    $form-input-padding: $form-line-height - $form-font-size;
    $form-li-height: $form-input-padding + $form-input-padding + $form-font-size;

    .required-symbol{
        color: red;
        padding-left: 3px;
    }
    .frm-stnd label {
        font-weight: normal;
        font-family: $form-font;   
        margin: 0 $label-margin-right 0 0;
        padding: 0;
        font-size: $form-font-size;
        line-height: $form-line-height;
        display: inline-block;
        width: $label-width;
        text-align: right;
    }
    .frm-stnd input[type=\"text\"], 
    .frm-stnd select, 
    .frm-stnd textarea, 
    .frm-stnd input[type=\"password\"] {
        border: 1px solid $form-input-border-color;
        background: $form-input-bg;
        font-family: $form-font;
        line-height: $form-line-height;
        font-size: $form-font-size;
        padding: $form-input-padding;
        margin: 0;
        margin-bottom: $form-row-margin-bottom;
    }
    .frm-stnd input[type=\"radio\"], 
    .frm-stnd input[type=\"checkbox\"] {
        vertical-align: middle;
        background: none;
        padding: 0;
        border: 0;
        height: $form-line-height;
        margin-top: $form-input-padding:
        margin-right: 0;
        margin-bottom: $form-input-padding; 
        margin-left: $label-width+$label-margin-right+5px;        
    }
    .frm-stnd input[type=\"checkbox\"] + label, 
    .frm-stnd input[type=\"radio\"] + label {
        text-align: left;
        padding: $form-input-padding 5px;                                                            
              //padding - This is to match the padding at the top of normal labels
        width: auto;
    }
    .frm-stnd .input-grouping{        
        //Used when there are more than one input boxes on a line.  
        //Use this class on the container div.
        display:        inline-block;
    }
    .frm-stnd li{
        margin-bottom: $form-row-margin-bottom;
        position: relative;
    }
    .frm-stnd .btn, input[type=\"submit\"]{
        margin-left: $label-width+$label-margin-right+5px;
    }
    .frm-stnd .cancel, .frm-stnd .back{
        margin-top: 0;
        padding-top: 0;
        display: inline-block;
        vertical-align: middle;
        position: relative;
    }
    .frm-stnd .note{
        display: inline-block;
        font-size: $form-font-size-note;
        font-style: italic;   
    }

    @media (max-width: $collapse-width) {
        .frm-stnd label{
            clear: right;
            text-align: left;
            width: 100%;
        }
        .frm-stnd input[type=\"radio\"], 
        .frm-stnd input[type=\"checkbox\"]{
            margin-left: 0;
            position: absolute;
        }
        input[type=\"checkbox\"] + label, 
        input[type=\"radio\"] + label{
            margin: 0 20px;
        }
        .frm-stnd .btn-primary{
            margin-left:     0;
        }
    }

HTML:

<form class=\"frm-stnd\">
     <ul>
          <li>
               <label for=\"field-1\">Field 1</label>
               <input type=\"text\" name=\"field-1\" />
          </li>
          <li>
               <input type=\"submit\" class=\"btn btn-submit\" value=\"Submit\" />
          </li>
     </ul>
</form>
Posted on January 3, 2014August 26, 2022 in Web Dev

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

I love to create and explore. Whether building a website or app, taking a long walk through the mountains, or playing with a random idea, I've found that there will never be enough time to experience it all. But that won't stop me from trying.

Web Design & Development

  • Portfolio
  • San Diego Website Design
  • Custom Web Design
  • Responsive Web Design
  • Website Maintenance
  • Freelance Web Designer
  • Web Design Posts
  • Website Checklist

Projects

  • Zindash
  • Opti
  • Saphire CSS
  • Ergo Blocks

Blog

  • Adventure
  • San Diego
  • Projects
  • Website Design
  • Technology
  • Code Notes

About

  • Bluesky
  • Resume
  • Contact
drempd | san diego, ca
© 2026 Drempd All rights reserved.