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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

692閲覧

ドロップダウンメニューを作成する際に中身のテキストが動かないようにしたい

Akira_papa

総合スコア3

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/10/28 09:34

編集2020/10/28 13:21

上から下に徐々に開いていくQ&Aの部分を作成したいと思っています。JavaScriptでクラスの付け外しをしてCSSでアニメーションさせたいと思っています。
JavaScriptは問題なく動作しています。ドロップダウンするアニメーション自体も出来ています。現状の問題点は以下の点です。
・開閉した際に、パディングもアニメーションしてしまい、テキストの位置が左右でアニメーションしてしまう。
テキストが徐々に改行されていくような状況です。今はスマホ用のページを作っている(最終的にはレスポンシブ対応にしたい)ので、画面幅が狭く、特に目立ちます。

こちらを解消しようと、パディングをアニメーションしないようにすると、閉じるときにパディングが一気に消えておかしい。
最初からパディングをつけておくと、2つの質問事項の間に余計な余白ができてしまう。
見た目の調整でパディングはつけておきたいですが、パディング以外の方法で代用できるならそれでも構いません。

なにか良い解決方法がありましたらご教授いただけると幸いです。
よろしくお願いいたします。

HTMLはこちら

<div class="question__ttl">明日の天気は晴れか?</div> <div class="question__answer"> <p question__txt>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. </p> </div> <div class="question__ttl">明日は木曜日か?</div> <div class="question__answer"> <p question__txt>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. </p> </div>

CSSはこちら

.question__ttl { display:inline-block; background-color:yellow; margin-bottom:30px; cursor:pointer; } .question__answer { height: 0; padding:0; overflow:hidden; opacity:0; transition:0.5s; visibility:hidden; /* padding: 10px 20px 20px; */ /* ここにパディングをつけると上下に余計な余白がつく */ } .question__answer.is-open { height:154px; padding: 10px 20px 20px; opacity:1; visibility:visible; }

JavaScriptはこちら

document.addEventListener("DOMContentLoaded",() => { const title = document.querySelectorAll('.question__ttl'); for(let i = 0 ;i < title.length;i++) { let titleEach = title[i] ; let content = titleEach.nextElementSibling; titleEach.addEventListener('click',() => { content.classList.toggle('is-open'); }); } });

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

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

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

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

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

Jon_do

2020/10/28 09:46

.question__answer.is-open と .question__answer どちらにも paddingを付けないというのではダメなのでしょうか? ダメなら追記した方が良いかと思います。
Akira_papa

2020/10/28 10:05

ご指摘ありがとうございます。追記しました。できればpaddingはつけておきたいと思っています。
guest

回答1

0

ベストアンサー

white-space: nowrap; とすることでブラウザの強制改行をさせないようにする
その後に改行したい位置に<br>タグを挿入

もしくはwidthを決めてその中に収まるようにする。

スマホ用のサイトとのことなので恐らく、レスポンシブ対応させたいのだろうと予測。
そこはメディアクエリで細かく調整する

html

1 <div class="question__ttl">明日の天気は晴れか?</div> 2 <div class="question__answer"> 3 <p class="question__txt">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum 4 has been 5 the 6 industry's standard dummy text ever since the 1500s, when an<br> unknown printer took a galley of type and 7 scrambled 8 it to make a type specimen book. </p> 9 </div> 10 <div class="question__ttl">明日は木曜日か?</div> 11 <div class="question__answer"> 12 <p class="question__txt">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum 13 has been 14 the 15 industry's standard dummy text ever since the 1500s, when an<br> unknown printer took a galley of type and 16 scrambled 17 it to make a type specimen book. </p> 18 </div>

css

1 .question__ttl { 2 display: inline-block; 3 background-color: yellow; 4 margin-bottom: 30px; 5 cursor: pointer; 6 } 7 8 .question__answer { 9 height: 0; 10 padding: 0; 11 overflow: hidden; 12 opacity: 0; 13 transition: 0.5s; 14 visibility: hidden; 15 white-space: nowrap; 16 } 17 18 .question__answer.is-open { 19 height: 154px; 20 opacity: 1; 21 visibility: visible; 22 } 23 24 .question__txt { 25 padding: 10px 20px 20px; 26 }

投稿2020/10/28 10:58

編集2020/10/28 17:31
Jon_do

総合スコア1373

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

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

Akira_papa

2020/10/28 13:19

ご回答ありがとうございます。 ご指摘の方法を試してみました。たしかに改行はされていないですが、テキストの上下左右がpaddingがついている分だけ移動する形になります。閉じている状態の時にpaddingをつけると余計な隙間が開くため好ましくありません。 メニューを開くと最初からテキストがそこにあったような状態(テキストが動かない状態)が理想の状態です。 これを達成しようとした場合はパディングは使わずに何か他の方法を採るべきなのでしょうか?またJavaScriptにこだわらず、jQueryを使ったほうが簡単にできるものでしょうか?
Jon_do

2020/10/28 17:33

回答のコードを編集しました。 こういうことでしょうか?
Jon_do

2020/10/28 17:56

> JavaScriptにこだわらず、jQueryを使ったほうが簡単にできるものでしょうか? 時と場合と目的によります。
Akira_papa

2020/10/28 22:08

教えて頂いた方法で解決できました。ありがとうございます! div要素にパディングをつけるのではなく、p要素の方につけてあげれば良かったんですね。div要素をどうすればいいかばかりに目が行き、その子要素のことを考えていませんでした。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問