html select option separator

Html

Html Problem Overview


How do you make a separator in a select tag?

New Window
New Tab
-----------
Save Page
------------
Exit

Html Solutions


Solution 1 - Html

The disabled option approach seems to look the best and be the best supported. I've also included an example of using the optgroup.

optgroup (this way kinda sucks):

<select>
    <optgroup>
        <option>First</option>
    </optgroup>
    <optgroup label="_________">
        <option>Second</option>
        <option>Third</option>
    </optgroup>
</select>

disabled option (a bit better):

<select>
    <option>First</option>
    <option disabled>_________</option>
    <option>Second</option>
    <option>Third</option>
</select>

And if you want to be really fancy, use the horizontal unicode box drawing character.
(BEST OPTION!)

<select>
    <option>First</option>
    <option disabled>──────────</option>
    <option>Second</option>
    <option>Third</option>
</select>

http://jsfiddle.net/JFDgH/2/

Solution 2 - Html

Try:

<optgroup label="----------"></optgroup>

Solution 3 - Html

This is an old thread, but since no one posted a similar response, I'll add this as it's my preferred way of separation.

I find using dashes and such to be somewhat of an eyesore since it could fall short of the width of the selection box. So, I prefer to use CSS to create my separators.. a simple background coloring.

<select>
  <option style="background-color: #cccccc;" disabled selected>Select An Option</option>
  <option>First Option</option>
  <option>Second</option>
  <option style="font-size: 1pt; background-color: #000000;" disabled>&nbsp;</option>
  <option>Third</option>
  <option>Fourth</option>
  <option style="font-size: 1pt; background-color: #000000;" disabled>&nbsp;</option>
  <option>Fifth</option>
  <option>Sixth</option>
</select>

Solution 4 - Html

If you don't want to use the optgroup element, put the dashes in an option element instead and give it the disabled attribute. It will be visible, but greyed out.

<option disabled>----------</option>

Solution 5 - Html

Instead of the regular hyphon I replaced it using a horizontal bar symbol from the extended character set, it won't look very nice if the user is in another country that replaces that character but works fine for me. There is a range of different chacters you could use for some great effects and there is no css involved.

<option value='-' disabled>――――</option>

Solution 6 - Html

Define a class in CSS:

option.separator {
	margin-top:8px;
	border-top:1px solid #666;
	padding:0;
}

Write in HTML:

<select ...>
	<option disabled class="separator"></option>
</select>

Solution 7 - Html

I'm making @Laurence Gonsalves' comment into an answer because it's the only one that works semantically and doesn't look like a hack.

Try adding this to your stylesheet:

optgroup + optgroup { border-top: 1px solid black } 

Much less cheesy looking than a bunch of dashes.

Solution 8 - Html

If it's WebKit-only, you can use <hr> to create a real separator.

http://code.google.com/p/chromium/issues/detail?id=99534

Solution 9 - Html

another way is to use a css 1x1 background image on option which only seems to work with firefox and have a "----" fallback

<option value="" disabled="disabled" class="SelectSeparator">----</option> 

.SelectSeparator
    {
      background-image:  url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==);
      color:black;
      background-repeat:repeat-x;
      background-position:50% 50%;
      background-attachment:scroll;
}

http://jsfiddle.net/yNecQ/6/

or to use javascript (jquery) to:

-hide the select element and 
-show a div which can be completely styled and 
-reflect the div state onto the select for the form submit

http://tutorialzine.com/2010/11/better-select-jquery-css3/


see also https://stackoverflow.com/questions/4317025/how-to-add-horizontal-line-in-html-select-control

Solution 10 - Html

This one is best always.

Solution 11 - Html

we can make use of optgroup tag without options

  • can set the font-size:1px to minimize the height, and
  • some pretty background for it

.divider {
  font-size: 1px;
  background: rgba(0, 0, 0, 0.5);
}

.divider--danger {
  background: red;
}

<select>
  <option value="option1">option 1 key data</option>
  <option value="option2">option 2 key data</option>
  <optgroup class="divider"></optgroup>
  <option value="option3">option 3 key data</option>
  <option value="option4">option 4 key data</option>
</select>

<select>
  <option value="option1">option 1 key data</option>
  <option value="option2">option 2 key data</option>
  <optgroup class="divider divider--danger"></optgroup>
  <option value="option3">option 3 key data</option>
  <option value="option4">option 4 key data</option>
</select>

Codepen.io: https://codepen.io/JasneetDua/pen/yLOYwaV?editors=1100

Solution 12 - Html

To build upon Jasneet's answer:

  • Style the background of a disabled option as gray (Jasneet)
  • Add disabled options above and below to pad the separator

Basically, use three disabled options to make one naturally-styled separator. I have selected a very thin gray line of 0.1px and pad heights of 0.25em because I think this combination looks the most natural:

Separator inside HTML select list

<select>
  <option :value="item1">Item 1</option>
  <option disabled style="font-size: 0.25em;"></option>
  <option disabled style="background: #c9c9c9; font-size: 0.1px;"></option>
  <option disabled style="font-size: 0.25em;"></option>
  <option :value="item2">Item 2</option>
</select>

Solution 13 - Html

You could use the em dash "—". It has no visible spaces between each character.
(In some fonts!)

In HTML:

<option value="—————————————" disabled>—————————————</option>
Or in XHTML:
<option value="—————————————" disabled="disabled">—————————————</option>

Solution 14 - Html

 <option  data-divider="true" disabled>______________</option>

you can do this one also. it is easy and make divider select drop down list.

Solution 15 - Html

I elected to conditionally alternate color and background. Setting a sort order and with vue.js, I did something like this:

<style>
    .altgroup_1 {background:gray; color:white;}
    .altgroup_2{background:white; color:black;}
</style>

<option :class = {
    'altgroup_1': (country.sort_order > 25),
    'altgroup_2': (country.sort_order > 50 }"
    value="{{ country.iso_short }}">
    {{ country.short_name }}
</option

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPhillip SennView Question on Stackoverflow
Solution 1 - HtmlAlex KView Answer on Stackoverflow
Solution 2 - HtmlTina OroojiView Answer on Stackoverflow
Solution 3 - HtmlDexter BlakeView Answer on Stackoverflow
Solution 4 - Htmljames.garrissView Answer on Stackoverflow
Solution 5 - Htmluser511941View Answer on Stackoverflow
Solution 6 - HtmlKlaus HeyneView Answer on Stackoverflow
Solution 7 - HtmlNoumenonView Answer on Stackoverflow
Solution 8 - HtmlJonView Answer on Stackoverflow
Solution 9 - HtmlebriccaView Answer on Stackoverflow
Solution 10 - HtmlTejashreeView Answer on Stackoverflow
Solution 11 - HtmlJasneet DuaView Answer on Stackoverflow
Solution 12 - HtmlmikeypieView Answer on Stackoverflow
Solution 13 - HtmlTobiView Answer on Stackoverflow
Solution 14 - HtmlDSKView Answer on Stackoverflow
Solution 15 - HtmlSTWilsonView Answer on Stackoverflow