HTMLとCSSのコピペでできるレスポンシブのグリッドレイアウト

グリッドレイアウトのイラスト

グリッドレイアウトは、要素やブロックを一定の間隔と規則で並べることで、整えられた印象のを与えます。

言わばデザインの基本になるもので、WEBのレイアウトを組む上で第一歩にふさわしいものと言っても過言ではないと思います。

今回は、「グリッドレイアウトのデザインはなんたるや」ではなく、HTMLとCSSのコピペでできるレスポンシブのグリッドレイアウトについてご紹介します。

グリッドレイアウトの仕組み

表示させている画像は、Unsplash のランダムに画像を表示させているURLをbackground-image でCSSに書き込み表示させています。

Unsplashのランダム画像出力キャプチャ
Unsplash より
MEMO
Unsplashのランダム画像の例で言えば、https://source.unsplash.com/1600×900/? の最後の1600×900 の部分がサイズで、1600がwidth。900がheight になっています。この数値を任意の数値で書き換えることで、それに応じた画像をランダムで出力してくれます。

カードのサイズは「large」「Medium」「full」のclassで指定して、hover するとそれぞれのカードブロックが拡大し、画像も明朗な色合いになるような仕組みです。

レスポンシブ のグリッドレイアウト

結構長めのサンプルですが、15個のカード型デザインのブロックを配置したレイアウトです。

Action
その1その1その1その1その1その1その1その1その1その1その1その1その1その1
Romance
その2その2その2その2その2その2その2その2その2その2その2その2その2
New
その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3
New
その4その4その4その4その4その4その4その4その4その4その4その4
Popular Today
その5その5その5その5その5その5その5その5その5その5その5その5その5その5その5その5その5その5
New
その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6
New
その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7
New
その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8
New
その9その9その9その9その9その9その9その9その9その9その9その9その9その9その9その9v
New
その10その10その10その10その10その10その10その10その10その10その10その10
New
その11その11その11その11その11その11その11その11その11その11その11その11
New
その12その12その12その12その12その12その12その12その12その12その12その12その12
New
その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13
New
その14その14その14その14その14その14その14その14その14その14その14その14その14その14
New
その15その15その15その15その15その15その15その15その15その15その15その15その15その15その15その15その15

コピペ用のソース

HTMLとCSSのソースです。

色味はSANGOのデフォルトの色合いに合わせていますが、サイトの色合いに合わせて変更して利用ください。

コードを表示する

HTML

    <div class="grid">
      <div class="item">
        <span class="action">Action</span>
        <div class="details">
          その1その1その1その1その1その1その1その1その1その1その1その1その1その1
        </div>
      </div>
      <div class="item large">
        <span class="romance">Romance</span>
        <div class="details">
          その2その2その2その2その2その2その2その2その2その2その2その2その2
        </div>
      </div>
      <div class="item medium">
        <span>New</span>
        <div class="details">
          その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3その3
        </div>
      </div>
      <div class="item large">
        <span>New</span>
        <div class="details">
          その4その4その4その4その4その4その4その4その4その4その4その4
        </div>
      </div>
      <div class="item full">
        <span class="popular">Popular Today</span>
        <div class="details">
          その5その5その5その5その5その5その5その5その5その5その5その5その5その5その5その5その5その5
        </div>
      </div>
      <div class="item medium">
        <span>New</span>
        <div class="details">
          その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6その6
        </div>
      </div>
      <div class="item large">
        <span>New</span>
        <div class="details">
          その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7その7
        </div>
      </div>
      <div class="item">
        <span>New</span>
        <div class="details">
          その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8その8
        </div>
      </div>
      <div class="item medium">
        <span>New</span>
        <div class="details">
          その9その9その9その9その9その9その9その9その9その9その9その9その9その9その9その9v
        </div>
      </div>
      <div class="item large">
        <span>New</span>
        <div class="details">
          その10その10その10その10その10その10その10その10その10その10その10その10
        </div>
      </div>
      <div class="item">
        <span>New</span>
        <div class="details">
          その11その11その11その11その11その11その11その11その11その11その11その11
        </div>
      </div>
      <div class="item medium">
        <span>New</span>
        <div class="details">
          その12その12その12その12その12その12その12その12その12その12その12その12その12
        </div>
      </div>
      <div class="item medium">
        <span>New</span>
        <div class="details">
          その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13その13
        </div>
      </div>
      <div class="item large">
        <span>New</span>
        <div class="details">
          その14その14その14その14その14その14その14その14その14その14その14その14その14その14
        </div>
      </div>
      <div class="item">
        <span>New</span>
        <div class="details">
          その15その15その15その15その15その15その15その15その15その15その15その15その15その15その15その15その15
        </div>
      </div>
    </div>

