如何设置像桌子一样的选择选项?

时间:2014-09-16 23:05:24

标签: html css forms select options

我有一个表单选择下拉列表,我想格式化选项的内部文本。每个选项都有月份,年份和标题。我希望每个人都能彼此保持一致。我已经尝试在option元素中放置一个表来查看我是否可以强制它,但它失败了。我尝试使用不间断的空格,但也失败了(我相信因为字母的字体系列样式)。 这是我的代码:

<form>
    <label>I would like to style this in a manner in which the months, years, and title are aligned with each other</label>
    <select id="news2">
        <option selected value="Click Here"></option>
        <option value="1">    JAN  2000 - Title 1     </option>
        <option value="2">    FEB  1191 - Title 2     </option>
        <option value="3">    MAR  2014 - Title 3     </option>
        <option value="4">    APR  1995 - Title 4     </option>
        <option value="5">    MAY  2034 - Title 5     </option>
        <option value="6">    JUNE 2210 - Title 6     </option>
        <option value="7">    JULY 1991 - Title 7     </option>
    </select>
</form>

我将代码中的文本对齐,以演示我希望它如何排列在下拉列表中。我知道这个字体是等宽的,但我使用的字体不是。我也有一个小提琴http://jsfiddle.net/n83ahz5q/ 正如在我的大部分问题中,我尝试减少脚本数量,如果可能的话,我更喜欢html / css解决方案。如果没有,我也可以使用原生JavaScript。

3 个答案:

答案 0 :(得分:3)

您无法将select元素格式化为表格,因为option元素的内容是纯文本,因此您无法将任何部分指定为表格单元格。

在这个方向上你可以做的最好的事情是将字体设置为等宽字体,并在option元素内使用无间隔空格而不是正常空格,用于不应折叠的空间序列。 (设置white-space: pre在理论上是有效的,但在实践中却不行:浏览器会忽略selectoption元素,因为它们是以特殊方式实现的。)示例(我使用的是真实的)这里没有空格;您可能更喜欢&nbsp;,例如JAN&nbsp;&nbsp;2000):

#news2,
#news2 option {
  font-family: Consolas, monospace;
}
<select id="news2">
  <option selected value="Click Here"></option>
  <option value="1"> JAN 2000 - Title 1 </option>
  <option value="2"> FEB 1191 - Title 2 </option>
  <option value="3"> MAR 2014 - Title 3 </option>
  <option value="4"> APR 1995 - Title 4 </option>
  <option value="5"> MAY 2034 - Title 5 </option>
  <option value="6"> JUNE 2210 - Title 6 </option>
  <option value="7"> JULY 1991 - Title 7 </option>
</select>

如果你使用一致的三位数月份缩写(包括JUN和JUL),在这种情况下你实际上不需要无间隔空格。

让您使用任何字体的一种非常不同的方法是使用一组单选按钮而不是select元素。然后,您可以将替代品的部分标签放在表格单元格中。 (这会导致可访问性方面的问题,因为逻辑上单个标签的内容已被拆分为多个元素,因此您无法以正常方式将标签与input元素相关联。)示例:

<table>
  <tr>
    <td><input type="radio" name="news2" value="1"></td>
    <td>JAN</td>
    <td>2000</td>
    <td>- Title 1</td>
  </tr>
  <tr>
    <td><input type="radio" name="news2" value="2"></td>
    <td>FEB</td>
    <td>1191</td>
    <td>- Title 2</td>
  </tr>
  <tr>
    <td><input type="radio" name="news2" value="3"></td>
    <td>MAR</td>
    <td>2014</td>
    <td>- Title 3</td>
  </tr>
  <tr>
    <td><input type="radio" name="news2" value="4"></td>
    <td>APR</td>
    <td>1995</td>
    <td>- Title 4</td>
  </tr>
  <tr>
    <td><input type="radio" name="news2" value="5"></td>
    <td>MAY</td>
    <td>2034</td>
    <td>- Title 5</td>
  </tr>
  <tr>
    <td><input type="radio" name="news2" value="6"></td>
    <td>JUNE</td>
    <td>2210</td>
    <td>- Title 6</td>
  </tr>
  <tr>
    <td><input type="radio" name="news2" value="7"></td>
    <td>JULY</td>
    <td>1991</td>
    <td>- Title 7</td>
  </tr>
</table>

我的jsfiddle显示了两种替代方案。

答案 1 :(得分:0)

不可能这样做。相反,您可以使用HTML table(或div s / ul),CSS和jQuery来模拟选择。

答案 2 :(得分:0)

只有在您包含多属性以允许多个选择的情况下,才能使用select元素像表格一样设置下拉菜单的样式。

<table>
<label>Number Selector</label>
<td>
  <select name="numbers" multiple>
    <option value="1" selected>One</option>
    <option value="2" selected>Two</option>
    <option value="3" selected>Three</option>
  </select>
</td>