見出し画像

【HTML/CSS】ヘッダーと背景色を固定して余白調整する方法


概要

Airbnbのサイトを模写していて、ヘッダーの固定、背景色、余白のやり方に少し悩み、解決したので手順と考え方、コードを記載します。
※該当サイト⇩


コード

HTML

<div class="granHeader">
    <header id="header">
        <div class="header-logo">
            <a href="#">Bircnc</a>
        </div>
        <nav>
            <ul>
                <li>Bircncでホスティングをはじめませんか?
                </li>
                <li><a href="#"  id="gradient-button">
                    Bircncスタートツール</a>
                </li>
            </ul>
        </nav>
    </header><!-- /header --> 
</div>   


SCSS重要な箇所

.granHeader {
  position: fixed;        /* ヘッダーを画面上部に固定 */
  top: 0;                 /* 画面の最上部から配置 */
  width: 100%;            /* 幅を画面全体に拡張 */
  z-index: 100;           /* 他の要素より前面に表示 */
  background-color: #fff; /* 背景色を白に設定 */
}

#header {
  display: flex;                  /* フレックスボックスモデルを使用して配置 */
  justify-content: space-between; /* 子要素を両端に分散配置 */
  align-items: center;            /* 子要素を中央揃えに配置 */
  height: 80px;                   /* 高さを80pxに設定 */
  max-width: 1450px;              /* 最大幅を1450pxに設定 */
  margin: 0 auto;                 /* 上下のマージンを0、左右のマージンを自動調整で中央寄せ */
  padding: 0 80px;                /* 上下のパディングを0、左右のパディングを80pxに設定 */
  background-color: #fff;         /* 背景色を白に設定 */  
  color: rgb(34, 34, 34);         /* 文字色をダークグレーに設定 */
}

解説

まず”granHeader ”クラスで”最上部に固定”し、画面全体の幅を持たせ背景色を白色にします。

”#header”IDはフレックスモデルで左右に分散配置します、ここで普段containerクラスなどで設定している最大幅"max-width: 〇〇〇px"と中央揃え”margin: 0 auto”と内側の余白"padding: 0  〇〇px"を持たせます。

これで背景は親要素の白色を保持したまま、内側の余白も下の要素に合わせ厄介なposition  fixedの作用を起こさせずに整えることが出来ます。

※全SCSS

/*-------------------------------------------
#header
-------------------------------------------*/
.granHeader {	
	position: fixed;
	top: 0;	
	width: 100%;
	z-index: 100;
	background-color: #fff;
}

#header {
	@include flexMode(space-between);
	max-width: 1450px;
	margin: 0 auto;
	padding: 0 80px;
	background-color: #fff;
	height: 80px;	
	color: $darkColor;

	.header-logo a {
		font-size: 2rem;
		font-weight: bold;
		color: $redWine;
	}

	nav ul {
		@include flexMode(space-between);
		li {
			font-weight: bold;
		}
		a {
			display: inline-block;
			font-size: 1.125rem;
			color: #fff;
			background-color: #E01761;
			padding: 10px 23px;
			margin-left: 24px;
			border-radius: 8px;
		
			#gradient-button {
				transition: opacity 0.3s ease;
				opacity: 1;
			}

		.fa {
			margin-right: 5px;
			opacity: 1;
			&:hover {
				opacity: 1;
			}
		}
		}	
	}
}

いいなと思ったら応援しよう!