У меня есть следующая структура HTML.Выбор элемента на основе присутствия окружающих родственных элементов
<div class="fieldset">
<p>Normal Input<i class="icon-question tooltip-top" title="Text Goes Here"></i></p>
<div>
<span><i class="icon-cart"></i></span>
<input name="">
<span><i class="icon-cart"></i></span>
<i class="icon-question tooltip-top" title="Text Goes Here"></i>
</div>
</div>
Я пытаюсь изменить настройки границы радиуса, согласно которой <input>
позиционируется.
Например, если <input>
имеет <span>
непосредственно перед ним, его радиус границы будет равен нулю сверху и снизу слева.
Я сделал это с помощью:
.fieldset > div > span + input {
border-radius: 0 4px 4px 0;
}
Но, когда есть <span>
после <input>
входного радиус границы должен быть равен нулем только из правой верхней и нижней стороны. Очевидно, я не могу использовать селектор +
для этого.
Как достичь желаемых результатов, когда <span>
после <input>
без использования JavaScript и изменения HTML?
UPDATE:
После ответов ниже и особенно методов BoltClock ♦ - кажется, что эта проблема почти решена! На приведенном ниже рисунке показаны все различные сценарии и код, используемый для их применения.
Единственный сценарий, который еще не работает, - это когда перед входом имеется только один интервал.
Текущий CSS является:
/*Fieldsets*/
.fieldset {
width: 100%;
display: table;
position: relative;
white-space: nowrap;
margin-bottom: 15px;
}
.fieldset:last-of-type {
margin-bottom: 0;
}
/*Fieldsets > Labels*/
.fieldset > p {
width: 1%;
margin-bottom: 3px;
}
/*Fieldsets > Input Container*/
.fieldset > div {
display: table-row;
position: relative;
}
.fieldset > div > * {
display: table-cell;
white-space: nowrap;
vertical-align: middle;
position: relative;
}
/*Fieldsets > Input + Icon*/
.fieldset > div > span {
border: 1px solid #B0C2CE;
padding: 5px 15px;
font-weight: bold;
width: 1%;
}
/*Fieldsets > Input + Icon Senarios*/
.fieldset > div > span:first-of-type {
border-right: 0;
border-radius: 4px 0 0 4px;
}
.fieldset > div > span:last-of-type {
border-left: 0;
border-radius: 0 4px 4px 0;
}
.fieldset > div > span:not(:only-of-type) + input {
border-radius: 0;
}
.fieldset > div > span + input,
.fieldset > div > span + textarea,
.fieldset > div > span + select,
.fieldset > div > span + .select-dropdown-single .select-dropdown-input,
.fieldset > div > span + .select-dropdown-multi .select-input {
border-radius: 0 4px 4px 0;
}
/*Fieldsets > Input + Help toolTip icon*/
.fieldset > div [class^="tooltip-"],
.fieldset > div [class*=" tooltip-"] {
text-align: center;
width: 30px;
}
HTML-:
<div class="fieldset">
<p>Normal Input</i></p>
<div>
<input name="">
</div>
</div>
<div class="fieldset">
<p>Normal Input</p>
<div>
<span><i class="icon-cart"></i></span>
<input name="">
</div>
</div>
<div class="fieldset">
<p>Normal Input</p>
<div>
<span><i class="icon-cart"></i></span>
<input name="">
<span><i class="icon-cart"></i></span>
</div>
</div>
<div class="fieldset">
<p>Normal Input</p>
<div>
<span><i class="icon-cart"></i></span>
<input name="">
<span><i class="icon-cart"></i></span>
<i class="icon-question tooltip-top" title="Text Goes Here"></i>
</div>
</div>
Вы можете изменить html-код? если _yes_ просто добавляет класс в ваш диапазон в зависимости от того, где он находится. –
Я могу просто предоставить основной контейнер классу соответственно, но я хочу посмотреть, есть ли способ сделать это без необходимости изменять HTML. – Leo
ну, вы должны добавить 'border-radius 0' в'.fieldset> div> input + span' (если span является прямым братом после ввода) –