Bootstrap — выбор и кнопка рядом друг с другом

#css #twitter-bootstrap #twitter-bootstrap-3

#css #twitter-bootstrap #twitter-bootstrap-3

Вопрос:

У меня есть <select> и кнопка рядом друг с другом, и я хотел оформить их с помощью bootstrap. Select без класса выглядит так:

введите описание изображения здесь

select с class="form-control" выглядит следующим образом: введите описание изображения здесь

Обратите внимание, что кнопка теперь находится под выбором. Я не уверен, какое свойство CSS отвечает за это. Что я должен изменить, чтобы кнопка была рядом с выбором?

Комментарии:

1. Есть лучший ответ из принятых (мой), не могли бы вы, пожалуйста, рассмотреть для других пользователей, что это было бы лучшим решением, и принять его вместо моего? Спасибо

Ответ №1:

Вы можете обернуть <select> и <button> в input-group :

 <div class="input-group">
  <select class="form-control">
    <option>Select option..</option>
    <option>Option 1</option>
    <option>Option 2</option>
  </select>            
  <span class="input-group-btn">
    <button class="btn btn-default" type="button" tabindex="-1"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>
  </span>
</div>
  

Таким образом, вы можете использовать обычную форму и просто сгруппировать один выбор и кнопку вместе.

Ознакомьтесь с примером JSFiddle

Комментарии:

1. Лучший выбор, если у вас есть другие входные данные в дополнение к выбору в вашей форме.

2. В качестве предупреждения в официальном Bootstrap отмечается, что следует избегать использования <select> элементов в input-group , поскольку они не могут быть полностью оформлены в браузерах WebKit (например, Safari и Chrome). Это можно легко увидеть, посмотрев на jsfiddle, ссылка на который находится здесь, в Chrome. Кнопка не совсем помещается рядом с выбором, поскольку у нее все еще изогнутые края. В настоящее время я не знаю решения этой проблемы.

3. @Wingpad, Просто подумал, что другим полезно упомянуть, что на сегодняшний день эта группа ввода хорошо отображается в chrome.

4. Это лучшее решение. Спасибо.

Ответ №2:

Следующий синтаксис Boostrap :

Вы должны добавить form-inline класс в свою форму, смотрите официальный документ

Официальный пример

 <form class="form-inline" role="form">
  <div class="form-group">
    <label class="sr-only" for="exampleInputEmail2">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail2" placeholder="Enter email">
  </div>
  <div class="form-group">
    <div class="input-group">
      <div class="input-group-addon">@</div>
      <input class="form-control" type="email" placeholder="Enter email">
    </div>
  </div>
  <div class="form-group">
    <label class="sr-only" for="exampleInputPassword2">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword2" placeholder="Password">
  </div>
  <div class="checkbox">
    <label>
      <input type="checkbox"> Remember me
    </label>
  </div>
  <button type="submit" class="btn btn-default">Sign in</button>
</form>
  

Комментарии:

1. Проблема с form-inline в том, что это стиль формы, то есть ваша форма либо встроенная, либо нет. Это означает, что вы не можете исправить встроенные элементы без встроенных элементов. Они пытаются решить эту проблему в Bootstrap 4, хотя: github.com/twbs/bootstrap/issues/21581

Ответ №3:

Другой подход заключается в том, чтобы обернуть элементы управления в flex div:

 <div style="display: flex;">
  <select class="form-control">...</select>
  <!-- optional spacer: <div style="width: 8px;" /> -->
  <button type="button" class="btn btn-default">Click Me!</button>
</div>
  

Комментарии:

1. Спасибо. идеально соответствует моим требованиям.

Ответ №4:

Bootstrap 4

Используйте вспомогательные классы! d-flex подойдет просто отлично.

 body {

  padding-top: 20px;
}  
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X 965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH 8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM B07jRM" crossorigin="anonymous"></script>

<div class="container">
  <div class="row">
    <div class="col-12">

      <!-- Wrap your 2 elements in a d-flex -->

      <div class="d-flex">
        <select class="form-control mr-2">
          <option value="1">One</option>
          <option value="2">Two</option>
          <option value="3">Three</option>
        </select>
        <input type="button" class="btn btn-secondary" value="Select" />
      </div>

    </div>
  </div>
</div>  

Ответ №5:

Скорее всего, это то, что вы хотите…

 <div style={{display: "flex"}}>
    <div style={{width: "80%"}}>
        <Textbox
          attributesInput={{ // Optional.
            id: 'listPrice',
            name: 'listPrice',
            type: 'text', 
            placeholder: 'Please Enter List Price',
          }}
          class="field inputField"
          value={listPrice} // Optional.[String].Default: "".
          onChange={(value) => handleSetListPrice(value)} // Required.[Func].Default: () => {}. Will return the value.
          onBlur={() => {}} // Optional.[Func].Default: none. In order to validate the value on blur, you MUST provide a function, even if it is an empty function. Missing this, the validation on blur will not work.
          validationOption={{
            type: 'number', // Optional.[String].Default: "string". Validation type, options are ['string', 'number', 'alphanumeric', 'alpha'].
            min: 1, // Optional.[Number].Default: 0. Validation of min length when validationOption['type'] is string, min amount when validationOption['type'] is number.
            max: 100, // Optional.[Number].Default: 0. Validation of max length when validationOption['type'] is string, max amount when validationOption['type'] is number.
            mantissa: 2 // Optional.[Number].Default: -1. Number precision.
          }}
        /> 
    </div>
    <div style={{width: "20%"}}>
        <Select  options={[ { value: 'eth', label: 'ETH' }, { value: 'xyzx', label: 'XYZ' } ]} />
    </div>
</div> 
</div> 
  

Ответ №6:

Как и сказал Люк, но используйте input-group-append для диапазона кнопок. Это избавляет от округлости кнопки и обеспечивает лучшее соответствие.