2017-02-22 27 views
0

Я пытаюсь создать пользовательский компонент, используя только CSS и HTML. Поведение компонента будет выглядеть следующим образом: при выборе входа (с фокусом) открывается другой контейнер. Проблема заключается в том, когда контейнер открыт вход теряет фокус и контейнер закрыт на первый щелчок :(вход потерять фокус, когда другой элемент сфокусирован

Итак, как я могу иметь, что фокус ввода внимание, когда я нахожусь на открытом контейнере сосредоточены?

<div class="block"> 
    <label>Field</label> 
    <input type="text" tabindex="-1"/> 
    <div tabindex="-1" class="infront"> 
     Keep this bastard open.<br/> 
     <br/> 
     while clicking on this div 
    </div> 
</div> 

CSS

.block{ 
    position: relative; 
    display: inline-block; 
    margin: 50px; 
} 

.infront{display: none;} 

.block input[type="text"]:focus ~ .infront { 
    display: block; 
    position: absolute; 
    top:100%; 
    width: 80%; 
    right: 0; 
    background: #ccc; 
    opacity:0.8; 
} 

Fiddle:

+0

жаль, что я не могу следовать за вами, я действительно не понимаю, в чем проблема – MKAD

+0

я думаю, что ваш код работает отлично – Sharmila

+0

@MKAD, когда вход будет сфокусирован, «.infront» контейнер открывается, если я нахожусь в контейнере «.infront», который скрывается, потому что вход теряет фокус. Мне нужно, чтобы этот контейнер открылся, если я щелкнул внутри и спрятался, если я нахожусь за пределами этого контейнера .... – BurebistaRuler

ответ

1

Вам нужно заботиться о состоянии .infront контейнерных государств.

Обновите CSS к этому

.block input[type="text"]:focus ~ .infront 
, .infront:hover 
, .infront:active 
, .infront:focus { 
    display: block; 
    position: absolute; 
    top:100%; 
    width: 80%; 
    right: 0; 
    background: #ccc; 
    opacity:0.8; 
} 
+0

Спасибо за ваш ответ! – BurebistaRuler

1

Я думаю, вы не можете сделать это только с HTML и CSS. Вы будете нуждаться в некоторых JQuery код, как это:

$(.block input[type=text]).on('focus', function(e) { 
    $('.infront').show(); 
}); 
+0

Не совсем, контейнер «.infront» - это шоу из моего CSS, поэтому не нужно показывать jQuery. Мне нужно, чтобы этот контейнер «.infront» был открыт, если я нахожу его внутри и скрываю контейнер, если я выхожу за пределы этого контейнера ... – BurebistaRuler

+0

@burebistaruler Вы правы, но если вы хотите сохранить это как отображение: block, вы нужно изменить его с помощью js, а затем, если вы сосредоточитесь, его не удалите. –

 Смежные вопросы

  • Нет связанных вопросов^_^