How to line up HTML input elements?

后端 未结 9 1349
滥情空心
滥情空心 2020-12-24 14:15

I am hoping to find a resource for lining up input elements in a HTML page. I find it difficult to get a select element and a text box to be the same width even when using t

相关标签:
9条回答
  • 2020-12-24 14:48

    Do you start your CSS files with some base settings? It may be useful to turn padding and margin off on all elements. I haven't tested to see if this could be affecting select / input elements.

    Here's an example CSS Reset from Eric Meyer:

    http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/

    0 讨论(0)
  • 2020-12-24 14:49

    I tested this out in Internet Explorer 7, Firefox 3 and Safari/Google Chrome. I definitely see the problem with <select> and <input type="file">. My findings showed that if you styled all the inputs at the same width, the <select> would be about 5 pixels shorter in all browsers.

    Using the Eric Meyer CSS reset script does not help this issue, however if you simply make your <select> inputs 5 pixels wider you'll get very good (albeit not perfect) alignment in the major browsers. The only one that differs is Safari/Google Chrome, and it appears to be 1 or 2 pixels wider than all the other browsers.

    As far as the <input type="file"> is concerned, you don't have much flexibility with styling there. If JavaScript is an option for you, you can implement the method shown on quirksmode to achieve greater control over the styling of the file upload control.

    See my full working example below in XHTML 1.0 Strict for a typical form with consistent input widths. Note that this does not use the 100% width trick pointed out by others here because it has the same problem with inconsistent widths. Additionally there are no tables used to render the form as tables should only be used for tabular data and not layout.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
      <title>Example Form</title>
      <style type="text/css">
        label,
        input,
        select,
        textarea {
          display: block;
          width: 200px;
          float: left;
          margin-bottom: 1em;
        }
        
        select {
          width: 205px;
        }
        
        label {
          text-align: right;
          width: 100px;
          padding-right: 2em;
        }
        
        .clear {
          clear: both;
        }
      </style>
    </head>
    
    <body>
      <form action="#">
        <fieldset>
          <legend>User Profile</legend>
          <label for="fname">First Name</label>
          <input id="fname" name="fname" type="text" />
          <br class="clear" />
    
          <label for="lname">Last Name</label>
          <input id="lname" name="lname" type="text" />
          <br class="clear" />
    
          <label for="fav_lang">Favorite Language</label>
          <select id="fav_lang" name="fav_lang">
            <option value="c#">C#</option>
            <option value="java">Java</option>
            <option value="ruby">Ruby</option>
            <option value="python">Python</option>
            <option value="perl">Perl</option>
          </select>
          <br class="clear" />
    
          <label for="bio">Biography</label>
          <textarea id="bio" name="bio" cols="14" rows="4"></textarea>
          <br class="clear" />
        </fieldset>
      </form>
    </body>
    
    </html>

    0 讨论(0)
  • 2020-12-24 14:49

    I don't think Ron's idea works...

    test case:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <title></title>
        <link href="styles/reset.css" rel="stylesheet" type="text/css"/>
    
        <style type="text/css">
            input, select{
                width: 100%;
            }
        </style>
    </head>
    <body>
    
    <div style="width: 200px;">
        <input type="text">
        <select>
            <option>asdasd</option>
            <option>asdasd</option>
        </select>
    
    </div>
    
    </body>
    </html>
    

    This results in the input being some px wider than the select (this is probably OS-dependent). I'm not sure if this could be achieved, even with the +5px trick as the styling of the select seems to be OS (at least windows theme) dependent.

    0 讨论(0)
提交回复
热议问题