CSS

/* Grid layout  */
.grid {
	display: grid;
	grid-gap: 30px;
	grid-template-columns: repeat(auto-fit, minmax(265px, 1fr));
	grid-auto-rows: 150px;
	grid-auto-flow: row dense;
	line-height: 20px;
	
}
/* Items  */
.item {
	position: relative;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	-webkit-box-orient: vertical;
	-webkit-box-direction: normal;
	-ms-flex-direction: column;
	flex-direction: column;
	-webkit-box-pack: end;
	-ms-flex-pack: end;
	justify-content: flex-end;
	-webkit-box-sizing: border-box;
	box-sizing: border-box;
	background: #0c9a9a;
	color: #fff;
	grid-column-start: auto;
	grid-row-start: auto;
	color: #fff;
	
}
.item{
	background: url("https://source.unsplash.com/900x1100");
	background-size: cover;
	background-position: center;
	-webkit-box-shadow: -2px 2px 10px 0px rgba(68, 68, 68, 0.4);
	box-shadow: -2px 2px 10px 0px rgba(68, 68, 68, 0.4);
	-webkit-transition: -webkit-transform 0.3s ease-in-out;
	transition: -webkit-transform 0.3s ease-in-out;
	transition: transform 0.3s ease-in-out;
	transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;
	cursor: pointer;
	counter-increment: item-counter;
	border-bottom: 3px solid rgba(0,144,255,0.8);
}
/* End item */

/* categories || Examples Action, Romance, New, And Popular Today */
.item span {
	width: auto;
	margin: 20PX;
	z-index: 10;
	padding: 7px;
	background: -webkit-linear-gradient(to right, #6bb6ff, #4f96f6);
  background: linear-gradient(to right, #6bb6ff, #4f96f6);
	border-radius: 4px;
  display:inline-block;
  position: absolute;
  top: -7px;
  left: -4px;
}

.popular{
	width: 100px;
	margin: 20PX;
	z-index: 10;
	padding: 7px;
	background: #9D50BB; 
	background: -webkit-linear-gradient(to right, #6E48AA, #9D50BB);  
	border-radius: 50px 120px 120px;
}
.action{
	width: 16%;
	margin: 20PX;
	z-index: 10;
	padding: 7px;
	background: #50C9C3;  
	background: -webkit-linear-gradient(to right, #96DEDA, #50C9C3);  
	background: linear-gradient(to right, #96DEDA, #50C9C3); 
}
.romance{
	width: 24%;
	margin: 20PX;
	z-index: 10;
	padding: 7px;
	background: #24C6DC; 
	background: -webkit-linear-gradient(to right, #514A9D, #24C6DC);  
	background: linear-gradient(to right, #514A9D, #24C6DC); 

}

.item:nth-of-type(3n) {
	background-image: url("https://source.unsplash.com/500x300");
	
}

.item:nth-of-type(4n) {
	background-image: url("https://source.unsplash.com/800x700");
	
}

.item:nth-of-type(5n) {
	background-image: url("https://source.unsplash.com/5000x6000");
	
}

.item:nth-of-type(6n) {
	background-image: url("https://source.unsplash.com/500x800");
	
}

.item:after {
	content: '';
	position: absolute;
	width: 100%;
	height: 100%;
	background-color: black;
	opacity: 0.5;
	-webkit-transition: opacity 0.3s ease-in-out;
	transition: opacity 0.3s ease-in-out;
	
}

.item:hover {
	-webkit-transform: scale(1.05);
	transform: scale(1.05);
}

.item:hover:after {
	opacity: 0;
}

.medium {
	grid-row-end: span 2;
}

.large {
	grid-row-end: span 3;
}

.full {
	grid-column-end: auto;
}

@media screen and (min-width: 768px) {
	.full {
		grid-column: 1/-1;
		grid-row-end: span 2;
	}
}

.details {
	position: relative;
	z-index: 1;
	padding: 15px;
	background: #fff;
	text-transform: lowercase;
	letter-spacing: 1px;
	color: #828282;
}

.details:before {
	font-weight: bold;
	font-size: 1.1rem;
	padding-right: 0.5em;
	color: #444;
}