回答編集履歴

2

よりよい解決策についての記述を追加

2018/02/07 13:40

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -1,4 +1,48 @@
1
+ 背景画像を扱う`background-xxx`系のプロパティは総じて**複数の値を設定できます**. そのため4つのPNG画像(青いラインを分割したものと, 更にその後ろの背景写真)を用意して, 適切に`background-position`, `background-size`, `background-repeat`値を定義すれば対処できます.
2
+
3
+
4
+
5
+ ```CSS
6
+
7
+ body {
8
+
9
+ position: absolute;
10
+
11
+ background-image:
12
+
13
+ url(http://jsrun.it/assets/g/V/3/B/gV3BD),/*左可変画像*/
14
+
15
+ url(http://jsrun.it/assets/C/i/d/9/Cid9h),/*中央固定画像*/
16
+
17
+ url(http://jsrun.it/assets/q/U/3/q/qU3qI),/*右可変画像*/
18
+
19
+ url(http://jsrun.it/assets/G/z/m/x/GzmxO.png);
20
+
21
+ background-size: calc(50% - 100px) 200px,200px 200px,calc(50% - 100px) 200px,200px 200px;
22
+
23
+ background-repeat: no-repeat, no-repeat, no-repeat, repeat;
24
+
25
+ background-position: left top, center top, right top, left top;
26
+
27
+ }
28
+
29
+
30
+
31
+ ```
32
+
33
+ 動作例
34
+
35
+ [http://jsdo.it/defghi1977/ezjI](http://jsdo.it/defghi1977/ezjI)
36
+
37
+
38
+
39
+ ---
40
+
41
+ NOTE:以下はSVGを用いた別解です.
42
+
43
+
44
+
1
- 背景に複数の画像を設定するとで対処できます. ではレスポンシブなSVGを使った解決策を提示します.
45
+ ここではレスポンシブなSVGを使った解決策を提示します.
2
46
 
3
47
 
4
48
 
@@ -52,12 +96,6 @@
52
96
 
53
97
 
54
98
 
55
- NOTE:
56
-
57
- `background-xxx`系のプロパティは総じて複数の値を設定できます. ですから, レスポンシブなSVGを用いずとも, 4つのPNG画像(青いラインを分割したものと, 更にその後ろの背景写真)を用意して, 適切に`background-position`, `background-size`, `background-repeat`値を定義すれば対処できます.
58
-
59
-
60
-
61
99
  ---
62
100
 
63
101
  NOTE:

1

実際の解決策を提示

2018/02/07 13:40

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -1,3 +1,71 @@
1
+ 背景に複数の画像を設定することで対処できます. ここではレスポンシブなSVGを使った解決策を提示します.
2
+
3
+
4
+
5
+ ```HTML
6
+
7
+ <!--背景画像とするSVG-->
8
+
9
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%">
10
+
11
+ <svg x="50%" y="50%" overflow="visible">
12
+
13
+ <path d="M-2000,100H-100L100-100H2000" stroke-width="50" stroke="navy" fill="none"/>
14
+
15
+ </svg>
16
+
17
+ </svg>
18
+
19
+ ```
20
+
21
+ ```HTML
22
+
23
+ <div></div>
24
+
25
+ ```
26
+
27
+ ```CSS
28
+
29
+ div{
30
+
31
+ position: absolute;
32
+
33
+ top: 0;
34
+
35
+ left: 0;
36
+
37
+ width: 100%;
38
+
39
+ height: 100%;
40
+
41
+ background-image: url(responsive.svg), url(bg.jpg);
42
+
43
+ }
44
+
45
+
46
+
47
+ ```
48
+
49
+ 動作例
50
+
51
+ [http://jsdo.it/defghi1977/4ZW5](http://jsdo.it/defghi1977/4ZW5)
52
+
53
+
54
+
55
+ NOTE:
56
+
57
+ `background-xxx`系のプロパティは総じて複数の値を設定できます. ですから, レスポンシブなSVGを用いずとも, 4つのPNG画像(青いラインを分割したものと, 更にその後ろの背景写真)を用意して, 適切に`background-position`, `background-size`, `background-repeat`値を定義すれば対処できます.
58
+
59
+
60
+
61
+ ---
62
+
63
+ NOTE:
64
+
65
+ 以下は`border-image`で解決できると早合点した際の名残です. 実際には画像の固定位置が中央部となるため, 本プロパティでは対処できません.
66
+
67
+
68
+
1
69
  CSSの`border-image`プロパティを使えば実現できるでしょう.
2
70
 
3
71