whatisthis?
Project. ๋ฐ์ํ ํ์ด์ง - (2) landing page ๋ณธ๋ฌธ
(2) landing page
๐ HTML + CSS ์์ฑ
- ๋ด๊ฐ ์ง์ ์ฝ๋ฉํด๋ณธ ๊ฒ ๐ป
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Final Project</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="grid.min.css" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<section class="landing">
<div class="container">
<div class="row">
<div class="col-12">
<h1 class="landing-title">
Change your carrer,<br />Change your life
</h1>
<p class="landing-desc">
Get ahead with expert-led training in <br />
frontend development
</p>
<div class="button-group">
<a href="#" class="fill-button"> Apply now </a>
<a href="#" class="fill-button inverted"> Learn more </a>
</div>
</div>
</div>
</div>
</section>
</body>
</html>
style.css
/* Landing Page */
.landing {
width: 100%;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
text-align: center;
background-color: #fdded8;
}
.landing-title {
color: #2b292d;
font-size: 40px;
line-height: 1;
letter-spacing: -0.05em;
margin-bottom: 24px;
}
.landing-desc {
margin-bottom: 24px;
}
.fill-button {
font-size: 15px;
line-height: 1.6;
letter-spacing: -0.05em;
padding: 12px 34px;
background-color: #3040c4;
color: #fff;
border-radius: 2px;
margin: 0 8px;
}
.fill-button.inverted {
background-color: #fff;
color: #3040c4;
}
@media screen and (min-width: 768px) {
.landing-title {
font-size: 70px;
line-height: 1.02857143;
margin-bottom: 32px;
}
.landing-desc {
margin-bottom: 32px;
font-size: 22px;
}
.fill-button {
padding: 14px 38px;
font-size: 18px;
line-height: 1.5555555;
}
}
(์ง๋์๊ฐ ์์ฑํ๋ reset CSS์ grid custom๋ถ๋ถ์ ์๋ตํ์.)
๐ ์ด์ํ์ + ์์ ๋ก๊ทธ
1. ๋ฒํผ ๊นจ์ง ํ์
์ด๋ฐ์์ผ๋ก ์ฐฝ์ด ์์์ง๋ฉด ๋ฒํผ์ด ์ ๋ ๊ฒ ๋๋๊ฐ ๋๋ค.
์๋ง๋ button-group์ ๋ฌด์กฐ๊ฑด ํ์ค๋ก ๋์ค๊ฒ ํด์ผํ๋๋ฐ
์ด๊ฒ aํ๊ทธ, ์ฆ ์ธ๋ผ์ธ ์์๋ผ์ ๊ทธ๋ฐ๊ฐ๋ณด๋ค.
์ํผ ๋๋ display: blockํด์ฃผ๊ณ ,
๊ฐ๋ก์ ๋ ฌ์ ์ํด flex๋ฅผ ์ด์ฉํด์ ์์ ํ๋ค.
.button-group {
display: flex;
justify-content: center;
}
.fill-button {
display: block;
font-size: 15px;
line-height: 1.6;
letter-spacing: -0.05em;
padding: 12px 34px;
background-color: #3040c4;
color: #fff;
border-radius: 2px;
}
.fill-button:first-child {
margin-right: 8px;
}
๋ํ margin์ ๋ ๋ฒํผ ๋๋ค margin-right์ ์ฃผ๋ฉด ๊ฐ์ด๋ฐ์ ๋ ฌ์ด ์๋๋ฏ๋ก
์ฒซ๋ฒ์งธ ๋ฒํผ๋ง ์ฃผ๊ธฐ ์ํด :first-child๋ฅผ ์ฌ์ฉํ๋ค.
์ด ๋ฐฉ๋ฒ ๋ง๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ ๊ฐ๊ธด ํ๋ฐ .. ์ฐ์ ์!
์ด๋ฐ์์ผ๋ก ์ด์ ๋ฒํผ์ด ๊นจ์ง์ง๋ ์๊ฒ ๋์๋ค. ๋์ด์ค ๐
์ด๊ฑธ ํด๊ฒฐํ๋๊น ๋ญ๊ฐ ์ด์ํ๋ ๋ ์ด์์๋ ๋ค ๊ณ ์ณ์ก๋ค.
๊ทธ๋ฅ ๋ชจ๋ ๊ฒ ๋ค aํ๊ทธ๊ฐ ์ธ๋ผ์ธ์์์ธ๋ฐ ์ต์ง๋ก ํจ๋ฉ์ ์ค์ ์๊ธด ์ผ์ด์๋ค.
(๋ฏธ์ํด ๋ฒํผ์.. ๐)
์ต์ข ์์ ํ style.css ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
* {
box-sizing: border-box;
margin: 0;
}
body {
font-family: "DM Sans", sans-serif;
width: 100%;
height: 100vh;
}
/* Reset CSS */
a {
text-decoration: none;
color: inherit;
}
button,
input,
textarea {
font-family: "DM Sans", sans-serif;
font-size: 16px;
}
button:focus,
button:active,
input:focus,
input:active,
textarea:focus,
textarea:active {
outline: none;
box-shadow: none;
}
ul,
ol,
li {
list-style-type: none;
padding-left: 0;
margin-left: 0;
}
p {
font-size: 16px;
line-height: 1.5;
color: #2b292d;
letter-spacing: 0.01em;
}
/* >= 768px (Desktop) */
@media screen and (min-width: 768px) {
p {
font-size: 22px;
line-height: 1.36363636;
}
}
/* Custom Grid System - Fix container Width */
@media screen and (min-width: 1200px) {
.container {
max-width: 960px !important;
}
}
/* Landing Page */
.landing {
width: 100%;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
text-align: center;
background-color: #fdded8;
}
.landing-title {
color: #2b292d;
font-size: 40px;
line-height: 1;
letter-spacing: -0.05em;
margin-bottom: 24px;
}
.landing-desc {
margin-bottom: 24px;
}
.button-group {
display: flex;
justify-content: center;
}
.fill-button {
display: block;
font-size: 15px;
line-height: 1.6;
letter-spacing: -0.05em;
padding: 12px 34px;
background-color: #3040c4;
color: #fff;
border-radius: 2px;
}
.fill-button:first-child {
margin-right: 8px;
}
.fill-button.inverted {
background-color: #fff;
color: #3040c4;
}
@media screen and (min-width: 768px) {
.landing-title {
font-size: 70px;
line-height: 1.02857143;
margin-bottom: 32px;
}
.landing-desc {
margin-bottom: 32px;
font-size: 22px;
}
.fill-button {
padding: 14px 38px;
font-size: 18px;
line-height: 1.5555555;
}
}
+) media query๋ถ๋ถ์ ํ๋๋ก ํฉ์น ๊น ์๊ฐ์ค์ด๊ธด ํ๋ฐ ๊ฐ ํ์ด์ง๋ง๋ค (์ง๊ธ์ landing์ด๊ณ )
๋ค๋ฅด๊ฒ ์ค์ ํ๋ฉด ํด๋์ค๋ ๋ญ๋ ํท๊ฐ๋ฆด ๊ฒ ๊ฐ์์ ์ํผ reset CSS ๋ถ๋ถ์ ํ ๊ฒ๊ณผ ๊ตฌ๋ถํด๋๊ธด ํ๋ค.
๐ ๊ฐ์๋ด์ฉ ์ถ๊ฐ + ์์
- ๋ณ๊ฒฝ 1.
button์ padding์ ์ฃผ๊ธฐ์ ์ ๋งคํ ์ํฉ์.
(์์ ๋ด๋ถ ํ ์คํธ๊ฐ ๊ธธ์ด๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ)
๋ฐ๋ผ์, width์ height๋ฅผ ์ค์ ํด์ฃผ์.
์ถ๊ฐ๋ก, ๊ฐ์ด๋ฐ์ ๋ ฌ ๊ฒธ width์ค์ ์ ํ๊ธฐ์ํด (inline์ด๋ฉด width์ค์ ๋ชปํ๋๊น)
display: inline-flex๋ฅผ ํด์ฃผ์.
(๋ ๋งจ์ฒ์์ display:block์ ์๊ฐํ์๋ค.)
>> ๋ฒํผ๋ผ๋ฆฌ inline ์์์ด ๋๋๋ก inline-flex๋ฅผ ํด์ค๊ฒ์.
๐ป display: flex
div1 |
div2 |
๐ป display:inline-flex
inline-flex | inline-flex |
.fill-button {
display: inline-flex;
justify-content: center;
align-items: center;
width: 140px;
height: 48px;
border-radius: 2px;
color: #fff;
background-color: #3040c4;
font-size: 15px;
line-height: 1.6;
font-weight: 700;
letter-spacing: -0.05em;
}
์ ํด๋์ค๋ ํ์ด์ง ๋ด ๋ชจ๋ ๋ฒํผ์ ์น ํ ๋ ์ฐ๋ฏ๋ก
css ์๋จ์ ๋ฐ๋ก ๋นผ๋๋๊ฒ ์ข์.
๋ํ, button-group์ ๊ฒฝ์ฐ์
ํ์ด์ง ์์ button-group์ด ์ฌ๋ฌ๊ฐ ์์ ์ ์์ผ๋
์ ํ์๋ก ํ์คํ๊ฒ ํ์ฌ ์ ๋๋ค.
.landing .button-group {
display: flex;
justify-content: center;
align-items: center;
}
/* ์๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก */
.landing .button-group .fill-button:first-child {
margin-right: 8px;
}
- ๋ณ๊ฒฝ 2.
landing์ width์ height๋ฅผ 100%์ 100vh๋ก ๊ฐ๊ฐ ๋ฐ๋ก ์ค์ ํด์ค์ผํจ.
(๋ด๊ฐ ์์ฑํ ์ฝ๋์๋ ๊ทธ๋ฅ body์๋ง ์ค์ ํ๊ณ , .landing์ display:flex๋ฅผ ๋จน์ฌ์คฌ์)
์ง๊ธ์ ์๋ํ์ง๋ง, ์ถํ์ ์๋๋ก ํ์ด์ง๋ค์ ์ถ๊ฐํ๋ฉด ์ด๋ป๊ฒ ํ ๋..
>> ์์๋ค์ ๊ฐ์ธ๋ landing-content๋ฅผ ๋ง๋ค์.
<section class="landing">
<div class="container">
<div class="row">
<div class="col-12">
<div class="landing-content">
<h1 class="landing-title">
Change your carrer,<br />Change your life
</h1>
<p class="landing-desc">
Get ahead with expert-led training in <br />
frontend development
</p>
<div class="button-group">
<a href="#" class="fill-button"> Apply now </a>
<a href="#" class="fill-button inverted"> Learn more </a>
</div>
</div>
</div>
</div>
</div>
</section>
์ง๊ธ landing์์ container>row>col-12 ์ด๋ฐ์์ผ๋ก ์๋๋ฐ,
์ด ํด๋์ค๋ค์ grid ์์ฒด์ ํด๋์ค๋ผ์ ์๋ค๋ฅผ ์กฐ์ํด์ฃผ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
๋ฐ๋ผ์, h1, , div(button grp)์ ๋ฌถ์ด์ฃผ๋ ํฐ ์ปจํ ์ด๋๊ฒฉ์ธ landing-content๋ฅผ ๋ง๋ค๊ณ ,
์๋์ ๊ฐ์ด ์คํ์ผ์ ์ ์ฉ์์ผ์ฃผ์.
.landing-content {
display: flex;
flex-direction: column;
justify-content: center;
width: 100%;
height: 100vh;
}
๋ด๊ฐ ์ด์ ์ ํ๋ ๊ฒ์? ๐ป
.landing {
width: 100%;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
text-align: center;
background-color: #fdded8;
}
landing์๋ค๊ฐ flex๋ฅผ ์ค์ ํ์๋ค. (=section ์ ์ฒด์ flex ๋จน์ธ ์ )
์ด์ , section์์ ๋ชจ๋ ์์๋ฅผ ๊ฐ์ธ๋ div์ธ landing-content์ flex๋ฅผ ์ค์ ํ๋ฉด
- ๋ณ๊ฒฝ 3
๋ฏธ๋์ด์ฟผ๋ฆฌ๋ถ๋ถ ํฉ์น๊ธฐ.
(์ด์ ์ reset CSS ์์ ์์ฑํ๋ ๋ฐ์ํ >> pํ๊ทธ typography ๊ด๋ จ ์คํ์ผ๊ณผ ํฉ์ณ.)
- ๋จ, ์ฃผ์์ผ๋ก ๊ฐ ๋ถ๋ถ์ ์๊ธฐ์ฝ๊ฒ
/* landing */ ๊ณผ ๊ฐ์ด ๋ํ๋ด๊ธฐ.
@media screen and (min-width: 768px) {
p {
font-size: 22px;
line-height: 1.36363636;
}
.fill-button {
width: 160px;
height: 56px;
font-size: 18px;
line-height: 1.5555555;
}
/* Landing */
.landing-title {
font-size: 70px;
line-height: 1.02857143;
margin-bottom: 32px;
}
.landing-desc {
margin-bottom: 32px;
}
.landing .button-group .fill-button:first-child {
margin-right: 16px;
}
}
+) ์ถ๊ฐ
width >= 768 ์ผ๋, ์ฆ Desktop์ผ ๋๋
height๊ฐ 100vh์ผ ํ์๋ ์๊ณ ,
์ ๋นํ ํจ๋ฉ์ ๋จน์ฌ์ ์ค์ฌ๋ฒ๋ฆฌ๊ฒ ๋์ด์๋ค.
(๋์์ธ ์์ ์ฐธ๊ณ )
์ฐ๋ฆฌ๊ฐ ์์์ landing-content๋ผ๋ div์ width: 100%, height: 100vh๋ฅผ ๋จน์ธ ์ํ์ด๋ฏ๋ก
์ฌ๊ธฐ์ height๋ง ์กฐ์ ํด์ฃผ๊ณ , padding์ ๋ค์ ์ค์ ํด์ฃผ์.
.landing-content {
height: auto;
padding: 120px 255px;
}
๐ก ๋ญ๊ฐ ์ด๋ฏธ ์ค์ ๋ ์์ฑ์ ์์ ๊ณ ์ ํ ๋ auto๋ฅผ ์ฃผ๋ฉด ๋๋ค.
+) ์ถ๊ฐ ์ดํํธ - hover
(transiton๋ ์ค)
.fill-button:hover {
opacity: 0.5;
}
.fill-button {
/* ์ดํ ์๋ต */
transition: opacity 300ms ease-in-out;
}
๐ป Design File
๐ปReference Lecture
'PROJECT > WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Project. ๋ฐ์ํ ํ์ด์ง - (4) Program Section (0) | 2022.03.02 |
---|---|
Project. ๋ฐ์ํ ํ์ด์ง - (3) Service Section (0) | 2022.03.02 |
Project. ๋ฐ์ํ ํ์ด์ง - (1) ํ๊ฒฝ setting (0) | 2022.03.02 |
LX Z:IN Interior Sheets Project ๋์์ธ draft (2/24๊ธฐ์ค) (0) | 2022.02.24 |
[project] Rainy-player - ์งํ์ฌํญ ๊ธฐ๋ก (0) | 2022.02.22 |