Как добавить стили к предыдущему брату активного ввода, используя только CSS

Например, если у меня много этого:

<div class="form-group">
  <div class="col-xs-2"><label for="USER_FORM___unique_id" class="control-label">Employee ID</label>  </div>  
  <div class="col-xs-5"><input disabled="disabled" type="text" class="form-control" id="USER_FORM___unique_id__orig" value="20141100497">  </div>  
  <div class="col-xs-5"><input type="text" class="form-control" id="USER_FORM___unique_id" value="20141100497">  </div> 
</div>
<div class="form-group">
  <div class="col-xs-2"><label for="USER_FORM___name" class="control-label">Name</label>  </div>  
  <div class="col-xs-5"><input disabled="disabled" type="text" class="form-control" id="USER_FORM___name__orig" value="20141100497">  </div>  
  <div class="col-xs-5"><input type="text" class="form-control" id="USER_FORM___name" value="Me me me me">  </div> 
</div>
<!-- and so on -->
  • Я хочу добавить границу на родителя div.form-group, только когда последний внутренний input.col-xs-5 сосредоточены / парил

  • или выделив label.control-label только когда для атрибута это относится к сосредоточенным /hoevered

Можно ли использовать CSS только для этого?

Я знаю, что это возможно, используя jQuery, добавляя onfocus="highlight(this)", onblur="highlight(this)", onmouseenter="highlight(this)", а также onmouseleave="highlight(this)" на последнем входе:

function highlight(el) {
  el = $(el);
  var focused = el.is(":focus");
  var style1 = focused ? '1px solid blue' : '';
  $(el).parent().css('border',style1); // 1
  var style2 = focused ? 'underline' : '';
  $(el).prev().prev().css('text-decoration',style2); // 2
}

1 ответ

Решение

[Это взломать, но это работает]

Если вы можете изменить свою разметку, то вы можете добавить div после input.form-control и имитировать родительский стиль для этого div вместо родителя div.form-group, Пример:

.form-group {
    position: relative;
    border:1px solid blue;
    display:inline-block;
    padding:20px;
}
.form-control:focus + div {
    position: absolute;
    top:0;
    bottom:0;
    left:0;
    right:0;
    border:1px solid red;
}
<div class="form-group">
    <div class="col-xs-2"><label for="USER_FORM___name" class="control-label">Name</label></div>
    <div class="col-xs-5"><input disabled="disabled" type="text" class="form-control" id="USER_FORM___name__orig" value="20141100497" /></div>
    <div class="col-xs-5">
        <input type="text" class="form-control" id="USER_FORM___name" value="Me me me me" />
        <div></div> <!-- additional markup -->
    </div>
</div>

Другие вопросы по тегам