๋ก๊ณ (Logo)
๋ก๊ณ ๋ถํฐ ์ดํด๋ณด๋ฉด
<a href="/" class="logo">
<img src="./images/starbucks_logo.png" alt="STARBUCKS" />
</a>
๋ก๊ณ ๋ a ํ๊ทธ๋ก img ํ๊ทธ๋ฅผ ๋ฌถ์ด์ ๋ก๊ณ ๋ฅผ ๋๋ฅด๋ฉด ํ์ฌ ํ์ด์ง๋ก ๊ฐ ์ ์๊ฒ ๋ง๋ ๋ค.
aํ๊ทธ์ ์๋ '/'์ ์๋ฏธ
- '/'๋ํ์ฌ ํ์ด์ง๋ฅผ ์๋ฏธํ๋ค.
logo์ ์ ์ฉ๋๋ CSS ๋ฅผ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
img {
display: block;
}
a {
text-decoration: none;
}
img ํ๊ทธ๋ฅผ ์ธ๋ผ์ธ ์์๊ฐ ์๋ ๋ธ๋ก ์์๋ก ๋ง๋ค๊ณ ์ํ์ข์ฐ ๋ณ๊ฒฝ์ด ์ฝ๊ฒ ํ ์ ์๋๋ก ํ๋ค.
block : ํ ์ค ๋ชจ๋ ์ฐจ์ง
inline : ์ฝํ ์ธ ํฌ๊ธฐ ๋งํผ๋ง ์ฐจ์ง
a ํ๊ทธ๋ ์๋ ๋ฐ์ค์ด ์๊ธฐ์ง๋ง ๋ฐ์ค์ ์์ ๋ ๊ธฐ๋ฅ์ ํ๋ค.
logo ํด๋์ค์ ์ ์ฉ๋๋ CSS๋ฅผ ์ดํด๋ณด๋ฉด
header .logo {
height: 75px;
position: absolute;
top: 0;
bottom: 0;
left: 0;
margin: auto;
}
์ธ๋ก๋ 75px์ด๊ณ inner ํด๋์ค๋ฅผ ๋ถ๋ชจ ์์๋ก ๋ฌ์ inner๋ฅผ ๊ธฐ์ค์ผ๋ก
top:0, bottom:0, left:0์ margin: auto๋ก ํ์ฌ ๊ฐ์ด๋ฐ ์ ๋ ฌํ๊ณ ์ผ์ชฝ์ ๋ก๊ณ ๊ฐ ์์นํ ์ ์๋๋ก ํ๋ค.
CSS ํค๋ & inner
์ด๋ฒ์๋ header ์๋์์ ๊ตฌ์ฑํ๋ ๋๋ถ๋ถ ์์๋ฅผ inner class๋ก ๋ฌถ๋๋ค.
.inner {
width: 1100px;
margin: 0 auto;
position: relative;
}
inner ํด๋์ค์ css ์์ฑ์ ๋ณด๋ฉด
๊ฐ๋ก๋ 1100px, margin์ 0 auto๋ก ํ์ฌ ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ํ๊ณ
position์ relative๋ก ํ์ฌ ์์๋ฅผ ์๊ธฐ ์์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์นํ๋ค.
์์ ์์๋ค์ inner๋ฅผ ๊ธฐ์ค์ผ๋ก ์ก์ ๊ฒ์ด๋ค.
/* HEADER */
header {
background-color: #f6f5f0;
border-bottom: 1px solid #c8c8c8;
}
header > .inner {
/* 1๋จ inner๋ง */
height: 120px;
}
HEADER๋ผ๋ ์ฃผ์์ ๋ฌ์์ค์ ๋ค๋ฅธ ์ฌ๋์ด ๋ด๋ ์์๋ณผ ์ ์๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ header > .inner๋ 1๋จ inner๋ง์ ๋งํ๋ ๊ฒ์ด๋ค.
๋ฐ๋ก ์๋ inner ํด๋์ค๋ง ์ธ๋ก 120px์ ์ ์ฉํ๋ผ๋ ์ฝ๋์ด๋ค.
#f6f5f0์ ์์์ด 1๋จ์ ์ฐจ์งํ๋ค.
์คํ๋ฒ ์ค ํค๋ ์๋ธ๋ฉ๋ด
์คํ๋ฒ ์ค ํค๋ ์๋ธ๋ฉ๋ด html
<div class="sub-menu">
<ul class="menu">
<li>
<a href="/signin">Sign In</a>
</li>
<li>
<a href="javascript:void(0)">My Starbucks</a>
</li>
<li>
<a href="javascript:void(0)">Customer Service & Ideas</a>
</li>
<li>
<a href="javascript:void(0)">Find a Store</a>
</li>
</ul>
<div class="search">
<input type="text" />
<div class="material-icons">search</div>
</div>
</div>
ํค๋ ์๋ธ ๋ฉ๋ด์ html์ด๋ค.
์๋ธ๋ฉ๋ด๋ ์๋ ์ฌ์ง์ ๋ด๋นํ๋ค.
์ด ๋ถ๋ถ์ด ์๋ธ ๋ฉ๋ด์ด๋ค.
ul ํ๊ทธ๋ก li ํ๊ทธ๋ฅผ ๋ฌถ๊ณ li ํ๊ทธ๋ a ํ๊ทธ๋ฅผ ๋ฌถ์ด ๊ฐ๊ฐ์ ์๋ธ๋ฉ๋ด ์์ผ๋ก ์ด๋ ํ ์ ์๋๋ก ๋ง๋ ๊ฒ์ด๋ค.
aํ๊ทธ์์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค.
๋ก๊ทธ์ธํ๋ Sign In ์๋ธ๋ฉ๋ด๋ ๋ง๋ค์ด ๋ณผ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ฃผ๊ณ
๋๋จธ์ง ์๋ธ๋ฉ๋ด๋ ๋ง๋ค์ง ์์ ๊ฒ์ด๋ค.
ํ์ง๋ง ํํ์ด์ง๋ ๊ตฌํํด์ผ ํ๊ธฐ ๋๋ฌธ์ javascript:void(0)์ ๊ฒฝ๋ก์ ๋ฃ์ด์ฃผ์๋ค.
javascript:void(0)
a ํ๊ทธ์ ๋์์ธ์ฑ์ ์ด๋ฆฌ๋ฉด์ ๋งํฌ ๊ธฐ๋ฅ์ ์์ค ๊ฒ์ด๋ค.
javascript:void(0) ๋์ #์ ์ฌ์ฉํด๋ ๋๋ค.
์คํ๋ฒ ์ค ํค๋ ์๋ธ๋ฉ๋ด CSS
header .sub-menu {
position: absolute;
top: 10px;
right: 0;
display: flex;
}
์๋ธ๋ฉ๋ด๋ ๋ถ๋ชจ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์ ํ๋ค.
ํค๋์์ ์๋ก 10px, ์ค๋ฅธ์ชฝ์ผ๋ก 0๋งํผ ๋์ด๋๊ณ ์์น์ ์๋ธ๋ฉ๋ด๋ฅผ ๋๋๋ค.
display:flex๋ฅผ ํ์ฌ ์๋ธ๋ฉ๋ด๋ ์ํ์ ๋ ฌ์ ํ๋ค.
header .sub-menu ul.menu {
font-family: Arial, sans-serif;
display: flex;
}
header .sub-menu ul.menu li {
position: relative;
}
header .sub-menu ul.menu li::before {
content: "";
width: 1px;
height: 12px;
background-color: #e5e5e5;
position: absolute;
top: 0;
bottom: 0;
margin: auto 0;
}
header .sub-menu ul.menu li:first-child:before {
display: none;
}
header .sub-menu ul.menu li a {
font-size: 12px;
padding: 11px 16px;
display: block;
color: #656565;
}
header .sub-menu ul.menu li a:hover {
color: #000;
}
header .sub-menu ul.menu {
font-family: Arial, sans-serif;
display: flex;
}
๋๋๊ณ ๋์ ์ด ์นํ์ด์ง์ ๊ธฐ๋ณธ ํฐํธ๋ก ์ฌ์ฉํ์ง๋ง
์๋ธ๋ฉ๋ด๋ ๋๋๊ณ ๋๊ณผ ์ด์ธ๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ์ Arial ํฐํธ๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ display: flex๋ฅผ ํ์ฌ ์ํ์ ๋ ฌํ์๋ค.
header .sub-menu ul.menu li {
position: relative;
}
header .sub-menu ul.menu li::before {
content: "";
width: 1px;
height: 12px;
background-color: #e5e5e5;
position: absolute;
top: 0;
bottom: 0;
margin: auto 0;
}
li ํ๊ทธ๋ absolute๋ก ํ์ฌ ๋ถ๋ชจ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์นํ๋ค.
li ํ๊ทธ ์์ ์์ ๊ตฌ๋ถ์ ์ด ์๋ค. ๊ทธ๊ฒ์ ๋ง๋ค๊ธฐ ์ํด
content๋ ๊ณต๋ฐฑ์ผ๋ก ํด๋๊ณ , ๊ฐ๋ก 1px, ์ธ๋ก 12px์ง๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
์์ #e5e5e5๋ก ํ๊ณ
position์ ์๊ธฐ๋ก ๊ธฐ์ค์ ์ผ๋๋ค.
์์๋ 0๋งํผ ๊ณต๋ฐฑ์ ์ฃผ๊ณ ์์๋ ๊ฐ์ด๋ฐ๋ก ์ ๋ ฌ์ ์ฃผ์๋ค.
header .sub-menu ul.menu li:first-child:before {
display: none;
}
ํ์ง๋ง ์ฒซ๋ฒ์งธ ์์์๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์ด๋ฌํ ์์๋ฅผ ์ ์ฉํ์ง ์๊ฒ ํ๋ ค๊ณ
display:none์ ์ ์ฉํ๋ค.
Sign In ์์๋ ๊ตฌ๋ถ์ ์ด ์์ด์ก๋ค.
header .sub-menu ul.menu li a {
font-size: 12px;
padding: 11px 16px;
display: block;
color: #656565;
}
a ํ๊ทธ๋ ๊ธ์์ ์์ฑ์ ๋ด๋นํ๊ธฐ ๋๋ฌธ์
font-size๋ 12px, ๊ธ์ ์ธ๋ผ์ธ ์์์ 11px, 16px๋งํผ ์ฌ์ ๋ฅผ ์ฃผ๊ณ
display๋ฅผ ๋ธ๋ก์์๋ก ํ๋ค.
๊ธ์์์ #656565๋ก ํ๋ค.
header .sub-menu ul.menu li a:hover {
color: #000;
}
hover ์ ํ์๋ ์์๋ฅผ ๋ง์ฐ์ค์ ์ฌ๋ ธ์ ๋ ๋ฐ์ํ๋ ์์์ด๋ค.
๊ธ์ ์์ด #656565์๋๋ฐ #000 ์ฆ, ๊ฒ์์์ผ๋ก ๋ฐ๋๋ค.
์คํ๋ฒ ์ค ํค๋ ์๋ธ๋ฉ๋ด ๊ฒ์ html
<div class="search">
<input type="text" />
<div class="material-icons">search</div>
</div>
์๋ธ๋ฉ๋ด ์์ ์๋ ๊ฒ์ ์์ด์ฝ๊ณผ ๊ฒ์์ฐฝ์ ์์ธํ ์ดํด๋ณผ ๊ฒ์ด๋ค.
search๋ผ๋ ํด๋์ค๋ฅผ ์ ์ธํ๊ณ input type์ text๋ก ํ์ฌ ํ ์คํธ๋ฅผ ์ ๋ ฅํ ์ ์๋๋ก ์ค์ ํ๋ค.
material-icons ํด๋์ค๋ฅผ ์ ์ธํ๊ณ ์์ search๋ฅผ ๋ฃ์ผ๋ฉด
๊ฒ์ ์์ด์ฝ์ด ๋ง๋ค์ด์ง๋ค.
์ ์ฝ๋์ ์์ด์ฝ์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํด๋์ค ์์ ๊ธ์๋ฅผ ๊ณ์ ๋ฐ๊พธ๋ฉด ๊ตฌ๊ธ ์์ด์ฝ ์ฌ์ดํธ์์ ์๋
์์ด์ฝ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
์คํ๋ฒ ์ค ํค๋ ์๋ธ๋ฉ๋ด ๊ฒ์ CSS
header .sub-menu .search {
height: 34px;
position: relative;
}
search ํด๋์ค๋ ์ธ๋ก๋ก 34px, ํฌ์ง์ ์ ๋ถ๋ชจ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋ฆญ์ ํ์ ๋ ๊ธ์๋ฅผ ์ฝ์ ํ๊ธฐ์๋ ๋๋ฌด ํฌ๊ธฐ๊ฐ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ง์ฐ์ค ํด๋ฆญ์ ํ์ ๋ ๋ณํ๋ฅผ ๋ฐ๋ก css ์์ฑ์ ์ ๋ ฅํด์ฃผ์ด์ผ ํ๋ค.
header .sub-menu .search input {
width: 36px;
height: 34px;
padding: 4px 10px;
border: 1px solid #ccc;
box-sizing: border-box;
border-radius: 5px;
outline: none;
background-color: #fff;
color: #777;
font-size: 12px;
transition: width .4s;
}
input ์์๋ ๊ฐ๋ก 36px, ์ธ๋ก 34px์ด๊ณ
์ธ๋ผ์ธ ์์๋ padding์ ์ด์ฉํด ์์๋ 4px, ์ข์ฐ 10px ์ฌ๋ฐฑ์ ์ค๋ค.
ํ ๋๋ฆฌ๋ 1px solid๋ก ์์ #ccc๋ก ํ๋ค.
box-sizing์ border-box๋ก ํ์ฌ
border-box๊น์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐํ๋ค.
ํ ๋๋ฆฌ๋ radius 5px๋ก ์ค์ ํ์ฌ ๋ฅ๊ธ๊ฒ ๋ง๋ค์ด์ฃผ๊ณ
outline: border์ ๋ฐ๊นฅ ํ ๋๋ฆฌ๋ฅผ ์๋ฏธํ๋๋ฐ ์ด ๋ฐ๊นฅ ํ ๋๋ฆฌ๋ฅผ ์์ด ํ๋ค.
๋ฐฐ๊ฒฝ: #fff
ํตํฉ๊ฒ์์ด ๋์ฌ ๊ธ์จ ์์ #777๋ก ํ๋ค.
font-size๋ 12px๋ก ํ๋ค.
ํด๋ฆญ์ ํ์ ๋ ๊ฐ๋ก๊ฐ ๋ณํํ๋ ์๋๋ 0.4s๋ก ํ๋ค.
header .sub-menu .search input:focus {
width: 190px;
border-color: #669900;
}
ํด๋ฆญ์ ํ์ ๋ ๊ฐ๋ก ๊ธธ์ด๋ 190px๊น์ง ๋๋ฆฌ๊ณ
border ์์ #669900์ผ๋ก ๋ฐ๋๊ฒ ๋๋ค.
์คํ๋ฒ ์ค ํค๋ ์๋ธ๋ฉ๋ด ๊ฒ์ JS
const searchEl = document.querySelector('.search');
const searchInputEl = searchEl.querySelector('input');
searchEl.addEventListener('click', function () {
searchInputEl.focus();
});
searchInputEl.addEventListener('focus', function () {
searchEl.classList.add('focused');
searchInputEl.setAttribute('placeholder', 'ํตํฉ๊ฒ์');
});
searchInputEl.addEventListener('blur', function () {
searchEl.classList.remove('focused');
searchInputEl.setAttribute('placeholder', '');
});
JS๋ฅผ ์ด์ฉํ์ฌ ๊ธ์จ์ ์์ด์ฝ์ด ๊ฐ์ด ๋์ค๋ ๊ฒ์ ์์ ํ ์ ์๋ค.
์ผ๋จ searchEl์ด๋ผ๋ ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์์์ search ํด๋์ค๋ฅผ ์ฐพ๋๋ค.
searchInputEl์ searchEl์์ input ํ๊ทธ๋ฅผ ์ฐพ๋๋ค.
๋ฌธ์์์ ์ฐพ๊ฒ ๋๋ฉด ์ค๋ณต ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ searchEl๋ก ๋ฒ์๋ฅผ ์ค์ฌ๋๊ณ ์ฐพ์ ๊ฒ์ด๋ค.
addEventListener์ ์ด์ฉํ์ฌ ํด๋ฆญ์ ํ๋ฉด focus๋ฅผ ์ฐพ๊ฒ ํจ์๋ฅผ ๋ง๋ ๋ค.
classList.add๋ฅผ ์ด์ฉํ์ฌ
focus๊ฐ ๋ง์ถฐ์ง๋ฉด focused๋ฅผ ํด๋์ค ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ฉด ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด
์ฌ์ง 1์์๋ class๊ฐ search์์ง๋ง focus ์ํ์์๋ focused๊ฐ ์ถ๊ฐ๋ ๊ฑธ ๋ณผ ์ ์๋ค.
ํ์ง๋ง focus๊ฐ ์๋ง์ถฐ์ง ์ํ๋ blur๊ณ ๊ทธ ์ํ์์๋
classList.remove๋ฅผ ์ด์ฉํ์ฌ focused๊ฐ ์ถ๊ฐ๋ ๊ฒ์ด ์์ด์ง๋ค.
๊ทธ๋ฆฌ๊ณ focus ์ํฉ์์ ๋ณด์ด๋ ํตํฉ๊ฒ์๋ ๋ณด์ด์ง ์๊ฒ ๋๋ค.
์ด์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ๊ธ์์ ์์ด์ฝ์ด ์ค๋ณต๋์ด ๋ณด์๋ ํ์์ด ์์ด์ก๋ค.
๋ค์ ๊ธ์ ๋ฉ์ธ ๋ฉ๋ด์ ๋ํ ๊ธ์ด๋ค.
'๐ป Web Develop > โ๏ธ STARBUCKS ๊ฐ๋ฐ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
6. ์คํ๋ฒ ์ค ์์ ์ฌ๋ผ์ด๋ (0) | 2022.02.05 |
---|---|
5. ์คํ๋ฒ ์ค ์์ฐจ์ ์ ๋๋ฉ์ด์ (0) | 2022.02.04 |
4. ์คํ๋ฒ ์ค ์ ์ญ๋ฐฐ์ง(GSAP) (0) | 2022.02.04 |
3. ์คํ๋ฒ ์ค ๋ฉ์ธ๋ฉ๋ด (0) | 2022.02.03 |
1. ๊ฐ๋ฐ ์์ ๋ฐ ๊ธฐ๋ณธ ์ค์ css ์ด๊ธฐํ, ํฐํธ ์ค์ , ์์ด์ฝ ์ค์ (0) | 2022.02.02 |