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

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回答

1548閲覧

slideToggleとpaddingについて

yuta_bsn

総合スコア7

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/07/05 02:02

下のようなコードでは.flow-itemBottomの動きが自分の思った通りに動きません。
このコードでは、slideToggleで.flow-itemBottom内のテキストが少しだけ下にスライドしてでてきてしまいます。テキストを動かずにスライドして表示するには今のところpadding-topをなくすしかありません。本来はpadding-topをあてて余白を入れたいところなのですが、何か良い方法はありませんか?
.flow-itemBottomのpaddingのtopが原因だと思います。

html

1 <!-- flow --> 2 <section class="flow"> 3 <div class="flow-inner"> 4 <h2 class="flow-ttl"><i class="fas fa-laptop"></i>受講の流れ</h2> 5 <div class="flow-box"> 6 <ul class="flow-list"> 7 <li class="flow-item"> 8 <div class="flow-itemTop"> 9 <img src="assets/img/skypeconsulting.png" alt=""> 10 <h3 class="flow-itemTtl">Skypeで事前コンサル</h3> 11 </div> 12 <div class="flow-itemBottom"> 13 <p class="flow-itemBold">現在のスキルの状況、パソコンの環境説明、渡航での注意点を話します。</p> 14 <p class="flow-itemBold">簡単なテストあり</p> 15 <p class="flow-itemTxt"> 16 iSaraでは受講料を稼げることを保障しています。従って、事前コンサル時点で簡単なテストを実施し、場合によってはお断りをしております。 17 (テストの内容はPCの基礎知識に関するテストですので、普段からパソコンを利用する方でしたら問題ありません。テストはもちろん無料ですので、まずはお問い合わせください。) 18 </p> 19 </div> 20 </li> 21 <li class="flow-item"> 22 <div class="flow-itemTop"> 23 <img src="assets/img/preworks.png" alt=""> 24 <h3 class="flow-itemTtl">事前課題の提出</h3> 25 </div> 26 <div class="flow-itemBottom"> 27 <p class="flow-itemBold">出発前の1ヶ月前に事前課題を送ります。</p> 28 <p class="flow-itemTxt">0から始めるプログラミング事前学習講座、環境構築の事前学習、jQueryの事前学習講座、Bootstrapの事前学習講座、PHP 29 / Mysqlの事前講座</p> 30 <p class="flow-itemBold">課題は多いですが、ここで努力が必須です。プログラミングは高付加価値なスキルです。そのためには学習が必須です。 31 回数無制限のチャットサポート付きですので、最初は努力してください。<br> 32 また、参加者グループコミュニティも作成するので、横の繋がりでモチベーションを高めることもできます。</p> 33 </div> 34 </li> 35 <li class="flow-item"> 36 <div class="flow-itemTop"> 37 <img src="assets/img/flight.png" alt=""> 38 <h3 class="flow-itemTtl">現地に渡航</h3> 39 </div> 40 <div class="flow-itemBottom"> 41 <p class="flow-itemBold">到着日には空港でお出迎えし、初日のオリエンテーションを行います。 42 滞在先は空港からすぐの出来たてシェアハウス。美味しいタイ料理などもご紹介します。</p> 43 <p class="flow-itemBold">iSaraは『ノマド』フリーランス養成講座です。 44 楽しいノマド体験ができるよう、バンコクでの生活はこちらでサポートします。 45 </p> 46 </div> 47 </li> 48 <li class="flow-item"> 49 <div class="flow-itemTop"> 50 <img src="assets/img/personwithlight.png" alt=""> 51 <h3 class="flow-itemTtl">実案件を通して学ぶ</h3> 52 </div> 53 <div class="flow-itemBottom"> 54 <p class="flow-itemBold">現役フリーランスが抱える案件に加え、クラウドソーシングを使って実案件をこなします。</p> 55 <p class="flow-itemBold">案件獲得のためのメールの書き方や見積りの仕方など、 56 他のプログラミングスクールでは教えてくれない実務スキルを学ぶことができます。</p> 57 <p class="flow-itemTxt">*現役フリーランスがサポートします。</p> 58 </div> 59 </li> 60 <li class="flow-item"> 61 <div class="flow-itemTop"> 62 <img src="assets/img/jobsupport.png" alt=""> 63 <h3 class="flow-itemTtl">帰国後の仕事獲得サポート付き</h3> 64 </div> 65 <div class="flow-itemBottom"> 66 <p class="flow-itemBold">経験年数の少ないフリーランスが高単価で継続的に仕事受注するコツ、それがチームを組むことです。</p> 67 <p class="flow-itemBold">iSaraではフリーランスコミュニティを形成し、帰国後のエンジニアでも継続的に稼げる仕組みを提供します。 68 もちろん、個人で十分に稼げるようになった場合はいつでも脱退できますし、制限などは何もありません。</p> 69 </div> 70 </li> 71 </ul> 72 </div> 73 </div> 74 </section> 75

