.header .search-area
์คํฌ๋กค ์ด๋ฒคํธ๐ ์๋งจํฑ ํ๊ทธ๋?
Semantic์ '์๋ฏธ์', '์๋ฏธ๋ก ์ ์ธ'์ด๋ผ๋ ๋ป์ ๊ฐ์ง ํ์ฉ์ฌ์ด๋ค. ๋ฐ๋ผ์ ์๋งจํฑ ํ๊ทธ๋ ์๋ฏธ๊ฐ ์๋ ํ๊ทธ๋ฅผ ๋งํ๋ค.
div
๋span
๊ณผ ๊ฐ์ด ์๋ฏธ๊ฐ ์๋ ํ๊ทธ๋ ํ๊ทธ ์ด๋ฆ๋ง ๋ณด๊ณ ๋ ์ด๋ค ๋ด์ฉ์ธ์ง ์ ํ ์ ์ถํ ์๊ฐ ์๋ ๋ฐ๋ฉด,form
,table
,article
๋ฑ ์๋ฏธ๊ฐ ์๋ ํ๊ทธ๋ ๋ด์ฉ์ ๋ช ํํ๊ฒ ์ ์ํ๋ค.
๐ ์๋งจํฑ ํ๊ทธ์ ์ฅ์
โ SEO(Search Engine Optimization, ๊ฒ์ ์์ง ์ต์ ํ)์ ์ ๋ฆฌํ๋ค.
โ ์ ์ง ๋ณด์์ฑ : main, section๋ฑ ์๋ฏธ์๋ ํ๊ทธ๋ช ์ ์ฌ์ฉํ๋ฏ๋ก์ ํด๋น ์์ญ์ ํ ๋์ ํ์ ๊ฐ๋ฅํด์ง๋ค.
<header class="header">
<div class="inner">
<div class="search-area">
<div class="group-search">
<div class="search-inner">
<h1 class="logo">
<a href="">
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.273 12.845 7.376 0H0v24h7.727V11.155L16.624 24H24V0h-7.727v12.845z">
</path>
</svg>
<span class="blind">๋ค์ด๋ฒ๋ก๊ณ </span>
</a>
</h1>
<form action="" method="get">
<fieldset>
<legend class="blind">๊ฒ์</legend>
<input type="text" class="input-text" title="๊ฒ์์ด๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์.">
<button class="btn-keyboard"><span class="blind">๊ฐ์ํค๋ณด๋</span></button>
<button class="btn-help"><span class="blind">๋์๋ง</span></button>
<button class="btn-submit"><span class="blind">๊ฒ์</span></button>
</fieldset>
</form>
</div>
</div>
</div>
<nav class="group-nav">
<ul class="nav-list">
<li class="nav-item">
<a href="" class="">
<i class="ic-mail"></i>
<span class="name">๋ฉ์ผ</span>
</a>
</li>
<li class="nav-item">
<a href="" class="">
<i class="ic-cafe"></i>
<span class="name">์นดํ</span>
</a>
</li>
<li class="nav-item">
<a href="" class="">
<i class="ic-blog"></i>
<span class="name">๋ธ๋ก๊ทธ</span>
</a>
</li>
<li class="nav-item">
<a href="" class="">
<i class="ic-shop"></i>
<span class="name">์ผํ</span>
</a>
</li>
<li class="nav-item">
<a href="" class="">
<i class="ic-news"></i>
<span class="name">๋ด์ค</span>
</a>
</li>
<li class="nav-item">
<a href="" class="">
<i class="ic-stock"></i>
<span class="name">์ฆ๊ถ</span>
</a>
</li>
<li class="nav-item">
<a href="" class="">
<i class="ic-real"></i>
<span class="name">๋ถ๋์ฐ</span>
</a>
</li>
<li class="nav-item">
<a href="" class="">
<i class="ic-map"></i>
<span class="name">์ง๋</span>
</a>
</li>
<li class="nav-item">
<a href="" class="">
<i class="ic-webtoon"></i>
<span class="name">์นํฐ</span>
</a>
</li>
<li class="nav-item">
<a href="" class="">
<i class="ic-more"></i>
<span class="blind">๋ฐ๋ก๊ฐ๊ธฐ ํผ์นจ</span>
</a>
</li>
</ul>
</nav>
<!--์๋ต-->
</div>
</header>
.header .search-area{
position: absolute;
top: 64px;
left: 50%;
z-index: 10;
transform: translateX(-50%);
width: 706px;
border: 1px solid #03c75a;
border-radius: 33px;
background-color: #fff;
}
.header.fixed .search-area {
position: fixed;
top: 0;
right: 0;
left: 0;
width: 100%;
border-radius:0;
border-width:0 0 1px 0;
animation:ani-dropdown .3s cubic-bezier(0.33, 1, 0.68, 1);
transform:translate(0);
}
@keyframes ani-dropdown {
0% {
transform:translateY(-100%);
}
100% {
transform:translateY(0);
}
}
.header.fixed .search-area .group-search {
width:1280px;
margin:4px auto 0;
}
.header.fixed .search-area .group-search .search-inner{
width: 816px;
border-bottom:0;
transform:translateX(-20px);
border:1px solid rgba(0,0,0,0);
}
/* ์๋ต */
์คํฌ๋กค์ด ๋์์ ๋ ๋ณ๊ฒฝ๋๋ ๊ตฌ์ญ์ธ
.search-area
์ ํด๋์ค.fixed
๊ฐ ์ถ๊ฐ ๋์์ ๋์ css ์คํ์ผ ์์ฑ์ ๋ณ๊ฒฝ ํด์ฃผ์๋ค. ์ฌ๊ธฐ์ ์คํฌ๋กค ๋๋กญ๋ค์ด ๋์์๋๋ animation ์์ฑ์ ์ด์ฉํด ์์ง์ ํจ๊ณผ๋ฅผ ๋ฃ์ฃผ์๋ค.
let header = document.querySelector(".header");
let headerHeight = header.offsetHeight;
window.onscroll = function () {
let windowTop = window.scrollY;
if (windowTop >= headerHeight) {
header.classList.add("fixed");
} else {
header.classList.remove("fixed");
}
};
header
์ ๋์ด๊ฐ์ ๋ณ์headerHeight
์ ๋ฃ๊ณ , ์กฐ๊ฑด๋ฌธ if๋ฌธ์ ํตํด ์คํฌ๋กค ๊ฐ์ด header์ ๋์ด๊ฐ๋ณด๋ค ์ปค์ง๋ฉด.fixed
๋ฅผ ์ถ๊ฐํ๊ณ , ์๋ ๊ฒฝ์ฐ.fixed
๋ฅผ removeํ๋ผ๋ ์กฐ๊ฑด์ ํตํด ๊ตฌํํ์๋ค.
๐ IR(Image Replacement)์ด๋?
์ด๋ฏธ์ง๋ฅผ ๋ณผ ์ ์๋ ์ฌ์ฉ์์๊ฒ ์ ์ ํ ๋์ฒด ํ ์คํธ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก, ์ด๋ ์น ์ ๊ทผ์ฑ ์ค์๋ฅผ ์ํ ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๋ฟ ์๋๋ผ ๊ฒ์ ์์ง์ ํจ๊ณผ์ ์ธ ๋ด์ฉ ์์ง์ ์ํด์๋ ํ์ํ๋ค.
๐ ๋ค์ด๋ฒ์ IR๊ธฐ๋ฒ
๐ท HTML
<span class="blind">๊ฒ์์ฐฝ</span>
๐ CSS
.blind{ position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); margin: -1px; }
โ IR ๊ธฐ๋ฒ์ ์ ๊ทผ์ฑ์ ๋จ์ด๋จ๋ฆฌ์ง ์์ผ๋ฉด์๋ ๊ฒ์์์ง์ผ๋ก๋ถํฐ ๋์ ๊ฐ์ค์น๋ฅผ ๋ฐ์ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
๐ ์ด๋ฏธ์ง ์คํ๋ผ์ดํธ(Image Sprite)๊ธฐ๋ฒ์ด๋?
์ฌ์ ์ ์ผ๋ก๋ ์กฐ๊ฐ๋ ์ด๋ฏธ์ง ํ์ผ๋ค์ ํ๋์ ํ์ผ๋ก ๋ณํฉ ํ ๋ฐฐ๊ฒฝ์ผ๋ก ์ฒ๋ฆฌํด์ ์น ๋ฌธ์ ์ ์ก ์๋๋ฅผ ๋์ด๋ ๊ธฐ๋ฒ์ด๋ค.
ํ๋ง๋๋ก ์ฌ๋ฌ ๊ฐ์ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ํ๋์ ํ์ผ๋ก ์ ์ํ ํbackground-position
์์ฑ์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฆฌ๋ด์ผ ๋๊ธฐ์ ๊ตฌ)๋ค์ด๋ฒ ํด๋ก ์ฝ๋ฉ์ ํ์ ๋ ๋น์ ์ฒ์ ๋ดค๋ ๊ธฐ๋ฒ์ด๋ค. ์ค์ ๋ก ๋ค์ด๋ฒ์์๋ ๋ฉ์ธ ํ์ด์ง์์ ์ด ๊ธฐ๋ฒ์ ๊ต์ฅํ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ๊ณ ์๋ค.
.header .group-nav [class*="ic-"]::after{
display: block;
position: relative;
margin: 0 auto;
width: 44px;
height: 44px;
content: '';
}
.header .group-nav .ic-mail::after{
background-position: -250px -90px;
}
.header .group-nav .ic-cafe::after{
background-position: -250px 0;
}
.header .group-nav .ic-blog::after{
background-position: -201px -98px;
}
.header .group-nav .ic-shop::after{
background-position: -90px -209px;
}
class๊ฐ
ic
์ธ ํ๊ทธ์ ๊ฐ๊ฐbackground-position
์ผ๋ก ์ขํ๊ฐ์ ์ค์ ํด, ๊ฐ ์๋ฆฌ์ ์ํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฃ์๋ค.
โ IS ๊ธฐ๋ฒ(์ด๋ฏธ์ง ์คํ๋ผ์ดํธ) ์ฅ์
- ๋ฌธ์ ์ ์ก ์๋๋ฅผ ๋์ด๊ธฐ ๋๋ฌธ์ ์นํ์ด์ง์ ๋ก๋ฉ์๊ฐ์ด ๋จ์ถ๋จ
- ๋ช ๊ฐ์ ์คํ๋ผ์ดํธ ์ด๋ฏธ์ง(sprite image) ํ์ผ๋ง์ ๊ด๋ฆฌํ๋ฉด ๋๋ฏ๋ก ๋งค์ฐ ๊ด๋ฆฌํ๊ธฐ ๊ฐํธํจ
โ IS ๊ธฐ๋ฒ(์ด๋ฏธ์ง ์คํ๋ผ์ดํธ) ๋จ์
- ์ด๋ฏธ์ง ์ปทํ ์ ์์ ๋์ด ์ฆ๊ฐํจ
- ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ ์ง๋ณด์๊ฐ ๊น๋ค๋ก์