質問するログイン新規登録
CSS

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

Q&A

解決済

1回答

1303閲覧

固定位置から画面幅に合わせて伸びる要素を実装したいです

kumamoku

総合スコア1

CSS

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

0グッド

0クリップ

投稿2022/03/20 02:27

0

0

下記画像のようなコーディングをしたいです。
イメージ説明

固定幅1080px内にテキストを入れて、帯が画面幅の端合わせて伸縮させたいです。
他の要素のレイアウトの都合上、テキスト部分は固定幅1080pxの
黄色のコンテンツエリアをposition: relative;とし、ピンクのテキスト部分はposition: absolute;にして位置を固定しています。

**HTML** <div class="main"> 固定幅エリア  <div class="text"> 固定幅以内のテキストエリア   テキスト  </div>  <div class="side"></div> 伸ばしたい帯 </div> **CSS** .main { width: 1080px; position: relative; } .text { width: 300px; height: 200px; position: absolute; top: 20px; right: 0; } .side { ここの部分をどうすればいいのかわかりません。 }

試したこと
・テキスト部分と帯の部分をflexにし、テキスト部分は固定幅、帯部分(side)はflex: 1;にして固定部分と可変部分のあるボックスにし、固定幅が親要素なので、帯部分は消えてしまうので、ボックスに

margin: 0 calc(50% - 50vw);

を設定しましたが、sideが消えてしまいました。

これ以外に何かいい方法はないかなどずっとググってますがなかなか
答えが見つからず質問に至りました。

ご教授いただけると幸いです。

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

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

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

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

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

recal

2022/03/20 03:37

テキストは固定幅以上には伸びないのでしょうか?
kumamoku

2022/03/20 05:23

テキスト部分はテキスト以外の帯は伸びても大丈夫なのですが、固定幅以内にテキスト内容が来るように したいです。どんな画面幅でも固定の1080px以内にテキスト部分があるようにしたいです。 説明が下手ですみません。
guest

回答1

0

ベストアンサー

試しに作ってみました。

以下の理由から実際に使うにはjsが必要なんじゃないかなと思います

  • テキストブロックの高さを可変にできない
  • 擬似要素に上限があるのでテキストブロックは2つまでしか作れない?

まず画像幅に合わせて伸びる部分のサイズを計算します。
calcを使って
コンテンツ領域内に表示されるテキストブロックのwidth
コンテンツ領域外のwidthを算出して
コンテンツブロックの疑似要素に指定します。

width: calc(100% - 70%) + (100vw - 1024px) / 2;
(1080pxではなく1024pxで書いてます。

あとは疑似要素とテキストブロックのabsolute位置を同じにして重ねる感じです。

html

1<div class="parent"> 2 <div class="child"> 3 <p>いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせすん 4 </div> 5</div>

css

1body { 2 margin: 0; 3} 4* { 5 box-sizing: border-box; 6} 7.parent { 8 height: 100vh; 9 width: 1024px; 10 margin: auto; 11 background-color: plum; 12 position: relative; 13} 14.parent::after { 15 content: ""; 16 position: absolute; 17 width: calc((100% - 70%) + (100vw - 1024px) / 2); 18 height: 140px; 19 top: 30px; 20 left: 70%; 21 background: tomato; 22 z-index: -1; 23} 24 25.child { 26 position: absolute; 27 width: calc(100% - 70%); 28 height: 140px; 29 top: 30px; 30 left: 70%; 31 background: linear-gradient(to right, olive, tomato); 32} 33p { 34 padding: 1em; 35}

検証用codepen

投稿2022/03/20 07:14

recal

総合スコア1128

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

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

kumamoku

2022/03/20 07:25

丁寧にご回答いただきありがとうございます! 私もcalcを使ったりもして試していたのですが、このようにいかなかったので、何かコードが 違ったと思います。 jsは使用せずの実装だったため、ちょっと頭を悩ませていましたが、無事解決いたしました。 回答を待っている間に、以下も試してみました。 固定幅コンテンツ外にwidth:100%のエリアを作り、テキストエリア自体もwidht:100%にした後、 marginにマイナス%を指定したらなんとなーくの形はできましたが、ウィンドウ画面によっては 多少ずれが生じるためrecal様のご教授いただいた内容で実装試してみます! ありがとうございました!!
kumamoku

2022/03/21 11:28

無事に解決いたしました。 ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問