Как добавить стиль к активному входу предыдущий брат, используя только 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 только в том случае, если атрибут for ссылается на сфокусированный /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>