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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

Q&A

解決済

3回答

5525閲覧

親要素に子要素の背景をつける事は可能でしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

1グッド

1クリップ

投稿2018/02/19 13:02

編集2018/02/19 13:57

イメージ説明

初心者の質問です。
質問内容が無理難題でしたら、申し訳ありません。

親要素に子要素が重なるような背景を
CSSで記述することは可能でしょうか?

<注意事項>
※背景用のDIV(要素)を加えることはできない場合
※レスポンシブに対応したCSS
※子要素の内容が増えると合わせて背景も長くなる

namnium1125👍を押しています

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

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

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

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

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

maisumakun

2018/02/19 13:25

子要素1と子要素2は背景がつながっていて、子要素2と3の間は背景が途切れていますが、これはどういう意味合いでしょうか。
退会済みユーザー

退会済みユーザー

2018/02/19 13:31

途切れる仕様です。子要素1、2には赤の背景、子要素3,4には青の背景をつけるといったイメージになります。
yoshinavi

2018/02/19 13:46

意味を理解出来てないかもですが、親の背景は表示しないで子の背景だけを表示したいとの事で良いのでしょうか?
退会済みユーザー

退会済みユーザー

2018/02/19 13:53

親の背景はグレーの部分にあたります。これが子要素にうまく重なるイメージです。
yoshinavi

2018/02/19 13:57

親に背景設定をしないで、子の要素に背景設定すれば良いのでは?
defghi1977

2018/02/19 14:00

おっしゃっている意味が全くわからない. 特に「親要素に子要素が重なるような背景」の部分, 親要素の上に子要素が重なるのは当たり前として, その間の背景がどうなってほしいのか, HTML構造を示すなり, 具体的な動作の例を示して欲しい.
退会済みユーザー

退会済みユーザー

2018/02/19 14:02

確かにおっしゃる通りなのですが、その場合、子要素1、2、3、4と個々に背景を設定しないといけなくなるので、図のようにひとくくりで設定できないかと悩んでいました。
yoshinavi

2018/02/19 14:08

ひとくくりだとdivの追加が早いです。しかし、追加が出来ないのであれば、個々(1と2、3と4など)に設定するしかないです。
退会済みユーザー

退会済みユーザー

2018/02/19 14:11

やはり、個々に設定するしかないんですね。ご指摘いただきありがとうございます。
defghi1977

2018/02/19 14:15

個々に設定するというより 「上手にセレクタを記述すればさほど苦労せず背景の設定ができる」はずなので, そのためにHTML構造を提示してほしかったということです.
guest

回答3

0

ベストアンサー

ほい。

HTML

1<div> 2 <div>aaa</div> 3 <div>bbb</div> 4 <div>aaa</div> 5 <div>bbb</div> 6 <div>aaa</div> 7 <div>bbb</div> 8</div>

CSS

