div
を表示したいと思っていclick
ます。目標は、jQueryではなく純粋なCSSのみを使用することです。
2 に答える
次のようなものが必要だと考えてください。
マークアップは可能な限りシンプルに記述します。の1container
つの要素、私たちの1つの要素、および:link
のもう1つの要素popup
<!-- [container] -->
<div class="link-with-popup">
<!-- link -->
<div class="link">CSS</div>
<!-- [popup] -->
<div class="popup">
<div class="box">CSS Description</div>
</div>
<!-- [/popup] -->
</div>
<!-- [/container] -->
写真のレイヤー構造は次のとおりです。
容器
コンテナのCSSを書いてみましょう。
.link-with-popup {
/* for visualizing */
background: yellow;
/* we need relative, because childs are absolute */
position: relative;
margin-bottom: 10px;
height: 30px;
width: 400px;
}
[!]
コンテナを作成することに注意してくださいrelative
。子供たちがabsolute
モードになるからです。
リンク
link
上図のように、左から絶対要素として作成します。
.link {
background: blue;
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 100px;
z-index: 10;
}
現れる
popup
要素の次元はコンテナと同じであるため、すべてtop
のleft
、、、プロパティをに設定します。right
bottom
0
.popup {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: green;
z-index: 20;
}
[!]
z-index
要素のはpopup
要素より大きくなければならないことに注意してくださいlink
。
.popup {
/* we won't show the popup yet */
display: none;
}
ここまでで、この結果が得られます(jsFiddleで確認してください)。
今click
、私たちは私たちのリンクのために欲しいです。これは:active
、CSSの疑似セレクターを使用して実行する必要があります。しかし、どのように表示する必要がありpoup
ますか?によって次の兄弟要素を取得する必要がありlink
ます。+
CSSでセレクターを使用します。
.link:active + .popup {
display: block;
}
jsFiddleで結果を参照してください。ただし、問題は、ユーザーがマウスに気付くと、ポップアップが消えてしまうことです(にdisplay
設定されているためnone
)。そこで、の:hover
ルールを設定しpopup
て作成しblock
ます。
.popup:hover {
display: block;
}
jsFiddleデモを確認してください。今、私たちは十分に近づいています。popup
要素が私たちを隠す唯一の問題link
。しかし、それは問題ではありません。なぜならbackground
、私たちは私たちのために設定しないからですpopup
(そうなるでしょうtransparent
)。
文章
必要な要素についてはtext
、popup
次のルールを設定します。
.popup .box {
position: absolute;
/* note that we make a gap from left to don't hide the link */
left: 130px;
top: 0;
right: 0;
bottom: 0;
background: #505050;
}
jsFiddleデモを確認してください。これで、必要なものがすべて揃いました。
popup
次に、要素を作成します( astransparent
を設定するか、単にルールを削除します)。background
transparent
background: green;
.popup {
background: transparent;
}
そして、これが最終的なjsFiddleの結果です。また、CSSを追加すると、よりスタイリッシュになります。私が作成したこのようなもの。
覚えておくべきいくつかの重要な注意事項:
link
最終結果では、 (青いもの)とpopup
(灰色のもの)の間にギャップがあります。しかし、実際には、灰色の要素は私たちのものではありませんpopup
。これはの子でpopup
あり、ポップアップはコンテナの100%の幅と高さの要素です。
もう1つの方法は、:targetプロパティを使用することです(最新のブラウザーでのみ機能します)。
これがqucikデモで、適用してdivを非表示にしましたopacity: 0;
。リンクをクリックすると、divが次のように変更されますopacity: 1;
。リンクとdivは、URLのハッシュを使用して照合されます。
これが私の例のコードです。
HTML
<a href="#pop">Click me</a>
<br />
<div id="pop"></div>
CSS
#pop {
width: 100px;
height: 100px;
background: #000;
opacity: 0;
}
#pop:target {
opacity: 1;
}
ただし、いくつかの副作用があります。ブラウザは一致したdivにジャンプ/スクロールダウンし(これを防ぐことができるかどうかわかりませんか?)、URLでハッシュを使用しているため、ブラウザの履歴に影響し、前述のように、最新のブラウザでのみ機能します。
編集純粋なCSSクリックイベントの他のハック/トリックを調べたい場合は、これは良い投稿です-http://tympanus.net/codrops/2012/12/17/css-click-events/