scss

1// flow 2.flow-inner { 3 padding: 0 16px 60px; 4 .flow-ttl { 5 text-align: center; 6 font-size: 1.8rem; 7 line-height: 2.2; 8 font-weight: 600; 9 letter-spacing: 0.1em; 10 margin: 2em 0; 11 i { 12 font-size: 1.4rem; 13 } 14 } 15} 16.flow-item { 17 background-color: #FDF5E0; 18 border-radius: 3px; 19 &:not(:last-of-type) { 20 margin-bottom: 3px; 21 } 22 .flow-itemTop { 23 display: flex; 24 align-items: center; 25 padding: 10px 13px; 26 position: relative; 27 &::after { 28 content: ""; 29 width: 7px; 30 height: 7px; 31 border-bottom: 4px solid #000; 32 border-right: 4px solid #000; 33 transform: rotate(45deg); 34 position: absolute; 35 right: 20px; 36 } 37 img { 38 width: 35px; 39 margin-right: 13px; 40 } 41 .flow-itemTtl { 42 font-weight: 600; 43 font-size: 1.5rem; 44 letter-spacing: 0.1em; 45 } 46 } 47 .flow-itemBottom { 48 padding: 10px 13px 20px; // ここです。 49 display: none; 50 &:nth-child(1) { 51 padding: 10px 13px 20px; 52 } 53 .flow-itemBold { 54 font-weight: 600; 55 font-size: 1.2rem; 56 line-height: 1.6; 57 letter-spacing: 0.1em; 58 } 59 .flow-itemTxt { 60 61 } 62 } 63} 64

js

1$(function () { 2 // flow 3 $('.flow-item').on('click', function(){ 4 $(this).find('.flow-itemBottom').stop().slideToggle(250); 5 }); 6}); 7

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

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

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

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

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

guest

回答1

0

ベストアンサー

jQuery の slideToggle の仕様として、heightだけでなく上下パディング、上下マージンも変化させるようです。

ですので対策としては、padding-top は 0 にして別の方法で間隔を空けるか、slideToggle 以外の方法でスライドさせるか、になります。

前者なら、before疑似要素で間隔をあけるとか。

css

1 .flow-itemBottom { 2 padding: 0 13px 20px; // top を 0 に変更 3 display: none; 4 &:nth-child(1) { 5 padding: 10px 13px 20px; 6 } 7/* 以下挿入 */ 8 &::before { 9 content: ""; 10 display: block; 11 width: 100%; 12 height: 10px; 13 } 14/*ここまで*/

後者なら、animateメソッドを使うとか、CSSアニメーションでスライドを表現してjQueryでは.toggleClass()でクラスを付加/削除するだけにするとか、になると思います。

投稿2020/07/05 04:09

編集2020/07/05 04:12
hatena19

総合スコア34075

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

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

yuta_bsn

2020/07/05 08:48

擬似要素の発想はなかったです! 良質なご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問