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

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

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

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

CSS

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

Q&A

解決済

1回答

500閲覧

横並びにした画像の中のボタンを押すと、テキストが表示されるようにしたい

mupo

総合スコア37

HTML

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

CSS

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

0グッド

0クリップ

投稿2019/03/15 10:34

前提・実現したいこと

横並びにした画像の中のボタンを押すと、テキストが表示されるようにしたいです。
テキストの位置は、横並びの要素の外(下側の中央)に表示したいと思っています。

なかなかうまくいかないので教えていただけないでしょうか。

発生している問題・エラーメッセージ

・画像の中のボタンを押すと、ボタン位置が上にずれてしまう。
・テキストが表示される位置が、要素外ではなく要素内(右側の画像の中)に偏ってしまう。

該当のソースコード

HTML

1<div class="box-wrap"> 2<div>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</div> 3<div><img src="http://placehold.jp/500x600.png"> 4<!-- クリック時のみ表示する領域 --> 5<div class="hidden_box"> 6 <input type="checkbox" id="label1" /> 7 <label for="label1"></label> 8 <div class="hidden_show"> 9<!--非表示要素ここから--> 10<p>テスト文章ですテスト文章ですテスト文章ですテスト文章ですテスト文章です</p> 11</div> 12<!--ここまで--> 13</div></div> 14<!-- / .box-wrap --></div> 15</div>

css

1.box-wrap { 2 position:relative; 3 max-width:1500px; 4 width: 100%; 5 text-align:center; 6} 7.box-wrap div { 8 display:inline-block; 9 width: 30%; 10 margin: 0; 11 padding:0; 12 text-align:left; 13} 14 15/* */ 16 17.hidden_box { 18 position:absolute; 19 right: 40px; 20 bottom: 30px; 21 cursor :pointer; 22} 23 24.hidden_box label { 25 width: 154px; 26 height: 29px; 27 background:url("http://placehold.jp/24/cc9999/993333/154x29.png") no-repeat center top; 28 display: block; 29} 30 31/*ボタンを切り替え*/ 32.hidden_box input:checked ~ label { 33 width: 154px; 34 height: 29px; 35 background:url("http://placehold.jp/24/000000/993333/154x29.png") no-repeat center top; 36 display: block; 37} 38 39/*チェックは見えなくする*/ 40.hidden_box input { 41 display: none; 42} 43 44/*中身を非表示にしておく*/ 45.hidden_box .hidden_show { 46 height: 0; 47 padding: 0; 48 overflow: hidden; 49 opacity: 0; 50 transition: 0.8s; 51} 52 53/*クリックで中身表示*/ 54.hidden_box input:checked ~ .hidden_show { 55 padding: 10px 0; 56 height: auto; 57 opacity: 1; 58}

試したこと

<label for="label1"></label>だけを右側の要素内に入れて、それ以外の非表示領域の設定はdisplay:inline-blockの外に出す。
非表示要素はちゃんと下に表示されるようになったが、.hidden_boxから無理矢理抜き出したためか、labelの切り替え設定が反映されなくなってしまった。

補足事項

要素の表示/非表示については、以下のサイトを参考にさせていただいています。
https://saruwakakun.com/html-css/reference/hidden-show#section3

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

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

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

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

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

guest

回答1

0

ベストアンサー

box-wrap の外に出すのが手っ取り早そうですね。

html

1<div class="box-wrap"> 2<div>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</div> 3<div><img src="http://placehold.jp/500x600.png"> 4<!-- クリック時のみ表示する領域 --> 5<div class="hidden_box"> 6 <label for="label1"></label> 7</div></div> 8<!-- / .box-wrap --></div> 9 10<!-- なんか </div> がひとつ余ってたので消しました。 --> 11 12<div class="hidden_box"> 13 <input type="checkbox" id="label1" /> 14 <div class="hidden_show"> 15<!--非表示要素ここから--> 16<p>テスト文章ですテスト文章ですテスト文章ですテスト文章ですテスト文章です</p> 17</div> 18<!--ここまで--> 19

このやり方だと、hidden_box に当ててるスタイルが効いてしまうので、CSSも少しいじる必要があります。

css

1.box-wrap .hidden_box { /* ←ここ */ 2 position:absolute; 3 right: 40px; 4 bottom: 30px; 5 cursor :pointer; 6}
コメントを受けて追記

html

1<input type="checkbox" id="label1" /> 2<div class="box-wrap"> 3<div>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</div> 4<div><img src="http://placehold.jp/500x600.png"> 5<!-- クリック時のみ表示する領域 --> 6<div class="hidden_box"> 7 <label for="label1"></label> 8</div></div> 9<!-- / .box-wrap --></div> 10 11<!-- なんか </div> がひとつ余ってたので消しました。 --> 12 13 <div class="hidden_show"> 14<!--非表示要素ここから--> 15<p>テスト文章ですテスト文章ですテスト文章ですテスト文章ですテスト文章です</p> 16</div> 17<!--ここまで-->

css

1.box-wrap { 2 position:relative; 3 max-width:1500px; 4 width: 100%; 5 text-align:center; 6} 7.box-wrap div { 8 display:inline-block; 9 width: 30%; 10 margin: 0; 11 padding:0; 12 text-align:left; 13} 14 15/* */ 16 17.hidden_box { 18 position:absolute; 19 right: 40px; 20 bottom: 30px; 21 cursor :pointer; 22} 23 24.hidden_box label { 25 width: 154px; 26 height: 29px; 27 background:url("http://placehold.jp/24/cc9999/993333/154x29.png") no-repeat center top; 28 display: block; 29} 30 31/*ボタンを切り替え*/ 32input:checked#label1 ~ .box-wrap label { 33 width: 154px; 34 height: 29px; 35 background:url("http://placehold.jp/24/000000/993333/154x29.png") no-repeat center top; 36 display: block; 37} 38 39/*チェックは見えなくする*/ 40input#label1 { 41 display: none; 42} 43 44/*中身を非表示にしておく*/ 45.hidden_show { 46 height: 0; 47 padding: 0; 48 overflow: hidden; 49 opacity: 0; 50 transition: 0.8s; 51} 52 53/*クリックで中身表示*/ 54input:checked#label1 ~ .hidden_show { 55 padding: 10px 0; 56 height: auto; 57 opacity: 1; 58}

投稿2019/03/16 01:14

編集2019/03/16 05:16
Lhankor_Mhy

総合スコア36104

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

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

mupo

2019/03/16 05:02

教えていただいてありがとうございます! 上の通りにやってみたら表示位置は大丈夫になったのですが、 「.hidden_box label 」と「.hidden_box input:checked ~ label」で指定している 画像の切り替えが無効になってしまいまして、正常に表示する方法はありますか…? (「.hidden_box label 」ではなく「.box-wrap .hidden_box label」にしたりしてみたのですが、効きませんでした) 教えていただけると嬉しいです。
Lhankor_Mhy

2019/03/16 05:12

なるほど。では、input を box-wrap の手前に置くのはどうでしょうか?
mupo

2019/03/16 05:22

上手くいきました! こういう風にすればいいんですね、理解できてとてもスッキリしました。 このたびはご教授ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問