Я пытался применить каретки к элементам группы ввода в Bootstrap 3. Пока безуспешно. Пробовал использовать отображение ячейки таблицы для вставленного псевдоэлемента, пробовал абсолютное позиционирование, пытался использовать свойство содержимого для отображения курсора веб-шрифта вместо моего предпочтительного треугольника курсора CSS. Просто не могу уложить это в голове.
Вот JSFiddle (красные границы - это то место, где я ожидал увидеть курсор).
.input-group .input-group-addon:last-child:before,
.input-group .input-group-btn:last-child:before,
.input-group .input-group-addon:not(:last-child):before,
.input-group .input-group-btn:not(:last-child):before {
position: absolute;
content: '';
width: 0;
height: 0;
border: 10px solid transparent;
margin: auto;
top: 0;
bottom: 0;
z-index: 1000;
}
.input-group .input-group-addon:last-child:before,
.input-group .input-group-btn:last-child:before {
border-right-color: red;
right: 0;
}
.input-group .input-group-addon:not(:last-child):before,
.input-group .input-group-btn:not(:last-child):before {
border-left-color: red;
left: 0;
}
РЕДАКТИРОВАТЬ: Основываясь на ответе, я изменил стили, которые теперь отлично работают во всех браузерах, кроме IE10 и ниже. IE смещает выровненные по левому краю input-group
каретки на 4px
, как можно увидеть здесь http://jsfiddle.net/W8mFS/3/ а>. Любые идеи, как это исправить?
Обновленный CSS:
.input-group.input-group-caret span:after,
.input-group.input-group-caret > input + span:before {
position: absolute;
content: '';
width: 0;
height: 0;
top: 0;
bottom: 0;
margin: auto;
border: 10px solid transparent;
}
.input-group.input-group-caret > input + span:before {
border-right-color: #cccccc;
margin-left: -20px;
}
.input-group.input-group-caret > input + span:empty:before {
margin-left: -44px;
}
.input-group.input-group-caret > input + span:after {
border-left-color: transparent;
}
.input-group.input-group-caret span:after {
border-left-color: #cccccc;
}
.input-group.input-group-caret .input-group-addon {
padding: 0;
}
.input-group.input-group-caret .input-group-addon i {
font-style: normal;
margin-left: 12px;
padding-right: 12px;
}
.input-group.input-group-caret .input-group-addon:empty {
padding-left: 24px;
}
ОБНОВЛЕНИЕ: с добавленным input-group
размером JSFiddle здесь: http://jsfiddle.net/W8mFS/ 4/а>.
Код LESS показывает использование переменных Bootstrap для управления размером курсора, полями и отступами:
@import "path_to_bootstrap/less/mixins";
@import "path_to_bootstrap/less/variables";
// input-group caret size
@caret-size-base: ceil(@font-size-base * 0.70); // ~10px;
@caret-size-large: ceil(@caret-size-base * 1.20); // ~12px;
@caret-size-small: ceil(@caret-size-base * 0.80); // ~8px;
// input-group caret
.input-group.input-group-caret {
span:after,
> input + span:before {
position: absolute;
content: '';
width: 0;
height: 0;
// v-align to middle
top: 0;
bottom: 0;
margin: auto;
border: @caret-size-base solid transparent;
}
> input + span:before { border-right-color: @input-border; margin-left: -( 2 * @caret-size-base ); } // right aligned
> input + span:empty:before { margin-left: -(( 2 * @padding-base-horizontal ) + ( 2 * @caret-size-base )); } // right aligned
> input + span:after { border-left-color: transparent; } // right aligned
span:after { border-left-color: @input-border; } // left aligned
// sizing
&.input-group-sm {
span:after,
> input + span:before {
border: @caret-size-small solid transparent;
}
> input + span:before { border-right-color: @input-border; margin-left: -( 2 * @caret-size-small ); } // right aligned
> input + span:empty:before { margin-left: -(( 2 * @padding-base-horizontal ) + ( 2 * @caret-size-small )); } // right aligned
> input + span:after { border-left-color: transparent; } // right aligned
span:after { border-left-color: @input-border; } // left aligned
}
&.input-group-lg {
span:after,
> input + span:before {
border: @caret-size-large solid transparent;
}
> input + span:before { border-right-color: @input-border; margin-left: -( 2 * @caret-size-large ); } // right aligned
> input + span:empty:before { margin-left: -(( 2 * @padding-base-horizontal ) + ( 2 * @caret-size-large )); } // right aligned
> input + span:after { border-left-color: transparent; } // right aligned
span:after { border-left-color: @input-border; } // left aligned
}
// input-group caret alignment fixes
.input-group-addon {
padding: 0;
i {
font-style: normal;
margin-left: @padding-base-horizontal;
padding-right: @padding-base-horizontal;
}
// fix-up alignment of empty addon
&:empty {
padding-left: 2 * @padding-base-horizontal;
}
}
}