Simplicityの特徴 › フォーラム › Simplicity2に関する話題何でも › 特定の要素をブラウザ幅いっぱいにしたい
- このトピックには8件の返信、1人の参加者があり、最後に
Hidekichiにより9年、 5ヶ月前に更新されました。
-
投稿者投稿
-
-
2017年3月30日 10:18 PM #51453
NokiNum
ゲストとても使いやすく利用させて頂いております。
現在固定ページでサイトを作成していますが
特定の要素を親要素の幅(1070px)を超えてブラウザいっぱいの幅に表示したいと
考えております。ヘッダー画像の画面いっぱいの表示については過去ログにありましたがその方法では出来ません。
イメージとしては下記の様に、ロゴの隣 ナビがあり
その下に、特定の背景色の塗りつぶし、高さ10px程度の仕切りを入れたいと考えております。————–1070px————–
TOPロゴ画像 ナビゲーション
———————————-
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■よろしくお願い申し上げます。
-
2017年3月30日 11:51 PM #51454
Hidekichi
ゲスト何か要素を挿入した方が良いですが、挿入しなくてもできます。
#body::before { content: ""; height: 10px; background-color: #333; margin: 40px 0; display: block; }ナビがロゴの横に来てることから、何かしらカスタマイズされていると思うので、#bodyに::beforeでやりましたが、ヘッダの構造がわかればまた別の書き方もできるかと。
jQueryで空要素を挿入しても、結局#headerにも#bodyにも関係ないブロックなので、display:blockにすれば勝手に画面幅ですし、背景色入れて高さと上下マージンを入れるだけかと思います。
もし、ナビが#headerの中に入っているのであれば、
#header { border-bottom: 10px solid #333; padding-bottom: 40px; }でもできそうですけどね。まぁやり方はhtmlの構造次第でいくつかあると思いますが、どうなっているかわからないのでどれが良いかは何とも言えません。どれでも同じようなことはできそうです。
-
2017年3月31日 9:52 AM #51456
NokiNum
ゲスト早速のご回答ありがとうございます。
どちらの方法でも出来ました!
難しく考えすぎていました…実はもう一箇所同じようにしたいのですが、
下記の様に中間にあるコンテンツ(要素(文字と画像を配置))
のみ幅を親の幅を超えてブラウザの幅に背景色を効かせたい場合は
どのようにしたら良いでしょうか?
コンテンツそのものは、1070に収まっていて良いのですが、backgroundだけ幅を効かせたいのです。| ヘッダー |
——————–
| スライダー |
| コンテンツ |お手数おかけします。
よろしくお願い申し上げます。 -
2017年3月31日 9:59 AM #51457
NokiNum
ゲスト| ヘッダー |
------------
| スライダー |
| コンテンツ |スペースが削除されてしまいました。
-
2017年3月31日 11:59 AM #51458
Hidekichi
ゲスト前レスにも書きましたが、htmlの構造がわからないと正しく答えられません。
その問題となるbackground部分がどうなっているかによります。で、例えばの理屈としてblog-cardに背景があったらということでjQueryでdivを挿入してcssでスタイルしています。
サンプル: ブログカードをdivで囲ってdivだけを幅いっぱいにする | codepen
ポイント、
- widthは目的の幅にする
- positionはrelativeなどを入れておく
- left:50%でセンターに持っていく
- translatexで要素の幅の半分をマイナスにする
※ paddingを入れるならbox-sizing: border-boxは必須
これは、PCの時のみ有効です。なぜならwidthがpxで絶対値として設定されているため、#mainの幅が変更されたら、これは破綻します。
cssのみでもcalc()を使用して、計算したり、#mainの幅に連動すればできなくはないかと思いますが、まぁ設計をきちんとしていないと計算しにくかったり(※1)メディアクエリが大変だったりするので、幅はjQueryで計算したほうが簡単かと思います。
ついでにpaddingも計算してもよいかも知れません。ブラウザのリサイズを考慮しなければ固定値とメディアクエリでもできそうですけどね。
※1 simplicityの要素の多くはbox-sizing: border-boxが入っていないので、そのままだとpaddingを入れた途端にはみ出します。また#main、#sidebar共にfloatが使われているため、その間のスペースは可変値であってcssのみで計算で求めるのは困難です。
サンプルでは一応#mainの幅をjQueryで算出しています。jQueryなしでもPCの時は動作するかと思います。
—-
ちょっと手間ですが別の方法として。
#mainにpaddingが入っているためいっぱいまで広がりません。#mainのpaddingを無くして、中の要素に幅をもたせ、marginでセンタリングすれば幅いっぱいは、これらをしなければ自動でなります。
サンプル: #mainの中身をmarginでレイアウト | codepen
いずれのサンプルもscssで書いてあります。css欄の下向き三角からview compiledを選択するとcssに変換できます。
-
2017年3月31日 12:05 PM #51459
Hidekichi
ゲストちなみにhtmlの構造、1カラムの時の話かどうか等がわらないため#mainで説明しています。
全画面にするには、width: calc(100vw – スクロールバーの幅);
jQueryでやるなら、window.innerWidth等で画面幅は取得できます。 -
2017年3月31日 10:04 PM #51468
NokiNum
ゲスト回答いただきありがとうございます。
教えて頂いた内容をもとにCSSをカスタマイズして
そのクラスでもとのコンテンツ要素を内包するイメージでやってみましたが、
やり方が悪いのか、コンテンツ要素の裏に少し位置がずれて表示される状況です…HTML構造は1カラム広めを設定しています。
カスタマイズは、ヘッダー部のナビゲーションの位置を変更しているだけで
コンテンツ部は特にカスタマイズしておらず、borderを0にしているくらいです・・・width設定は追記して頂いた全画面での設定です。
-
2017年4月2日 12:38 AM #51503
NokiNum
ゲストおかげさまで自己解決致しました。
<div id="contentswrap"> <div class="contents"> コンテンツ部・画像 </div> </div>#contentswrap{ margin-left: -100%; margin-right: -100%; padding-left: 100%; padding-right: 100%; background-color:#263770; } .contents{ background-color:#263770; color:#fff; padding:5%; box-sizing: border-box; }この方法でレスポンシブ効いた状態でCSSのみでなんとか行けました。
ご丁寧にありがとうございます。 -
2017年4月2日 3:36 AM #51509
Hidekichi
ゲストサンプルをアップデートしました。
つまりはこんな感じです。
前から何度も書いてますが、htmlの構造やその他のcssの影響を受けたりしますので、そこらがどうなっているかがわからないと正しくは答えられませんが、前レスで書かれたようなhtml構造の中に画像があるとしたら、こんな風に書けます。
-
-
投稿者投稿
- このトピックに返信するにはログインが必要です。