1div>div { 2 background-color: blue; 3 position: relative; 4 margin: 1em; 5 color: #eee; 6} 7div>div::before { 8 background-color: green; 9 content: ''; 10 position: absolute; 11 top: -1em; 12 right: -1em; 13 bottom: -1em; 14 left: -1em; 15 z-index: -1; 16} 17div>div:nth-child(2n) { 18 margin-bottom: 3em; 19} 20```**動くサンプル:**[https://jsfiddle.net/Lckvt1dr/](https://jsfiddle.net/Lckvt1dr/)

投稿2018/02/19 14:39

kei344

総合スコア69407

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

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

退会済みユーザー

退会済みユーザー

2018/03/06 14:50

ありがとうございます。初心者の私でもわかりやすく、動くサンプルまでつけていただき感動しました。
guest

0

質問文を見た感じ親要素に依存した実装をしたくなさそうだったので(親要素があっていいなら間に要素があったっていいような…)、親要素なし縛りで実装してみました。
(最初は親要素も含めようとした名残でchldというクラス名をつけてしまいましたが…)

要素数も2個セットだとは明記されていなかったので任意の個数としています。

以下背景をつけたいグループに対して同じクラスgroup-i(iは整数)をつけることとします。数値設定は都合のいいように変えてください。

html

1<div class="chld group-1"> 2要素1 3</div> 4<div class="chld group-1"> 5要素2 6</div> 7 8<div class="chld group-2"> 9要素3 10</div> 11<div class="chld group-2"> 12要素4 13</div> 14 15<div class="chld group-3"> 16要素5 17</div> 18<div class="chld group-3"> 19要素6 20</div> 21<div class="chld group-3"> 22要素7 23</div>

css

1* { 2 margin: 0; 3 padding: 0; 4} 5 6.chld { 7 position: relative; 8 margin: 6vh 10vw; 9 width: 80vw; 10 height: 10vh; 11 background-color: #888888; 12}

ここからがミソの部分です。

js

1var nth = 0; 2const GROUP_NUM = 3; 3 4const COLORS = [ // この配列は都合上あるものなので気にしなくていいです。 5 ["ff0000","dd0000"] 6 ,["0000ff","0000dd"] 7 ,["00ff00","00dd00"] 8]; 9 10for(let i=0; i < GROUP_NUM; i++){ 11 12 let n = document.getElementsByClassName("group-"+(i+1)).length; 13 14 let css = 15`div:nth-of-type(${nth+1})::before { 16 content: ""; 17 position: absolute; 18 top: -2vh; 19 left: -5vw; 20 width: 90vw; 21 height: calc(calc(${n} * 10vh) + calc(${n-1} * 6vh) + 4vh); 22 z-index: -1; 23 background-image: url(http://placehold.jp/${COLORS[i][0]}/${COLORS[i][1]}/50x50.png); 24 background-repeat: repeat; 25}`; 26 27 document.head.innerHTML += "<style>"+css+"</style>"; 28 nth += n; 29} 30

本当はcss(またはsassとか?)だけで済ましたかったのですが、私の力不足でjsに頼ってしまいました…すみません。。

jsFiddle

この回答で言いたいことは、

「実装できなくはないけど、『※背景用のDIV(要素)を加えることはできない場合』なんて仕様は無くした方が良い

ということです。「js使うといいよ」という意味ではないです。

私の回答よりスマートなものはあるかもしれませんが、とにかく「回りくどい表現になってしまうよ」ということが言いたいです。

ちなみに、その仕様がなければdivで囲むだけで済みます。

html

1<div id="red" class="wrapper"> 2 <div class="chld"> 3 要素1 4 </div> 5 <div class="chld"> 6 要素2 7 </div> 8</div> 9 10<div id="blue" class="wrapper"> 11 <div class="chld"> 12 要素3 13 </div> 14 <div class="chld"> 15 要素4 16 </div> 17</div> 18 19<div id="green" class="wrapper"> 20 <div class="chld"> 21 要素5 22 </div> 23 <div class="chld"> 24 要素6 25 </div> 26 <div class="chld"> 27 要素7 28 </div> 29</div>

css

1* { 2 margin: 0; 3 padding: 0; 4} 5 6.chld { 7 /* position: relative; 8 margin: 6vh 10vw; */ 9 margin-bottom: 6vh; 10 width: 80vw; 11 height: 10vh; 12 background-color: #888888; 13} 14 15.chld:last-child { 16 margin-bottom: 0; 17} 18 19.wrapper { 20 margin: 4vh 5vw; 21 padding: 2vh 5vw; 22 z-index: -1; 23 background-repeat: repeat; 24} 25 26#red { 27 background-image: url(http://placehold.jp/ff0000/dd0000/50x50.png); 28} 29 30#blue { 31 background-image: url(http://placehold.jp/0000ff/0000dd/50x50.png); 32} 33 34#green { 35 background-image: url(http://placehold.jp/00ff00/00dd00/50x50.png); 36}

長々と失礼しました。参考になれば幸いです。m(_ _)m

投稿2018/02/19 16:35

編集2018/02/19 17:45
namnium1125

総合スコア2043

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

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

0

厳密には背景ではありませんが、子要素側のボーダーを太くしてborder-imageを使えば、似たようなことはできるかもしれません(MDN)。

投稿2018/02/19 13:35

編集2018/02/19 13:35
maisumakun

総合スコア145184

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

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

退会済みユーザー

退会済みユーザー

2018/02/19 13:42

それは思いつきませんでした!アドバイスいただきありがとうございます。1度試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問