CSSとHTMLだけでアコーディオンを実装してみた

Q&A的なクリックするとコンテンツが開くアコーディオンメニューです。

アコーディオンはLuxeritasブロックにもありますがひとつひとつのブロックで表示するのではなく繋げて表示するタイプを実装してみたかったので

jQueryとか使わずにCSSとHTMLだけで出来るもの、探してみたらありました。

Accordion with CSS3 (オープンソースはデフォルトのみです)

公開されているコードをコピペするだけなのですが、クラシックエディタを使用しないと反映されませんでした。

かつ、これもまたビジュアルエディタに切り替えると段落タグ(<p></p>)が勝手に入ってしまうのでコンテンツ部分は「HTMLとして編集」で入れていくしかないようです。改行は(<br/>)を手入力。

3匹を預かった人のちょっとした手違いで犬たちは飼い主のいる家に帰ろうとします。
若いリーダー犬(雄のラブラドールレトリーバー)怠け者の老犬(雄のブルテリア)ブルーアイの雌のシャムネコ三匹の冒険の旅が始まりました。
(ここからautoが効いているかの長文テスト)3匹を預かった人のちょっとした手違いで犬たちは飼い主のいる家に帰ろうとします。
若いリーダー犬(雄のラブラドールレトリーバー)怠け者の老犬(雄のブルテリア)ブルーアイの雌のシャムネコ三匹の冒険の旅が始まりました。

少年と犬とのふれ合いを描いたディズニー作品、辛い現実と向き合い成長していく少年の物語。

南極に置き去りにされた犬たち、1年後再び観測隊が訪れた時奇跡的にタロとジロの兄弟犬が生き延びていた。
漆黒の闇と酷寒の地、犬たちだけでどうやって暮らし、タロとジロはどうやって生き延びたのか…

山中に放置された自動車から発見された中年男性と犬の遺体。男性の遺体が死後半年を経過しているのに、犬は1か月足らず……そんなシーンから物語は始まります。…

例えば、本や映画の説明文やおすすめポイントとか、いろいろ活用できそうです。

タイトルバー部分のグラデーションが効かずいろいろ試してみましたが
背景色を単色にしても白色のままで色が反映されませんでした。
ホバー時の色変更は問題なかったので、そっちを変更しました。

コードと手順をメモしときます。

HTMLコードを記事に入れる

クラシックエディタを使用して記事の表示したい部分に以下のコードを入れる。

<section class="ac-container">
	<div>
		<input id="ac-1" name="accordion-1" type="checkbox" />
		<label for="ac-1">About us</label>
		<article class="ac-small">
			<p>Some content... </p>
		</article>
	</div>
	<div>
		<input id="ac-2" name="accordion-1" type="checkbox" checked />
		<label for="ac-2">How we work</label>
		<article class="ac-medium">
			<p>Some content... </p>
		</article>
	</div>
	<div><!--...--></div>
</section>

(id="ac-1)の部分はコンテンツを追加する時に数字を追加していきます。

(checkbox)の後ろにある(checked)はデフォルトでその部分のコンテンツが開いた状態で表示されるので全部閉じておきたい場合は削除します。

テーマファイルエディタでCSSコードを追記

以下のコードをコピペするか、サイズや色を適宜編集してCSSに追記します。

.ac-container{
	width: 400px;
	margin: 10px auto 30px auto;
}

.ac-container label{
	font-family: 'BebasNeueRegular', 'Arial Narrow', Arial, sans-serif;
	padding: 5px 20px;
	position: relative;
	z-index: 20;
	display: block;
	height: 30px;
	cursor: pointer;
	color: #777;
	text-shadow: 1px 1px 1px rgba(255,255,255,0.8);
	line-height: 33px;
	font-size: 19px;
	background: linear-gradient(top, #ffffff 1%,#eaeaea 100%); 
	box-shadow: 
		0px 0px 0px 1px rgba(155,155,155,0.3), 
		1px 0px 0px 0px rgba(255,255,255,0.9) inset, 
		0px 2px 2px rgba(0,0,0,0.1);
}

.ac-container label:hover{
	background: #fff;
}

.ac-container input:checked + label,
.ac-container input:checked + label:hover{
	background: #c6e1ec;
	color: #3d7489;
	text-shadow: 0px 1px 1px rgba(255,255,255, 0.6);
	box-shadow: 
		0px 0px 0px 1px rgba(155,155,155,0.3), 
		0px 2px 2px rgba(0,0,0,0.1);
}

.ac-container label:hover:after,
.ac-container input:checked + label:hover:after{
	content: '';
	position: absolute;
	width: 24px;
	height: 24px;
	right: 13px;
	top: 7px;
	background: transparent url(../images/arrow_down.png) no-repeat center center;	
}

.ac-container input:checked + label:hover:after{
	background-image: url(../images/arrow_up.png);
}

.ac-container input{
	display: none;
}

.ac-container article{
	background: rgba(255, 255, 255, 0.5);
	margin-top: -1px;
	overflow: hidden;
	height: 0px;
	position: relative;
	z-index: 10;
	transition: 
		height 0.3s ease-in-out, 
		box-shadow 0.6s linear;
}
.ac-container input:checked ~ article{
	transition: 
		height 0.5s ease-in-out, 
		box-shadow 0.1s linear;
	box-shadow: 0px 0px 0px 1px rgba(155,155,155,0.3);
}
.ac-container article p{
	font-style: italic;
	color: #777;
	line-height: 23px;
	font-size: 14px; 
	padding: 20px;
	text-shadow: 1px 1px 1px rgba(255,255,255,0.8);
}
.ac-container input:checked ~ article.ac-small{
	height: 140px;
}
.ac-container input:checked ~ article.ac-medium{
	height: 180px;
}
.ac-container input:checked ~ article.ac-large{
	height: 230px;
}

CSSの変更箇所のメモ

  • line2→ width : 変更するか、横幅いっぱいに表示したい場合は削除。
  • line18→ グラデーションが効かずフーバー時も背景が白色のままで、いろいろ試した結果解決には至らなかったので、逆にline26の色を変更しました。
  • line47→下向きの矢印画像のURLを記入
  • line51→上向きの矢印画像のURLを記入
  • line79→フォントサイズを変更
  • line80→コンテンツ上部の余白を変更
  • 文字数に応じて高さが変わるように、最下部に以下のコードを追加
.ac-container input:checked ~ article.ac-auto{
    height: auto;
}

グラデーションが効かない原因で、参考にさせていただいたのは「にししふぁくとりー」さんの
「CSS3のlinear-gradientでベンダープレフィックスを外すとグラデーションが消える場合の記述ミス」

この記事自体2015年で古いのですが、その他のサイトを見ても新しい記述法は載っていませんでした。

ベンダープレフィックスを指定すると、他のブラウザで表示されないのでは?という疑問もあります。

「開発者向けのコミュニティーサイト」こちらも参考にしました。

グラデーションが効かない理由は不明のままですが、アコーディオンメニューは無事表示されました。
ブラウザーが原因かもしれませんが検証していません。

また何度も修正してプレビューしたからリビジョン驚異的に増えたぞ!!
下書きして十分に練ってから記事にしたらどうじゃ?

そんなこと言われなくてもやってます!!
でもプレビューしなきゃわからないんだもの仕方無いでしょ
理由があってのことだろけど、この余計な機能こそどうにかならないのかしら
php弄るほどのスキルも度胸も無いんだから。

うんうん、よく頑張った!報われんかったけどな

Wordpress

Posted by yukko