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

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

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

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

CSS

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

Q&A

解決済

2回答

1172閲覧

CSSで、子要素の absolute が、親要素の relative を超えたい

nikuatsu

総合スコア177

CSS3

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

CSS

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

0グッド

1クリップ

投稿2022/02/17 08:37

編集2022/02/17 08:46

前提・実現したいこと

サジェストとして表示されるテキストを、入力ボックスの直下に表示しつつ、画面いっぱいに広げたいです。

発生している問題

入力ボックスの直下にサジェストを表示すべく、親要素をrelativeに、子要素のサジェストをabsoluteにしています。
しかし、サジェストの幅が親要素を超えられず、テキストの改行位置がその幅に制限されてしまいます。
サジェストの幅を、親要素を超えて画面いっぱいに広げるには、どうしたらいいでしょうか?

該当のソースコード

以下を実行 → https://jsfiddle.net/16wv4rna/

HTML

1<p><span class="color_salmon">.input</span> に入力すると<span class="color_pink">.suggest</span> が表示される機能があり、このテキストを<br> 2➀<span class="color_salmon">.input</span> の直下に表示したい<br> 3②画面の右側いっぱいまで広げたい(左側は <span class="color_salmon">.input</span> の左と同じ位置)<br> 4というのが目標</p> 5 6<br><hr><br> 7 8<div class="boxes"> 9 10 <div class="box"> 11 <div class="input input1 color_salmon" contenteditable="true">apple</div> 12 <ul class="suggest color_pink"> 13 <li>I like apples.</li> 14 <li>Please put everything in apple-pie order before you leave.</li> 15 <li>It’s apples and oranges.</li> 16 </ul> 17 </div> 18 19 <div class="box"> 20 <div class="input input2 color_salmon" contenteditable="true"></div> 21 </div> 22 23</div>

CSS

1* { 2 margin: 0; 3 padding: 0; 4 list-style: none; 5} 6span { 7 margin: 2px; 8 display: inline-block; 9} 10.color_salmon { 11 background: salmon; 12} 13.color_pink { 14 background: pink; 15} 16.boxes { 17 display: flex; 18} 19.box { 20 margin-right: 10px; 21 position: relative; 22} 23.input{ 24 width: 100px; 25 line-height: 1.5; 26} 27.suggest{ 28 position: absolute; 29 top: calc(1em * 1.5); 30 right: auto; 31 bottom: auto; 32 left: 0; 33}

試したこと

.boxrelativeを外せばサジェストの幅は適切になりますが、位置が直下に来てくれません

また、JavaScriptで.inputの位置を取得して.suggestfixedにすれば実現できますが、そこまでしなくてもできるのではないか、と思い質問させて頂きました。

お詳しい方、よろしくお願い致します。

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

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

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

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

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

Lhankor_Mhy

2022/02/17 08:51

包含ブロックを超えるだけなら、width を設定すればいいですが、そういう話ではないのですよね?
nikuatsu

2022/02/17 08:56

ありがとうございます。そうですね。画面幅は可変ですし、.inputの位置も複数ございますので、widthでは難しいのかなと思っています。
Lhankor_Mhy

2022/02/17 08:59 編集

画面幅可変は、特に問題ないような……? vw はお試しになりました?
nikuatsu

2022/02/17 09:16 編集

>画面幅可変は、特に問題ないような……? 例えばサジェストに1000pxを指定したとき、画面幅が2000pxならサジェストが画面幅いっぱいにならず、画面幅が500pxならサジェストが隠れてしまいだろう。という考えです。 >vw はお試しになりました? はい。ただ .input が複数あり、その左の位置は不確定です。そのため、 calc( 100vw - .inputの画面左からの位置 ) と指定しなければならならず、結局JavaScriptで測るのなら fixed の方法と同じ手間だろう。という考えです。 以上は素人の私の「考えです」なので、間違いであれば遠慮なくご指摘頂けましたら幸いです。
guest

回答2

0

ベストアンサー

こういうことですか?

css

1.box { 2 margin-right: 10px; 3 /* position: relative; */ 4} 5 6.suggest{ 7 position: absolute; 8 /* top: calc(1em * 1.5); */ 9 /* right: auto; */ 10 right: 0; 11 /* bottom: auto; */ 12 left: 0; 13}

