2014-11-25 3 views
0

Я изучал некоторые способы показать и скрыть элементы HTML, и я нашел this.Показать и скрыть различные элементы на фокусе

Мое намерение состоит в том, чтобы использовать способ показать и скрыть элементы без использования JavaScript, JQuery или всего остального, кроме CSS и HTML, поэтому я решил использовать атрибут tabindex, а затем я создал следующий простой случай изучения ...

HTML:

<div id="root" tabindex="1"> 
    <div>DIV A</div> 
    <a class="hidden" href="http://www.google.com">LINK</a> 
    <div class="hidden">DIV B</div> 
    <input class="hidden" type="submit" value="input"/> 
</div> 

CSS:

.hidden 
{ 
    color: red; 
    display: none; 
} 

#root:FOCUS .hidden 
{ 
    display: block; 
} 

Если вы посмотрите в соответствии с кодом, внутренний DIV может быть легко нажмите и выберите. Однако ссылку и кнопку, к сожалению, невозможно щелкнуть или выбрать. В попытке сделать так, фокус корневого div теряется.

Мой вопрос очень прост. Есть ли один или несколько способов, которыми это можно обойти/решить без использования JavaScript или JQuery или что-то еще? (Только для CSS и HTML)

Если было не ясно, мои намерения состоят в том, чтобы скрыть элементы, чтобы при их открытии их можно было использовать. Я хотел бы создать меню, содержащее подменю, и подменю появляются только при нажатии на их родительское меню (а не при прохождении мыши над ними).

Ах! И я должен упомянуть ... Я также нашел решение, которое использует флажок. К сожалению, это невозможно, потому что мне не придется снова нажимать на элемент, чтобы он был скрыт. То есть, я хотел бы просто щелкнуть за пределами элемента, чтобы он скрывал свой внутренний элемент, поэтому я выбрал «tabindex».

Заранее за внимание и терпение.

+0

'указатель событий: none' будет работать в вашем случае, но вы не сможете нажимать на внутренние элементы. [Fiddle] (http://jsfiddle.net/vfsLung8/) –

ответ

0

Вы также должны добавить FOCUS в скрытый класс, чтобы при их выборе фокус не терялся.

#root:FOCUS .hidden, 
.hidden:FOCUS 
{ 
    display: block; 
} 
+0

Здравствуйте, Джейсон W, спасибо за ответ! Я пытался сделать то, что вы сказали, и, к сожалению, это не сработало. У вас есть другие идеи? Любой будет очень рад. Еще раз спасибо. – Loa

+0

Я вижу, что ответ фиксирует ссылку, но кнопка работает только после того, как вы нажмете ее второй раз, потому что другие элементы возвращаются к скрытым, поскольку они теряют фокус с нажатия кнопки. Я посмотрю что я могу сделать. –

+0

Я не вижу способ без javascript, чтобы он реагировал на щелчок и все еще имеет кнопку, когда это не первый элемент. Вы можете изменить css на '#root: hover .hidden', чтобы вы наводили курсор на весь контейнер #root, а поскольку размер контейнера расширяется, фокус не теряется, и все функции в контейнере работают по назначению.Однако это может не соответствовать вашим бизнес-требованиям, поскольку вы привязаны к зависанию и не фокусируетесь, чтобы имитировать событие стиля onclick. –

0

Проблема в вашем коде заключается в том, что всякий раз, когда вы нажимаете дочерний элемент скрытого класса, родительский элемент теряет фокус. Таким образом, стиль css применяется к умолчанию, который должен скрывать дочерние элементы со скрытым классом.

Я думаю, что это можно решить, используя javascript.

function focusRoot(e) { 
    e.currentTarget.parentElement.focus(); 
    return; 
} 
var root = document.getElementById('root'); 
var cs = root.children; 
for (var i = 0; i < cs.length; i++) { 
    var c = cs[i]; 
    c.onfocus = focusRoot; 
} 

Working fiddle

+0

Здравствуйте, Mr_Green. Спасибо, что ответили! Как я уже говорил ранее в своем вопросе, использовать флажок нецелесообразно, так как пользователю придется снова щелкнуть по меню (DIV A) (а не за его пределами), чтобы скрыть его содержимое. Кроме того, я также сказал, что я не могу использовать JavaScript (и ваш пример не работает). Я ценю вашу помощь, и если вы подумаете о чем-то другом, я буду благодарен. Благодарю. – Loa

+0

@ Loa можно использовать только javascript. если вы передумали, включив javascript, сообщите мне, что именно не работает в приведенном выше коде. –

+0

Я думаю, что вы и Джейсон W правы. Невозможно сделать это без использования JavaScript. Я ценю ваше внимание и терпение. – Loa

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