Bootstrap 3 Размещение значка внутри поля ввода

Я работаю в Bootstrap 3 и пытаюсь получить значок календаря в правой части окна ввода.

Мой html выглядит так:

<div class="col-md-12">
    <div class='right-inner-addon col-md-2 date datepicker' 
         data-date-format="yyyy-mm-dd">
        <input name='name' value="" type="text" class="form-control date-picker"
               data-date-format="yyyy-mm-dd"/>
        <i class="fa fa-calendar"></i>
    </div>
</div>

Я пробовал position: absolute следующим образом:

.right-inner-addon i {
    position: absolute;
    right: 5px;
    top: 10px;
    pointer-events: none;
    font-size: 1.5em;
}
.right-inner-addon {
    position: relative;
}

Но когда я это сделаю, он будет отлично смотреться в одном месте, но не будет правильно размещен в другом экземпляре.

Я также попытался выяснить, могу ли я использовать text-indent, чтобы увидеть, будет ли это работать повсюду, но он имеет тот же эффект.

.right-inner-addon i, 
.form-group .right-inner-addon i {
    display: inline-block;
    z-index: 3;
    text-indent: -15px;
    font-size: 1.3em;
}

Здесь jsFiddle, который может помочь

Ответ 1

Вы можете использовать input-group add-on с input-group-btn.

<div class="col-md-12">
    <div class='input-group add-on col-md-2 date datepicker' 
         data-date-format="yyyy-mm-dd">
        <input name='name' value="" type="text" class="form-control date-picker" 
               data-date-format="yyyy-mm-dd"/>
        <div class="input-group-btn">
            <button class="btn btn-default">
                <i class="fa fa-calendar"></i>
            </button>
        </div>
    </div>
</div>

С небольшим CSS, чтобы скрыть границу кнопки:

/* remove border between controls */
.add-on .input-group-btn > .btn {
    border-left-width: 0;
    left:-2px;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
            box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
/* stop the glowing blue shadow */
.add-on .form-control:focus {
    -webkit-box-shadow: none; 
            box-shadow: none;
    border-color:#cccccc; 
}

Демо: http://bootply.com/128059

Ответ 2

Использование исходных состояний проверки подлинности bootstrap, вероятно, предпочтительнее для написания пользовательского CSS.
И я уверен, что я тот, кто придумал этот CSS.

Просто используйте .has-feedback в своей группе форм и .form-control-feedback на своем значке:

<div class="form-group has-feedback">
    <label class="control-label sr-only">DatePicker</label>
    <input type="text" class="form-control date-picker" /> 
    <i class="fa fa-calendar form-control-feedback"></i>
</div>

Демо в jsFiddle

screenshot

Ответ 3

Проверьте эту скрипту, адаптирован из этого ответа

Отличие состоит в том, что в вашем случае <i> был помещен после <input>. Обмен их заставляет его работать. Поэтому позиционирование создавало беспорядок, а не цитируемый ответ.

Ответ 4

В приведенных выше ответах нажмите кнопку ввода, но нажмите на тег i, который не работает. поэтому я добавил свой код в ответ @KyleMit

<div class="form-group has-feedback">
  <input type="text" name="txtDatepicker" class="form-control date-picker" /> 
  <i class="glyphicon glyphicon-calendar" 
    onclick="javascript:$('input[name=txtDatepicker]').data('DateTimePicker').show();">
  </i>
</div>

Я немного изменил css для своего пользовательского интерфейса. Вы также можете изменить его.

<style>
  .right-inner-addon {
    position: relative;
   }

    .right-inner-addon input {
        padding-right: 30px;
    }

    .right-inner-addon i {
        position: absolute;
        left: 256px;
        padding: 14px 12px;
    }
</style>