Как насчет этого решения. Он использует css для первоначального «исправления» проблемы, а затем javascript при изменении списков (поскольку я предполагаю, что вы используете javascript для внесения изменений в список). (Я использовал jquery, потому что селекторы с асцендентом .has /: has очень удобны для этого случая, но вы могли бы сделать то же самое с немного большей работой в чистом js).
CSS довольно понятен, но учтите, что 20px в общем случае составляет 2 * select size
* option padding
+ 2 * select padding
, что в данном случае составляет 2 * 10 * 1 + 2 * 0 = 20, но только потому, что я удалил заполнение браузера по умолчанию (в Firefox это 1px). Поэтому, если вы хотите добавить некоторые отступы к самому выделению, убедитесь, что вы включили его в значение фиктивного нижнего отступа.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script>
function add() {
// real add code here
$('#right').append('<option>new foo</option>');
fix_select();
}
function remove() {
// real remove code here
$('#right').html('');
fix_select();
}
function fix_select() {
$('select').has('option').css('padding-bottom', '0');
$('select').not(':has(option)').css('padding-bottom', '20px');
}
</script>
<style type="text/css">
select { padding: 0 0 20px 0; }
option { padding: 1px; }
</style>
<select id="left" size="10" style="width:100px; padding-bottom: 0;">
<option>foo</option>
<option>bar</option>
<option>baz</option>
</select>
<select id="right" size="10" style="width:100px;">
</select>
<br/><br/>
<button onclick="add()">Add</button>
<button onclick="remove()">Remove</button>