別回答を追記

これではどうでしょうか?

css

1.box { 2 margin-right: 10px; 3 /* position: relative; */ 4} 5 6.suggest{ 7 position: absolute; 8 /* top: calc(1em * 1.5); 9 right: auto; 10 bottom: auto; 11 left: 0; */ 12 word-break: break-all; 13} 14.suggest::before{ 15 content: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 16 display: block; 17 height: 0; 18 visibility: hidden; 19}

投稿2022/02/17 08:56

編集2022/02/18 01:19
Lhankor_Mhy

総合スコア37413

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

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

nikuatsu

2022/02/17 09:12 編集

ありがとうございます。そちらですと >左側は .input の左と同じ位置 が実現できなそうです。 質問はそれを踏まえて .input1 と .input2 をご用意したのですが、そちらですと .input2 へのサジェストであるにも関わらず、.input1 の左側にサジェストが来てしまうようです。 ■ .input1 へのサジェスト(質問のコードと同じ) ```HTML <div class="box"> <div class="input input1 color_salmon" contenteditable="true">apple</div> <ul class="suggest color_pink"> <li>I like apples.</li> <li>Please put everything in apple-pie order before you leave.</li> <li>It’s apples and oranges.</li> </ul> </div> <div class="box"> <div class="input input2 color_salmon" contenteditable="true"></div> </div> ``` ■ .input2 へのサジェスト ```HTML <div class="box"> <div class="input input1 color_salmon" contenteditable="true"></div> </div> <div class="box"> <div class="input input2 color_salmon" contenteditable="true">apple</div> <ul class="suggest color_pink"> <li>I like apples.</li> <li>Please put everything in apple-pie order before you leave.</li> <li>It’s apples and oranges.</li> </ul> </div> ```
Lhankor_Mhy

2022/02/17 09:13

あー、なるほど、左側は合わせたいんですね。 把握しましたが、たぶん無理ですね。 こういう質問の時は、想定している状態をポンチ絵でも描いて提示すると、伝わりやすいような気がします。
nikuatsu

2022/02/17 09:35 編集

やはり無理ですか。無念ですが、無理だとわかって良かったです。ありがとうございました。
nikuatsu

2022/02/17 09:40

↑ 「やはり無視ですか」になっておりました!何度もご返信くださったのに大変申し訳ございません! 「やはり無理ですか」に修正致しました。
Lhankor_Mhy

2022/02/18 01:20

かなり強引なやり方ですが、追記しました。
nikuatsu

2022/02/18 02:47

こんにちは。ありがとうございます!できました。さすがです。 一点よろしいでしょうか。.suggest::before の指定はなくてもできているように見受けられますが、こちらどのような意図でご指定なさいましたか?
Lhankor_Mhy

2022/02/18 04:13

そうですか、こちらではそのようにしないとダメだったのですが、それではご提示いただいていない部分に原因があるのかもしれないですね。
nikuatsu

2022/02/18 10:05

妙ですね。質問のリンクに対しご回答を踏まえて修正したものがこちらです。.suggest::before の指定をせず、41行目にご回答を追加しました。 https://jsfiddle.net/zg0nexqk/ 質問にある. box と .suggest を、19行目と30行目で次のように削除し 19 /* 削除 */ 30 /* 削除 */ そして41行目で次のように追加しただけなのですが、 41 /* ご回答を追加 */ これで再現しませんでしょうか?
Lhankor_Mhy

2022/02/19 14:01

ご提示のものでは画面いっぱいになっていませんでした。
guest

0

[親要素を超えて画面いっぱいに広げる]の解釈が間違っていたらごめんなさい。

.boxのrelativeを外せばサジェストの幅は適切になりますが、位置が直下に来てくれません

上記の状態のサイズが理想なのでしたら、.suggestにwidth: max-contentを設定することで実現できます。

CSS

1.suggest{ 2 position: absolute; 3 top: calc(1em * 1.5); 4 right: auto; 5 bottom: auto; 6 left: 0; 7 width: max-content; 8}

投稿2022/02/17 08:53

編集2022/02/17 08:54
PlugOut777

総合スコア917

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

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

nikuatsu

2022/02/17 08:59

ありがとうございます。そちらでは .suggest が画面幅を超えてしまうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問