スマートフォンで画面が小さいので、情報のあるエリアをボタンで開閉しつつ状態を保持したい、という場合があると思います。
今回はCSSで作ったトグルボタンで指定したエリアを開閉し、なおかつ状態を保持する方法をご紹介いたします。
サンプル
「お知らせ」をクリックすると開閉し、ブラウザを更新しても開閉の状態が保持されます。
サンプルをご覧ください。
ソースと解説
ソースはjs、html、cssの3つとなります。
js
$(function() {
$("#toggle").click(function() {
$("#info_display").toggle('fast');
//クリックした時にcookieのセット確認
if ($.cookie("info_display")) {
$.cookie("info_display", '', {
//cookie("info_display")を削除
expires: -1
});
} else {
$.cookie("info_display", '1', {
//cookie("info_display")をセット
expires: 7
});
}
});
//セットされたcookieの設定
if ($.cookie("info_display")) {
//もしcookie("info_display")があれば
$("#info_display").toggleClass("d_none"); //隠す
} else {
}
});
「#toggle」要素をクリックしたときにクッキーがセットされ、状態が保持されることになります。またクッキーの判定が行われ、要素を隠す状態を保持するために「d_none」のクラスで非表示を行っています。
「toggle(‘fast’)」で開閉する速度を決定しています。「fast」で速く、「slow」で遅くなります。
html
ボタン、開閉するエリア、オプションで存在するであろう「もっと見る」要素に分かれています。
<h2 id="toggle" class="toggle">
お知らせ
</h2>
<ul id="info_display">
<li><a href="#">お知らせ1</a></li>
<li><a href="#">お知らせ2</a></li>
<li><a href="#">お知らせ3</a></li>
</ul>
<p>
<a href="#" class="more">
もっと見る
</a>
</p>
ボタン部分です。
<h2 id="toggle" class="toggle">
お知らせ
</h2>
非表示される部分です。
<ul id="info_display">
<li><a href="#">お知らせ1</a></li>
<li><a href="#">お知らせ2</a></li>
<li><a href="#">お知らせ3</a></li>
</ul>
オプションの「もっと見る」部分です。
<p>
<a href="#" class="more">
もっと見る
</a>
</p>
css
デフォルトの打ち消しと、トグルボタン、オプションの「もっと見る」、非表示に使用する「display」のスタイルに分かれます。
h2,
p,
#info_display,
#info_display li {
margin: 0;
padding: 0;
}
.toggle {
cursor: pointer;
position: relative;
padding: 7px 0;
font-size: 16px;
font-weight: bold;
color: #FFF;
text-align: center;
-webkit-border-top-left-radius: 8px;
-webkit-border-top-right-radius: 8px;
-moz-border-top-left-radius: 8px;
-moz-border-top-right-radius: 8px;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
background: rgb(169,3,41); /* Old browsers */
background: -moz-linear-gradient(top, rgb(169,3,41) 0%, rgb(109,0,25) 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(top, rgb(169,3,41) 0%,rgb(109,0,25) 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(to bottom, rgb(169,3,41) 0%,rgb(109,0,25) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a90329', endColorstr='#6d0019',GradientType=0 ); /* IE6-9 */
}
.toggle:before {
display: block;
content: "";
position: absolute;
top: 40%;
right: 15px;
width: 10px;
height: 10px;
margin: -5px 0 0;
border-top: 1px solid #FFF;
border-right: 1px solid #FFF;
-webkit-transform: rotate(135deg);
-moz-transform: rotate(135deg);
transform: rotate(135deg);
}
a.more {
display: block;
padding: 5px;
text-decoration: none;
color: #FFF;
text-align: center;
-webkit-border-bottom-left-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
-moz-border-bottom-left-radius: 8px;
-moz-border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
background: #BE9999;
}
.d_none {
display: none;
}
デフォルトのスタイルを打ち消しています。
h2,
p,
#info_display,
#info_display li {
margin: 0;
padding: 0;
}
トグルボタンの基本プロパティです。
.toggle {
cursor: pointer;
position: relative;
padding: 7px 0;
font-size: 16px;
font-weight: bold;
color: #FFF;
text-align: center;
-webkit-border-top-left-radius: 8px;
-webkit-border-top-right-radius: 8px;
-moz-border-top-left-radius: 8px;
-moz-border-top-right-radius: 8px;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
background: rgb(169,3,41); /* Old browsers */
background: -moz-linear-gradient(top, rgb(169,3,41) 0%, rgb(109,0,25) 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(top, rgb(169,3,41) 0%,rgb(109,0,25) 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(to bottom, rgb(169,3,41) 0%,rgb(109,0,25) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a90329', endColorstr='#6d0019',GradientType=0 ); /* IE6-9 */
}
「.toggle」の「:before」疑似要素でボタンの右端にある三角アイコンを表現しています。
.toggle:before {
display: block;
content: "";
position: absolute;
top: 40%;
right: 15px;
width: 10px;
height: 10px;
margin: -5px 0 0;
border-top: 1px solid #FFF;
border-right: 1px solid #FFF;
-webkit-transform: rotate(135deg);
-moz-transform: rotate(135deg);
transform: rotate(135deg);
}
要素を隠す状態の保持を「display: none;」で行っています。
.d_none {
display: none;
}
全ソース
jqueryは「jquery-1.11.3.min.js」と「jquery.cookie.js」を使用しています。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>
CSSで作ったトグルボタンで開閉して状態を保持する
</title>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<script type="text/javascript" src="jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="jquery.cookie.js"></script>
<script type="text/javascript">
$(function() {
$("#toggle").click(function() {
$("#info_display").toggle('fast');
//クリックした時にcookieのセット確認
if ($.cookie("info_display")) {
$.cookie("info_display", '', {
//cookie("info_display")を削除
expires: -1
});
} else {
$.cookie("info_display", '1', {
//cookie("info_display")をセット
expires: 7
});
}
});
//セットされたcookieの設定
if ($.cookie("info_display")) {
//もしcookie("info_display")があれば
$("#info_display").toggleClass("d_none"); //隠す
} else {
}
});
</script>
<style type="text/css">
h2,
p,
#info_display,
#info_display li {
margin: 0;
padding: 0;
}
.toggle {
cursor: pointer;
position: relative;
padding: 7px 0;
font-size: 16px;
font-weight: bold;
color: #FFF;
text-align: center;
-webkit-border-top-left-radius: 8px;
-webkit-border-top-right-radius: 8px;
-moz-border-top-left-radius: 8px;
-moz-border-top-right-radius: 8px;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
background: rgb(169,3,41); /* Old browsers */
background: -moz-linear-gradient(top, rgb(169,3,41) 0%, rgb(109,0,25) 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(top, rgb(169,3,41) 0%,rgb(109,0,25) 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(to bottom, rgb(169,3,41) 0%,rgb(109,0,25) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a90329', endColorstr='#6d0019',GradientType=0 ); /* IE6-9 */
}
.toggle:before {
display: block;
content: "";
position: absolute;
top: 40%;
right: 15px;
width: 10px;
height: 10px;
margin: -5px 0 0;
border-top: 1px solid #FFF;
border-right: 1px solid #FFF;
-webkit-transform: rotate(135deg);
-moz-transform: rotate(135deg);
transform: rotate(135deg);
}
a.more {
display: block;
padding: 5px;
text-decoration: none;
color: #FFF;
text-align: center;
-webkit-border-bottom-left-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
-moz-border-bottom-left-radius: 8px;
-moz-border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
background: #BE9999;
}
.d_none {
display: none;
}
</style>
</head>
<body>
<h1>
CSSで作ったトグルボタンで開閉して状態を保持する
</h1>
<h2 id="toggle" class="toggle">
お知らせ
</h2>
<ul id="info_display">
<li><a href="#">お知らせ1</a></li>
<li><a href="#">お知らせ2</a></li>
<li><a href="#">お知らせ3</a></li>
</ul>
<p>
<a href="#" class="more">
もっと見る
</a>
</p>
</body>
</html>
まとめ
- ソースはjs、html、cssの3つ。
- 「#toggle」要素をクリックしたときにクッキーがセットされ、状態が保持される。
- 要素を隠す状態を保持するために「d_none」のクラスで非表示を行っている。
- 「toggle(‘fast’)」で開閉する速度を決定している。「fast」で速く、「slow」で遅くなる。
- jqueryは「jquery-1.11.3.min.js」と「jquery.cookie.js」を使用。
。ボタンの表示に関してはCSS3で表現しているので、比較的新しいブラウザに限定されます。
トグルの動きやクッキーによる動作の保持は、汎用性が高いのでとても便利だと思います。


コメント