質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

6回答

5312閲覧

cssだけで開いたり閉じたりするアコーディオンを作る方法

aba623ky

総合スコア63

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2016/10/02 11:31

編集2016/10/03 06:45

javascriptなしにcssだけでアコーディオンを作りたいです。
ドロップダウンメニューで作る事は可能ですが、このコードを元にアコーディオンを作成するにはどうしたらいいですか?
説明不足ですみません。

ラジオボタンを実装しましたが、下のようになりました。
ラジオボタンで表示非表示にしたかったのですが、そうなりませんでした。

イメージ説明

全体のコードを提示します。

html

1echo '<table border="1">'; 2echo '<tbody>'; 3 echo '<tr>'; 4 echo '<td class="nav">'; 5 echo '<input type="radio" name="ch" id="ch0" class="menu" checked>'; 6 echo '<input type="radio" name="ch" id="ch1" class="menu">'; 7 echo '<table border="1">'; 8 echo '<thead>'; 9 echo '<tr>'; 10 echo '<td>'; 11 echo '<label for="ch2" class="show">'; 12 echo 'menu2'; 13 echo '</label>'; 14 echo '<label for="ch0" class="hide">'; 15 echo 'menu2'; 16 echo '</label>'; 17 echo '</td>'; 18 echo '</tr>'; 19 echo '</thead>'; 20 echo '<tbody>'; 21 echo '<tr>'; 22 echo '<td>'; 23 echo $r->access; 24 echo '</td>'; 25 echo '</tr>'; 26 echo '<tr>'; 27 echo '<td>'; 28 echo $r->non_smoking; 29 echo '</td>'; 30 echo '</tr>'; 31 echo '</tbody>'; 32 echo '</table>'; 33 echo '</td>'; 34 echo '</tr>'; 35 echo '</tbody>'; 36 echo '</table>'; 37

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toutou

2016/10/02 11:56

アコーディオン cssで検索し一通りやってみてください。それを応用してコードを書き直してください。それでもわからなかったら、具体的にどこの部分がわからなかったを聞かないと、答える側もつらいと思います。
date

2016/10/03 04:51

javascriptを使わずにという理由は説明した方がいいですよ。
yambejp

2016/10/03 07:56

正直HTMLの質問に毎回むだなPHPを混ぜ込むのはやめてほしい、PHPに組み込むのはいつでもできるんだからHTMLの質問はHTMLとして書いてください
aba623ky

2016/10/03 07:59

すみません。 ちょっと応用したhtmlが使いたかったもので
guest

回答6

0

他の質問も確認しておもったのですが、ちゃんと回答者の意見を聞き入れて自分で改善してみてますでしょうか?
回答のやり取りを見てると自分が理解できないことは全部スルーしてわかることだけでものを作ろうとしている感じを受けます。
何かシステムを作ろうとしていることは感じとれるのですが、その全てをここで聞いて作ろうとしてませんか?
javascriptがわからないからCSSだけでやろうとしている感じがしてならないのですが、どうなんでしょうか?
たぶん実現したいことは世の中にいろんなサンプルがあるし、bootstrapのようなフレームワークを利用すれば簡単に実現できたりもしますし、何より回答者の方がきちんと回答してくれています。
先の回答にも書きましたが、まずはきちんとHTML、CSS、PHP、javascriptの勉強をしてください。
少なくとも回答者の言っていることを理解できないようでは、いくら質問しても意味がないですよ。

投稿2016/10/03 04:02

masayoshi0222

総合スコア162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いくつかの条件を受け入れられるのであれば、CSSでのclickへの対応は一応、不可能ではありません。

「一応」というのは、その条件が制約としてそこそこ厳しいものだからで、現実的あるいは実用的かと言われると、あまり自信はありません。

なお、これは方法論のみを示すものであり、提示されたソースについては一切考慮していません。

PHP(かな?)のソースだけ貼られても仕方がありませんし、構造から大きく変える必要があるため、提示されたソースに合わせて書くことができないからです。

条件

  • :checked擬似クラスを使うため、ラジオボタンまたはチェックボックスを使用すること
  • 隣接セレクタを使うため、input要素と開閉する要素(あるいはその祖先要素)が同階層にあること

(input要素は空要素なので、子孫に開閉する要素を置くことができません。)

  • height: auto;ではtransitionが効かないため、heightをあらかじめ計算しておくこと

(transitionをmax-heightでやるという技はありますが、結局調整が要るため、手間はそんなに変わらないと思います。)

  • (ラジオボタンの場合)JavaScript無しにチェックを解除できないはずなので、現在開いている項目を再度クリックして閉じる、という操作ができないこと

