在多个页面上显示相同HTML时设置样式的最佳策略

Sim*_*ver 3 css

我有一个简单的HTML表格,其中包含2个包含"名称","评论"和"电子邮件"的文本字段和标题的列.

我正在寻找关于样式化这个HTML片段的最佳策略,如果它出现在多个页面上 - 每页需要不同的尺寸.我最近一直在阅读很多关于CSS的内容但是没有偶然发现足够的信息,这让我很自然地知道设计这种.css的最佳方法.

例如,我可能会在"评论"页面上以50%的宽度显示评论表单,但在网站的某些其他位置的边栏中仅显示20%.

我主要关注的是盒子宽度的样式 - 当然,同样的方法适用于文本.例如,名称字段不应该与电子邮件字段一样宽.我认为固定宽度比百分比更好.

它有很多种方式可供选择.假设我已经拥有1个主css文件.

1)在input标签上放置百分比宽度,然后外部div对于它所包含的任何面板都是100%宽度.这不需要特定于页面的css但是我不喜欢td标签内部百分比的想法,而且我不能改变容易的高度textarea.

2)在每个页面中为#Name,#COMMments和#Email创建样式作为<head><style>*中的其他样式

3)基于页面特定css文件中的#Name,#Comments和#Email的样式.页面特定文件是好还是坏?我甚至不确定我喜欢基于这里的ID的样式,因为它们是动态生成的,如果由于某种原因需要更改,我必须更新css到处都是.

4)基于#Name,#Comments和#Email的样式,但使用特定于每个页面的后代选择器限定它们.所以我想.faqPage #Name在FAQ页面上显示这个内容.显然这些都在我的主css文件中.

5)为'emailField ,nameField andcommentsField` 创建类名[为此选项重复选项2,3,4]

6)为'shortField ,fullWidthField andtextInputField` 创建类名[为此选项重复选项2,3,4]

7)你明白了:)

8)别的东西

我对所有选项都感到有些不知所措.我如何决定哪种方式最好?一个特定的目标是能够在多个页面上设置相同的HTML样式(显然这就是css的全部内容 - 但它确实会影响我可以使用哪些选项).

<div id="pnlSubmitComments">
<table class="fieldTable"> 
    <tr> 
    <td align="right"> 
        <label for="Comments">Name:</label> 
    </td> 
    <td> 
        <input id="Name" name="Name" type="text" value="" /> 
    </td> 
    </tr> 
    <tr> 
    <td align="right"> 
        <label for="Comments">Email:</label> 
    </td> 
    <td> 
        <input id="Email" name="Email" type="text" value="" /> 
    </td> 
    </tr> 
     <tr> 
    <td align="right" valign="top"> 
        <label for="Comments">Questions:</label> 
    </td> 
    <td> 
        <textarea id="Comments" name="Comments"> 
</textarea> 
    </td> 
    </tr> 
    <tr> 
    <td> 
    </td> 
    <td> 
        <input id="btnSubmitComments" name="btnSubmitComments" type="submit" value="Submit Questions" /> 
    </td> 
    </tr> 
</table> 
</div>
Run Code Online (Sandbox Code Playgroud)
  • PS.实际的字段名称更具体,例如CommentsName- 它更容易放在Name这里以便于阅读.

mar*_*kus 5

旁注:也许你不应该使用表格来布局这个表格而是使用字段集,它会给你更多的灵活性.例如,如果您决定将标签和输入字段放在一个更窄的列中...

没有表的示例(看起来也更漂亮):

<style type="text/css">
<!--

form { /* set width in form, not fieldset (still takes up more room w/ fieldset width */
    font: 100% verdana, arial, sans-serif;
    margin: 0;
    padding: 0;
    min-width: 500px;
    max-width: 600px;
    width: 560px;
}

form fieldset {
    /* clear: both; note that this clear causes inputs to break to left in ie5.x mac, commented out */
    border-color: #000;
    border-width: 1px;
    border-style: solid;
    padding: 10px; /* padding in fieldset support spotty in IE */
    margin: 0;
}

form fieldset legend {
    font-size: 1.1em; /* bump up legend font size, not too large or it'll overwrite border on left */
    /* be careful with padding, it'll shift the nice offset on top of border  */
}

form label {
    display: block; /* block float the labels to left column, set a width */
    float: left;
    width: 150px;
    padding: 0;
    margin: 5px 0 0; /* set top margin same as form input - textarea etc. elements */
    text-align: right;
}

form input, form textarea {
    /* display: inline; inline display must not be set or will hide submit buttons in IE 5x mac */
    width: auto; /* set width of form elements to auto-size, otherwise watch for wrap on resize */
    margin: 5px 0 0 10px; /* set margin on left of form elements rather than right of
     label aligns textarea better in IE */
}

textarea {
    overflow: auto;
}

 /* uses class instead of div, more efficient */
form br {
    clear: left; /* setting clear on inputs didn't work consistently, so brs added for degrade */
}
-->
</style>
<div id="pnlSubmitComments">
    <form>
        <fieldset>
            <label for="Comments">
                Name:
            </label>
            <input id="Name" name="Name" type="text" value="" /><br />
            <label for="Comments">
                Email:
            </label>
            <input id="Email" name="Email" type="text" value="" /><br />
            <label for="Comments">
                Questions:
            </label>
            <textarea id="Comments" name="Comments">
            </textarea><br />
            <label for="spacing"></label>
            <input id="btnSubmitComments" name="btnSubmitComments" type="submit" value="Submit Questions" />
        </fieldset>
    </form>
</div>
Run Code Online (Sandbox Code Playgroud)

现在回答你的主要问题.我会这样做:

我会使用我想要使用表单的不同布局列的id.所以如果我在我的主列()中使用它,我会相应地编写CSS,如下所示:

#main .pnlSubmitComments form fieldset {
    /*your CSS*/ 
}
Run Code Online (Sandbox Code Playgroud)

并分别为侧栏

#side .pnlSubmitComments form fieldset {
    /*your CSS*/
}
Run Code Online (Sandbox Code Playgroud)

您可以通过分配类来控制每个元素:

<input type="text" class="email" name="email" id="email" />
Run Code Online (Sandbox Code Playgroud)

然后你完全按照上面的描述做:

#main .email {
   /*your css for the .email textbox/*
}
Run Code Online (Sandbox Code Playgroud)