Подтвердить что ты не робот

Почему этот CSS nowrap не работает?

Я пытаюсь держать bar_top_container div от его содержимого независимо от ширины страницы (т.е. оба выбора должны отображаться всегда в одной строке), однако это не работает, когда ширина страницы для них мала как поместиться на одну строку, как я могу это исправить?

Стили:

#bar_top_container { position: relative; white-space: nowrap; }
#bar_top_block { float: left; padding-left: 10px; padding-right: 10px; border-right: 1px solid #4965BB; }
#clear { clear: both; }

HTML:

<div id="bar_top_container">
 <div id="bar_top_block">
  <span class="bold">select1:  </span>
   <select><option value="asdf">asdf</option></select>
 </div>
 <div id="bar_top_block">
  <span class="bold">asdf: </span>
   <select><option value="blah">-- select action --</option></select>
 </div>
 <div id="clear"></div>
</div>
4b9b3361

Ответ 1

У вас могут быть как свойства block, так и inline для элемента, если вы отображаете его как... inline-block!

Вот ваш код исправлен и работает:

  • span.bold: label s

  • a label связан с его элементом form с помощью атрибутов for/id

  • bar_top_block используется id. Должен быть class

  • нет необходимости использовать float: left; в качестве display: inline-block;

  • поэтому нет необходимости в очищающем элементе

  • Элементы .bar_top_block также отображаются в строке, поэтому любое whitespace между ними отображается как пробел. Чтобы этого избежать, я добавил комментарий, который позволяет избежать пробелов, но все же позволяет читать HTML-код. Текст внутри "нет пробелов", поэтому разработчик будет знать, что этот комментарий существует по какой-то причине и его не следует удалять:)

  • вы можете удалить width на body, он здесь только для примера

  • вы можете играть с свойством overflow в контейнере

  • поскольку IE7 и ниже не понимают значение inline-block для элементов блока, таких как div, вы должны использовать display: inline и дать элементу hasLayout с, например, zoom: 1;

  • лучший способ настроить таргетинг на IE7 и ниже, и только эти браузеры имеют условный комментарий

  • Я добавил поддержку Fx2, но это просто по историческим причинам:)

.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>Qaru 3150509 - Felipe</title>
    <style type="text/css">
body {
    width: 300px;
}

#bar_top_container {
    overflow: auto;
    white-space: nowrap;
    border: 1px solid red;
}

.bar_top_block {
    display: -moz-inline-stack; /* Fx2, if you've to support this ooold browser. You should verify that you can still click in the elements, there is a known bug with Fx2 */
    display: inline-block;
    padding-left: 10px;
    padding-right: 10px;
    border-right: 1px solid #4965BB;
}

    </style>
    <!--[if lte IE 7]><style type="text/css">
.bar_top_block {
    display: inline;
    zoom: 1;
}
    </style> <![endif]-->
</head>
<body>
    <form method="post" action="#" id="bar_top_container">
        <div class="bar_top_block">
            <label for="select1">Obviously I am a label: </label>
            <select id="select1"><option value="asdf">asdf</option></select>
        </div><!-- no whitespace
        --><div class="bar_top_block">
            <label for="select2">I'm a label too and I need a for attribute: </label>
            <select id="select2"><option value="blah">-- select action --</option></select>
        </div>
    </form>
</body>
</html>

Ответ 2

Перемещение плавающих элементов как white-space: nowrap не работает для элементов блока, а только для встроенных элементов и текста.

Ответ 3

Я предлагаю использовать действительное использование формы:

<form>
  <label>select1: <select><option value="asdf">asdf</option></select></label>
  <label>asdf: <select><option value="blah">-- select action --</option></select></label>
</form>

Надеюсь, что это поможет.