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

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

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

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

HTML

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

CSS

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

Q&A

解決済

1回答

4177閲覧

親要素でdisplay: noneを使わずに、position: absoluteの子要素を消したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2018/08/22 08:44

編集2018/08/22 10:48

前提・実現したいこと

表題の通りです。

子要素にposition: absoluteが設定されているものがある場合、親要素をheight: 0にして隠しても子要素が存在し続けます。これを、子要素のクラス等をいじることなく、消したいと考えています。

以下の例で、青背景をスクロールした下にあるオレンジの背景部分の要素を消したい。また、レイアウトからも消えてほしいです(スクロールバーが出てほしくない)。

https://jsfiddle.net/vxnqr47d/43/

親要素でdisplay: noneを使わない理由は、transitionを利用したいからです。
親要素はアコーディオンメニューで、引き出しのようなアニメーションを実現するためにはdisplay: noneでなくheight: 0 -> height: 100pxなどで行う必要があるためです。

該当のソースコード

https://jsfiddle.net/vxnqr47d/43/
の内容を書き下します。

html

1<div class="of-auto">a 2 <div class="content"> 3 <div class="innercontent">B</div> 4 <div class="innercontent2"></div> 5 </div> 6</div>

css

1.of-auto { 2 position: fixed; 3 left: 0; 4 top:1em; 5 overflow: auto; 6 height: 200px; 7 width: 200px; 8 background-color: blue; 9 color: white; 10} 11 12.content { 13 overflow: hidden; 14 height: 0; 15 max-height: 0; 16 margin: 0; 17} 18 19.innercontent { 20 background-color: red; 21 height:600px; 22} 23 24.innercontent2 { 25 background-color: orange; 26 height:100px; 27 position : absolute; 28 right:0; 29}

試したこと

.contentにvisibility: hiddenを設定してもダメでした。
.contentにdisplay: noneを設定するとうまく消えますが、それではtransitionができないのでダメです。
.innercontent2からposition: absoluteを削除することで隠れることも確認済みです。

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

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

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

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

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

k_fujimoto

2018/08/22 09:05 編集

何をトリガーにして ".innercontent2" の背景色を消したいのでしょうか?
退会済みユーザー

退会済みユーザー

2018/08/22 10:39

k_fujimotoさん 背景を消したいのではなく、要素そのものを消したいのでした。記載を少し修正します。また、実際のトリガーはボタンクリックですが、トリガーからclassの書き換えまでの実施は問題ないので、静的にでも上記条件で消す方法を知りたい、ということです。
guest

回答1

0

ベストアンサー

You may need is this.

css

1selector{ 2 opacity: 0; 3 pointer-events: none; 4}

Please try using them.


You don't need use display: none to show fadeout-effect.

Make it simple as you did.
イメージ説明

html

1<label for="tgl" id="tgl_l">Click me!</label> 2<div class="of-auto">a 3 <div class="content"> 4 <div class="innercontent">B</div> 5 <input type="checkbox" id="tgl"> 6 <div class="innercontent2"></div> 7 </div> 8</div>

css

1.of-auto { 2 position: fixed; 3 left: 0; 4 top:1em; 5 overflow: auto; 6 height: 200px; 7 width: 200px; 8 background-color: blue; 9 color: white; 10} 11 12.content { 13 overflow: hidden; 14 height: 0; 15 max-height: 0; 16 margin: 0; 17} 18 19.innercontent { 20 background-color: red; 21 height:600px; 22} 23.innercontent2 { 24 background-color: orange; 25 height:100px; 26 position : absolute; 27 right:0; 28} 29 30/*tgl part*/ 31 32#tgl_l{ 33 position: fixed; 34 top: 230px; 35 border-radius: 5px; 36 border: 1px solid; 37 padding: .5em; 38} 39#tgl{ 40 display: none; 41} 42 43/*main part*/ 44 45#tgl:checked +.innercontent2{ 46 opacity: 0; 47 width: 0; 48 height: 0; 49 overflow: hidden; 50} 51 52/* i think this is better than above 53 54#tgl:checked +.innercontent2{ 55 animation: fadeOut .7s forwards; 56} 57@keyframes fadeOut{ 58 0%{ 59 pointer-events: none; 60 overflow: hidden; 61 } 62 99.9%{ 63 opacity: 0; 64 } 65 100%{ 66 width: 0; 67 height: 0; 68 } 69} 70 71*/ 72

main issue: why overflow: hidden; not working

Please write position: relative at a parent element if the child element has position: absolute. Otherwise, the origin of the element will be set to the parent's parent's parent's...parent element.

イメージ説明
イメージ説明

html

1<div id="a"> 2 <div id="b"> 3 <div id="c"> 4 </div> 5 </div> 6</div>

css

1#a{ 2 border: 1px solid; 3 width: 300px; 4 height: 300px; 5} 6#b{ 7 /*position: relative;*/ 8 width: 200px; 9 height: 200px; 10 background: skyblue; 11} 12#c{ 13 position: absolute; 14 right: 0; 15 width: 100px; 16 height: 100px; 17 background: palegreen; 18}

Don't forget position: relative! lol

css

1.content{ 2 position: relative; 3}

投稿2018/08/22 10:22

編集2020/01/26 14:58
liveasnotes

総合スコア1284

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

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

退会済みユーザー

退会済みユーザー

2018/08/22 10:47

thank you. but I don't want to change child element (that is .innercontent2). And, I don't want to see scroll bar. (I'll update question body)
liveasnotes

2018/08/22 13:13

> I don't want to change child element Ah... I'll add about it. wait a moment.
退会済みユーザー

退会済みユーザー

2018/08/23 00:49

thank you God. "position: relative" is just my wanted. bestest answer.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問