1920px 프레임을 기준으로 레이아웃을 잡았다.
@import url(//spoqa.github.io/spoqa-han-sans/css/SpoqaHanSansNeo.css);
body {
margin: 0;
padding: 0;
font-family: "Spoqa Han Sans Neo", "sans-serif";
}
a {
text-decoration: none;
}
.navbar {
margin: 0 auto;
}
.navbar {
/* 수직 중앙 정렬하기 */
display: flex;
align-items: center;
justify-content: space-around;
}
.navbar img {
width: auto;
height: 25px;
object-fit: cover;
}
.nav-link {
margin: 10px;
font-size: 12px;
font-weight: 500;
}
#btn-contact {
color: #333d4b;
}
#btn-started {
border-radius: 4px;
background-color: #0e7159;
color: white;
padding: 0.5em 1.5em;
}
/* header */
#header-background-img {
width: 100%;
height: 100%;
filter: brightness(0.2);
position: relative;
}
.inner {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
color: white;
}
.inner h1 {
font-size: 3em;
}
.inner a {
color: white;
font-size: 1em;
font-weight: 200;
}
/* main */
main {
margin: 5.5em 0;
}
section {
text-align: center;
}
.title,
.btn-page-move {
color: #0e7159;
}
.title {
font-size: 2.5em;
}
.btn-page-move {
font-weight: 600;
}
.service,
#app-service,
#service-price {
margin-bottom: 9em !important;
.contents {
display: grid;
grid-template-columns: repeat(3, 270px);
place-content: center;
column-gap: 2.5em;
row-gap: 2.5em;
margin: 1em auto;
}
.service-contents {
text-align: left;
}
.service-contents img {
width: 270px;
margin-bottom: 1em;
}
.contents-title {
font-size: 1.2em;
font-weight: 600;
color: #333d4b;
width: 10em;
}
.service-contents p {
color: #6b7684;
font-size: 0.9em;
}
#section2 div,
#section3 div {
width: 100%;
}
#section3 {
margin-top: 4em;
margin-bottom: 4em;
}
.number {
font-size: 1.4em;
font-weight: 400;
color: #0e7159;
margin-bottom: 0.5em;
}
#app-service {
margin: 0 auto;
}
.app-service-contents {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-around;
text-align: left;
margin-bottom: 7em;
}
.app-service-contents img {
width: 300px;
}
.app-service-explain {
width: 300px;
}
.app-service-title {
font-size: 1em;
font-weight: 600;
color: #0e7159;
margin-bottom: 0.8em;
}
.app-service-subtitle {
font-size: 1.8em;
font-weight: 600;
color: #333d4b;
}
.app-service-explain p {
color: #6b7684;
font-size: 0.9em;
line-height: 1.5em;
}
#service-price {
margin: 0 5em;
}
.service-price {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
text-align: left;
margin-bottom: 1.7em;
}
.price-box {
width: 270px;
height: 100%;
background: #f2f3f4;
border-radius: 16px;
margin: 0 1em;
padding: 1em;
}
.price-title {
font-size: 1.2em;
font-weight: 500;
color: #333d4b;
}
.price-explain,
.pricing-policy {
color: #6b7684;
font-size: 0.9em;
}
.price {
color: #0e7159;
font-size: 1.8em;
font-weight: 600;
margin-bottom: -0.2em;
}
.price-box > button {
width: 100%;
background: #0e7159;
color: #fff;
border: none;
border-radius: 8px;
margin-top: 0.5em;
padding: 1em 3em;
}
#review {
overflow: hidden;
position: relative;
}
.review-contents {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
text-align: left;
margin-inline-start: -7em;
margin-inline-end: -7em;
margin-bottom: 1.7em;
}
.linear-gradient {
width: 100px;
height: 300px;
}
.left-box {
background: linear-gradient(90deg, #fff, #ffffff5b);
position: absolute;
top: 130px;
left: 0;
}
.right-box {
background: linear-gradient(270deg, #fff, #ffffff5b);
position: absolute;
top: 130px;
right: 0;
}
.review-box {
width: 600px;
height: 230px;
background: #f2f3f4;
border-radius: 16px;
overflow: hidden;
margin: 0 1em;
padding: 2em;
}
.profile {
display: flex;
flex-direction: row;
align-items: center;
}
.profile-img {
width: 50px;
height: 50px;
margin-right: 1em;
}
.user-name {
color: #333d4b;
font-size: 1em;
font-weight: 600;
margin: 0;
}
.review-title {
color: #6b7684;
font-size: 1em;
margin: 0;
}
.review {
color: #6b7684;
line-height: 2em;
margin-bottom: 0;
}
#started {
background-color: #0e7159;
height: 500px;
position: relative;
}
#started > div {
/* 수직 중앙 정렬하기 */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
#started h1 {
color: white;
font-size: 3em;
}
#btn-bottom-started {
background-color: white;
border: none;
border-radius: 8px;
color: #0e7159;
font-size: 1em;
font-weight: 600;
padding: 1em 1.5em;
}
footer {
padding: 2em 20em;
}
#footer > div {
color: #333d4b;
font-size: 1em;
font-weight: 600;
}
#footer > p {
color: #6b7684;
font-size: 0.8em;
line-height: 1.8em;
}
@media screen and (max-width: 1024px) {
.inner {
transform: translate(-50%, -150%);
}
.inner h1 {
font-size: 2em;
}
.title {
font-size: 2em;
}
.contents {
display: grid;
grid-template-columns: repeat(2, 270px);
}
.app-service-contents {
flex-flow: column nowrap;
align-items: center;
text-align: center;
}
.reverse {
flex-direction: column-reverse;
}
.alarm-img {
display: none;
visibility: hidden;
}
.service-price {
display: grid;
grid-template-columns: repeat(2, 1fr);
place-content: center;
column-gap: 3em;
row-gap: 3em;
margin: 3em auto;
}
#started h1 {
font-size: 2em;
}
.review-contents {
margin-inline-start: -20em;
margin-inline-end: -20em;
}
.left-box,
.right-box {
background: #ffffff00;
}
footer {
padding: 2em 10em;
}
}
@media screen and (max-width: 480px) {
.inner {
transform: translate(-50%, -260%);
}
.inner h1 {
font-size: 1.3em;
}
#btn-sloving {
display: none;
}
.title {
font-size: 1.2em;
margin-bottom: 2em;
}
.contents {
display: grid;
grid-template-columns: repeat(1, 270px);
}
.service-price {
display: grid;
grid-template-columns: 1fr;
}
#started h1 {
font-size: 2em;
}
footer {
padding: 2em 2em;
}
}
용량 한계로 화질이 낮음
CSS 작업을 하면서 HTML 태그를 수정해야 할 부분 꽤 있었다. 다시 한번 더 레이아웃의 중요성을 깨달았다. 네이밍은 너무 어려운 것 같다. 유지보수 측면에서 어떻게 네이밍해야 효율적인지 모르겠다...😢
em
단위와 같은 CSS에서 제공해 주는 반응형 속성을 사용하여 코드를 작성하였기에 media query를 사용할 작업할 부분이 적었다. Flexbox와 Grid를 이용하여 레이아웃을 구성하였는데 생각대로 되지 않아 골머리를 썼다. 좌, 우 여백을 동일하게 적용하여 Flexbox와 Grid를 어떻게 배치할 수 있는지 아직 감이 잘 안 잡힌다. 솔직히 말하면, 코드를 작성할 때, 소위 말하는 야매로 보이는 것만 비슷하게 코드를 짰다. 이런 방식 말고 어떤 상황에서든 동일하게 적용될 수 있게 레이아웃을 구성할 수 있는지 알고 싶다. 조금 더 레이아웃 구성에 대해 공부가 필요하다. 여러 웹사이트(네이버, 유튜브, 에이비엔비..등)의 구조를 하면 정리해 보아야겠다.
본 후기는 유데미-스나이퍼팩토리 10주 완성 프로젝트캠프 학습 일지 후기로 작성 되었습니다.