私はこの投稿を見つけました クリックでスライドDIVを作成する方法?
しかし、すべての答えはJqueryメソッドです。 PURE CSSでこれを作成する方法はありますか?他にもいくつか心に留めていることがあります...
ここにその投稿の例へのリンクがあります// http://shutterbugtheme.tumblr.com/
私もグーグルを試しましたが、唯一の結果はjqueryメソッドです...
少しハックですが、それは可能です。状態を保持する2つの要素(CSSでは:checkedと呼ばれます)は、チェックボックスとラジオボタン要素です。したがって、for属性を使用してチェックボックスをラベルに関連付け、divを追加すると、(非表示)ボタンのステータスを読み取ることで結果を取得できます。
<div class=window>
<input type=checkbox class=toggle id=punch>
<label for=punch>Punch It, Chewie<label>
<div><p>Here’s my content. Beep Boop Blurp.</p></div>
</div>
そしてCSS:
input.toggle { display: none; }
input.toggle ~ div { height: 0px; margin: .2rem; overflow: hidden; }
input.toggle:checked ~ div { height: 180px; }
これは、純粋なCSSではクリックを認識できません。 :hoverとtransitionでそれを行うことができますが、それはあなたがjavascriptなしで得ようとしているのと同じくらい近いです。
.hover
{
cursor: pointer;
position: relative;
z-index: 1;
}
.slide
{
position: absolute;
top: 0;
z-index: -1;
-webkit-transition: top 1s;
-moz-transition: top 1s;
}
.hover:hover + .slide
{
top: 50px;
}
http://jsfiddle.net/Kyle_/MaMu9/1/
ただし、遷移はCSS3であり、IE <9および古いバージョンの優れたブラウザーでは機能しないことに注意してください。
編集:CSSの:focusプロパティを使用して別の回答が投稿された後:1つの注意点があります。下にスライドさせる要素の外側をクリックして、上にスライドさせる必要があります。それ以外の場合はうまく機能します。
これを機能させるには、要素にtabindex = '1'(または要素がドキュメントのどこにあるかによって意味のある任意の数)が必要であることに注意してください。
.hover:focus + .slide
{
top: 50px;
-webkit-transition: top 1s;
}
要素の「フォーカス」イベントを認識し、CSSトランジションを使用してそれに対処できます。
クリックするとdivを50ピクセル下に移動する例を次に示します
Markup
<div tabindex='1' id='box'></div>
[〜#〜] css [〜#〜]
#box {
background-color:#3a6d90;
width:100px; height:100px;
transition: margin-top 2s;
-moz-transition: margin-top 2s; /* Firefox 4 */
-webkit-transition: margin-top 2s; /* Safari and Chrome */
-o-transition: margin-top 2s; /* Opera */
}
#box:focus {
margin-top:50px;
outline:0;
}
これは、開始方法の良い例です。下部にあるように、JavaScriptですが、使用するanimate関数のソースを投稿しています。
純粋なcssが必要な場合は、長年にわたってws3schoolsを優れたリソースとして使用しますが、必要な効果が機能するかどうかは、ブラウザのサポートに大きく依存します。
彼らが持っている効果を作るための基本的な構造、あなたはボディ内の2つのdivの線に沿って、上部が非表示でコンテナが見えるように作業し、非表示のdivのアニメーションを実行して、他のdivを押し下げて表示するだけです。それらは両方ともインラインです。
<body>
<div id="hidden-div"></div>
<div id="main-content-div"></div>
</body>
このコードを実行します。
input {
display: none;
}
label {
cursor: pointer;
display: inline-block;
padding: 10px 20px;
border: 1px solid;
border-radius: 4px;
background: tomato;
color: #FFF;
font-family: arial;
-webkit-transition: background-color 0.1s, color 0.1s;
}
label:hover {
background: #blue;
color: #blue;
}
.test {
-webkit-transition: height .3s ease;
height: 0;
overflow: hidden;
width: 200px;
background: tomato;
margin-top: 10px;
color: #FFF;
}
input:checked + .test {
height: 100px;
}
<label for="check">Click me</label>
<input id="check" type="checkbox">
<div class="test">
<p>I am some hidden text</p>
</div>
これは、クリックを検出するためにtarget
疑似クラスを使用して行うことができます。
ボタンのhrefをスライディングdivのIDに設定します。
次に、高さのcss3 transition
を使用して、slidingDiv:targetクラスのスライディングdivの高さを設定することにより、下にスライドできます。
元のボタンがhrefを変更して純粋なCSSを使用してスライドdivを閉じる方法はないと思いますが、スライドdivに閉じるボタンを追加して閉じることができます。
この閉じるボタンは、スライディングdivクラスに同じ遷移を追加することで機能します。
これはWORKING DEMOです。
楽しい。
同じことをする別の方法:
.contents {
background: yellow;
color: rgba(0, 0, 0, .8);
padding: 20px;
margin:0;
}
.slide-up, .slide-down {
overflow:hidden;
}
.slide-up > div, .slide-down > div {
transform: translateY(-100%);
transition: .4s ease-in-out;
}
.slide-down > div {
transform: translateY(0);
}
簡単:
.contents {
background: yellow;
color: rgba(0, 0, 0, .8);
padding: 20px;
margin:0;
}
.slide-up, .slide-down {
overflow:hidden
}
.slide-up > div, .slide-down > div {
margin-top: -25%;
transition: margin-top 0.4s ease-in-out;
}
.slide-down > div {
margin-top: 0;
}