クリック時に表示されるナビゲーションドロップダウンがあります。ただし、純粋なCSS機能を使用するには、リンクをもう一度クリックしてサブメニューを閉じる必要があります。セットに含まれていないすべてのクリックをキャッチ
私は、サブメニュー内にないクリックがそれを閉じるように変更したいと思います。
私はこのような何かを試してみましたが、無駄にしました:
$('*:not(.submenu > li > a)').click(function() {
$('nav .dropdown input').removeAttr('checked');
console.log('clicked outside sub-menu');
});
これは、すべてのクリックを登録し、でも$('nav .dropdown input').removeAttr('checked');
ラインは、メニューを非表示にする作業を行い、それが呼ばれることを意味.submenu > li > a
と一致するものメニューを開こうとしているときでも、メニューが開かないことがあります。
CSSドロップダウンは、チェックボックス入力を介して機能します。ここでCSSは役に立ちますが、私の問題はJavascriptにあります。なぜなら、CSSの機能はうまく機能するからです。ここで
はフィドルで、CSSは以下の通りです:
$('body').on('click', ':not(.submenu > li > a)', function() {
$('nav .dropdown input').removeAttr('checked');
console.log('clicked outside sub-menu');
});
あなたがトンを追加していないその方法:https://jsfiddle.net/z3yj7pLs/
ul.dropdown {
position:fixed;
top:30px;
width:100%;
height:3em;
margin:0;
padding:0 10px;
color:#eee;
}
ul.dropdown > li{
float:left;
list-style-type:none;
position:relative;
}
ul.dropdown label{
position:relative;
display:block;
transition:background 0.3s;
cursor:pointer;
bottom: -2px;
left: -10px;
}
ul.dropdown label:after{
content:"";
position:absolute;
display:block;
top:50%;
right:5px;
width:0;
height:0;
border-top:4px solid rgba(255,255,255,.5);
border-bottom:0 solid rgba(255,255,255,.5);
border-left:4px solid transparent;
border-right:4px solid transparent;
transition:border-bottom .1s, border-top .1s .1s;
}
ul.dropdown label:hover,
ul.dropdown input:checked ~ label{
}
ul.dropdown input:checked ~ label:after{
border-top:0 solid rgba(255,255,255,.5);
border-bottom:4px solid rgba(255,255,255,.5);
transition:border-top .1s, border-bottom .1s .1s;
}
/*hide the inputs*/
ul.dropdown input{display:none}
/*show the second levele menu of the selected voice*/
ul.dropdown input:checked ~ ul.submenu{
max-height:300px;
transition:max-height 0.5s ease-in;
}
/*style for the second level menu*/
ul.dropdown ul.submenu{
max-height:0;
padding:0;
overflow:hidden;
list-style-type:none;
background:#444;
box-shadow:0 0 1px rgba(0,0,0,.3);
transition:max-height 0.5s ease-out;
position:absolute;
min-width:100%;
}
ul.dropdown ul.submenu li a{
display:block;
padding:12px;
color:#ddd;
text-decoration:none;
box-shadow:0 -1px rgba(0,0,0,.5) inset;
transition:background .3s;
white-space:nowrap;
}
ul.dropdown ul.submenu li a:hover{
background:rgba(0,0,0,.3);
}
素晴らしい作品です。私は未来のためにevent.toElementを覚えています、それは私が探していたものです!ありがとう!! – SISYN
あなたは歓迎です:)答えに対する投票も高く評価されます – Dekel