HTMLとCSSを使って、図のようなWebサイトを作りたいです
(この図は実は私のコーディング事例1をスクリーンショットでとったものです。私のコーディングは後で示します。)。
問題は、灰色のグラデーションの部分の作り方です。
この部分には文章や画像が入るのですが、最後は、下向きにとがっているような形(Vの字のような形)にしたいと考えています。
このWebサイトで難しいと感じている点は2点あり、
1点目は灰色の部分のグラデーションをどのように作るのか? という点です。
仮にこの点がグラデーションではなく、べた塗りであれば、四角形と下向きの三角形をつくって組み合わせる、という方法を採ることが考えられます。ですがグラデーションのため、うまく色の調整をするのが難しい気もします。
2点目は、下向きにとがっている部分(灰色のグラデーションと黄色の間)に灰色で線が引かれていることです。この線をどのように表現するのかが悩ましいです。
このようなサイトをどのようにして作ったらいいか? というのが今回の質問です。
参考までに私の作った方法を記載すると、私は以下のようにしてこのサイトを作りました
(コーディング事例1。500pxとか300pxとかの長さについては適当に入れています。この部分は、本来は本文の分量によって変化します。)。
clip-pathを使うことで、下向きにとがっている部分(V字の部分)を作っています。
そして灰色の線の部分(灰色のグラデーションと黄色の間)はボックスの長さを少しずつずらすことで作成しています
(長さの%を少しずつ変えることで作成しています)。
HTML
1<div class="block"> 2 <h2>タイトル</h2> 3 <div class="block__under"> 4 <div class="block__middle"> 5 <div class="block__up"> 6 ここに文章を入れる 7 </div> 8 </div> 9 </div> 10</div> 11<div class="block-2"></div>
CSS
1.block__under { 2 background-color: yellow; 3} 4 5.block__middle { 6 background-color: #c8c8c8; 7 clip-path: polygon(0 0, 100% 0, 100% 89%, 50% 100%, 0 89%); 8} 9 10.block__up { 11 height: 500px; 12 background-image: linear-gradient(to bottom, #c8c8c8, #eeeeee); 13 clip-path: polygon(0 0, 100% 0, 100% 88%, 50% 99%, 0 88%); 14} 15 16.block-2 { 17 height: 300px; 18 background-color: yellow; 19}
しかしながら、私の作成方法は良くないと思っています。
なぜなら私の作成方法だと、本文に文章や画像を大量に記載した場合、サイトがどんどん縦に長くなるのですが、それに伴い、V字の角度もどんどん鋭くなるためです。V字の角度が鋭くなると、これまでは表示されていた部分が表示されなくなります。
(実はスマホサイトとパソコンサイトでも、V字の角度が異なるため、表示内容が見えたり見えなかったりします。)
これを防ぐためには、本文の分量の変化に伴い、私の設定した%も修正する必要があるのですが、それはかなり手間がかかります。
本文の分量が変化してもV字の角度が変化しないようなサイトを作りたいです。
また他の方法として、以下の方法も考えました(コーディング事例2)。
HTML
1<h2>タイトル</h2> 2<div class="block"> 3 <p>ここに文章を入れる</p> 4</div> 5<div class="block-2"></div>
CSS
1*, 2*::before, 3*::after { 4 box-sizing: border-box; 5} 6 7.block { 8 height: 500px; 9 background-image: linear-gradient(to bottom, #c8c8c8, #eeeeee); 10 position: relative; 11 overflow-x: hidden; 12} 13.block::before, .block::after { 14 content: ""; 15 display: block; 16 width: 50vw; 17 height: 100%; 18 position: absolute; 19 bottom: 0; 20 background-color: yellow; 21} 22.block::before { 23 left: 0; 24 border-right: 20px solid #c8c8c8; 25 transform: skew(70deg); 26 transform-origin: bottom center; 27} 28.block::after { 29 right: 0; 30 border-left: 20px solid #c8c8c8; 31 transform: skew(-70deg); 32 transform-origin: bottom center; 33} 34 35.block-2 { 36 height: 300px; 37 background-color: yellow; 38}
この方法は疑似要素を作り、疑似要素をskewで変化させる方法です。
先ほどの作り方とは異なり、本文が増えてもV字の角度が鋭くなるということはありません。
その点は優れているのですが、V字の頂点のところの重なり方が、きれいではないです。
これらの例のように、色々考えてはみたものの、満足のいくコーディングに仕上がっていません。
私の考えた方法とは全く違う方法でも構いませんので、なるべく簡便な、手間ひまのかからない方法でこのサイトを作りたいと考えています。
何らかのアイデアをお持ちの方のお知恵をお借りしたいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー

2023/08/08 08:51