具体例

CSS

1[name=accordion] { 2 display: none; 3} 4 5[name=accordion] + label { 6 display: block; 7 cursor: pointer; 8 width: 100px; 9 height: 50px; 10 line-height: 50px; 11 text-align: center; 12 background-color: #ccf; 13} 14 15[name=accordion]:checked + label { 16 background-color: #cfc; 17} 18 19[name=accordion] + label + ol { 20 overflow: hidden; 21 margin: 0; 22 padding: 0; 23 height: 0; 24 list-style-type: none; 25 transition: 1s ease; 26} 27 28[name=accordion] + label + ol li { 29 margin: 0; 30 padding: 0; 31 width: 100px; 32 height: 50px; 33 background-color: #fcc; 34} 35 36[name=accordion] + label + ol li a { 37 display: block; 38 width: 100px; 39 height: 50px; 40 line-height: 50px; 41 text-align: center; 42} 43 44#ac_menu1:checked + label + ol { height: 150px; } 45#ac_menu2:checked + label + ol { height: 200px; } 46#ac_menu3:checked + label + ol { height: 150px; }

HTML

1<input type="radio" name="accordion" id="ac_menu1"> 2<label for="ac_menu1">menu1</label> 3 4<ol class="ac_menu1"> 5 <li><a href="#">menu1</a></li> 6 <li><a href="#">menu1</a></li> 7 <li><a href="#">menu1</a></li> 8</ol> 9 10<input type="radio" name="accordion" id="ac_menu2"> 11<label for="ac_menu2">menu2</label> 12 13<ol> 14 <li><a href="#">menu2</a></li> 15 <li><a href="#">menu2</a></li> 16 <li><a href="#">menu2</a></li> 17 <li><a href="#">menu2</a></li> 18</ol> 19 20<input type="radio" name="accordion" id="ac_menu3"> 21<label for="ac_menu3">menu3</label> 22 23<ol> 24 <li><a href="#">menu3</a></li> 25 <li><a href="#">menu3</a></li> 26 <li><a href="#">menu3</a></li> 27</ol>

動作サンプル

https://jsfiddle.net/sii_side/kk8kteuf/

投稿2016/10/02 15:28

sii_side

総合スコア849

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aba623ky

2016/10/03 06:45

質問文を編集しました。 今やったことを提示します。
guest

0

クリックで動作するという条件がある以上、
CSSだけでは作成不可能です。

https://teratail.com/questions/50001
ただし、代替方法については 先の質問に対して aKusano さんが回答してくれているのですから、回答を理解する努力をしてください。

投稿2016/10/02 11:33

編集2016/10/02 11:45
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

チェックボックスをおかないとできないですね
何度か例示しませんでしたっけ?

修正

※ラジオボタン版に修正

css

1input.menu{display:none;} 2.nav input[type="radio"].menu + table tbody{display:none;} 3.nav input[type="radio"].menu:checked + table tbody{display:table-row-group;} 4.nav input[type="radio"].menu + table label.hide{display:none;} 5.nav input[type="radio"].menu + table label.show{display:inline;} 6.nav input[type="radio"].menu:checked + table label.hide{display:inline;} 7.nav input[type="radio"].menu:checked + table label.show{display:none;}

HTML

1<table border> 2<tbody> 3<tr> 4<td class="nav"> 5<input type="radio" name="ch" id="ch0" class="menu" checked> 6<input type="radio" name="ch" id="ch1" class="menu"> 7<table border> 8<thead> 9<tr> 10<td><label for="ch1" class="show">menu1</label><label for="ch0" class="hide">menu1</label></td> 11</tr> 12</thead> 13<tbody> 14<tr><td>data1</td></tr> 15<tr><td>data2</td></tr> 16<tr><td>data3</td></tr> 17</tbody> 18</table> 19</td> 20</tr> 21<tr> 22<td class="nav"> 23<input type="radio" name="ch" id="ch2" class="menu"> 24<table border> 25<thead> 26<tr> 27<td><label for="ch2" class="show">menu2</label><label for="ch0" class="hide">menu2</label></td> 28</tr> 29</thead> 30<tbody> 31<tr><td>data1</td></tr> 32<tr><td>data2</td></tr> 33<tr><td>data3</td></tr> 34</tbody> 35</table> 36</td> 37</tr> 38<tr> 39<td class="nav"> 40<input type="radio" name="ch" id="ch3" class="menu"> 41<table border> 42<thead> 43<tr> 44<td><label for="ch3" class="show">menu3</label><label for="ch0" class="hide">menu3</label></td> 45</tr> 46</thead> 47<tbody> 48<tr><td>data1</td></tr> 49<tr><td>data2</td></tr> 50<tr><td>data3</td></tr> 51</tbody> 52</table> 53</td> 54</tr> 55</tbody> 56</table>

投稿2016/10/02 14:31

編集2016/10/03 04:34
yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aba623ky

2016/10/02 14:37

例示しましたが、アコーディオンについては表示していません。ドロップダウンメニューは今まで表示してくれました。
yambejp

2016/10/03 00:26

accessをおしたらそれ以下のデータがついたり消えたりすればよいのでしょうか? 追記確認してください
aba623ky

2016/10/03 02:14

非表示表示が出来るアコーディオンが作りたいんです。
yambejp

2016/10/03 02:40

theadにメニューを置いて、tbodyを消してみました。 こういうことですか?
toutou

2016/10/03 04:15

そのあなたが乗っけたURLにコードが載ってる。ほかの方が丁寧に解説してくれてる。ほかに何が必要なんですか?自分の作ったコードにそれを組み込んで作ってくれとでも言うんですか?ならお門違いです。あなたの求めるものがわかりません。
yambejp

2016/10/03 04:36

・メニューを押すとひらく ・メニューを押すと閉じる ・メニューが開いているときに別のメニューを押すと、前のメニューが閉じてあたらしいメニューが開く という仕様でよいですか? 修正版を上げておきました。ラジオボタンでやると良いです
aba623ky

2016/10/03 04:37

ありがとうございます。 yambejpさん、いつもすみません。
aba623ky

2016/10/03 06:44

質問文を編集しました。 今やったことを提示します。
yambejp

2016/10/03 07:51

まずテーブルの直前のラジオボタンのidがch1 <input type="radio" name="ch" id="ch1" class="menu"> なのに <label for="ch2" class="show">menu2</label> となっていてはch1はチェックできません。 ラジオボタンのidとラベルのforを合わせてください それとスタイルシートはどうしました?ちゃんとCSSを <style>で渡すか外部ファイルで設定してありますか?
aba623ky

2016/10/03 07:56

styleはちゃんと渡しました。 labelをまた確認してみます。
aba623ky

2016/10/03 07:58

<label for="ch1" class="show">menu2</label> が正解ですね。
yambejp

2016/10/03 08:07

あらたに例示いただいた画像ではラジオボタンが丸見えですが チェック用にあえて見せているという認識でよいですね? cssを適用すれば消えているはずなので・・・
yambejp

2016/10/03 08:08

ちなみに、わかっているとは思いますが、メニューを複数列記しないと 他のメニューが隠れたりする部分はチェックできないですので留意ください
aba623ky

2016/10/03 09:37

いいえ、コードを入れたら画像のように表示されました。
yambejp

2016/10/03 09:47

ではスタイルシートが正しく設定されていないですね PHPでソースを書いているのでどこかで凡ミスしているんじゃないでしょうか? スタイルシートに関する知識がないようであれば、単純に CSSで提示した私のソースを <style>~</style>で挟んでください <style> input.menu{display:none;} .nav input[type="radio"].menu + table tbody{display:none;} .nav input[type="radio"].menu:checked + table tbody{display:table-row-group;} .nav input[type="radio"].menu + table label.hide{display:none;} .nav input[type="radio"].menu + table label.show{display:inline;} .nav input[type="radio"].menu:checked + table label.hide{display:inline;} .nav input[type="radio"].menu:checked + table label.show{display:none;} </style>
aba623ky

2016/10/03 12:50

ありがとうございます。 あした試して見ます。
guest

0

マウスオーバーを利用したいんですかね
以下の様なものを見つけました
All CSS hover activated accordion with default state
※下の方にデモもあります

投稿2016/10/02 11:56

編集2016/10/02 11:59
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aba623ky

2016/10/03 06:45

質問文を編集しました。 今やったことを提示します。
guest

0

結果
こういうのを作りたいんでしょうか?

投稿2016/10/02 15:13

toutou

総合スコア2050

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aba623ky

2016/10/02 22:41

はい、おっしゃる通りです。
toutou

2016/10/02 23:29

だったら前の質問のCSSだけでメニューが開いたり閉じたりするアコーディオンを作るを見てください。そこに答えが書いてあります。お望みのものが作れますよ。
aba623ky

2016/10/03 06:45

質問文を編集しました。 今やったことを提示します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問