Ответ 1
8/29/2016 Редактировать
Исходный ответ ниже не работает в современных браузерах. Для тех, кому еще нужно использовать тег вместо того, чтобы делать магии с помощью списков HTML, в этом потоке stackoverflow было найдено лучшее решение: Предоставление иерархии "OPTION" в "" ВЫБОР" тег
Я бы рекомендовал решение, предложенное igor-krupitsky, которое предлагает dropping & nbsp; и используя двоичный & # 160; вместо. По крайней мере, в Chrome это не сломается, используя клавиатуру, чтобы найти первый символ элемента в списке.
Редактировать конец
Текущая спецификация HTML не предусматривает вложенных тегов, добавляющих любую функциональность (например, отступы). См. эту ссылку.
В то же время вы можете вручную создавать свои уровни с помощью CSS. Я попытался использовать стили в вашем примере, но по какой-то причине они не отображались правильно, поэтому, по крайней мере, следующее будет работать:
<select name="select_projects" id="select_projects">
<option value="">project.xml</option>
<optgroup label="client1">
<option value="">project2.xml</option>
</optgroup>
<optgroup label="client2">
<option value="">project5.xml</option>
<option value="">project6.xml</option>
<optgroup label="client2_a">
<option value="" style="margin-left:23px;">project7.xml</option>
<option value="" style="margin-left:23px;">project8.xml</option>
</optgroup>
<option value="">project3.xml</option>
<option value="">project4.xml</option>
</optgroup>
<option value="">project0.xml</option>
<option value="">project1.xml</option>
</select>