Dragonball Online Goku Hand
본문 바로가기
사이트 제작하기/SITE만들기

[사이트 제작] 헤더 유형부터 푸터 유형까지 : 반응형 포함

by 별의 코비 2022. 9. 14.
728x90

🧷 사이트를 제작해보자! 근데 이제 반응형을 곁들인...^^ [💁🏻‍♀️ 쉽지 않다편]

헤더, 슬라이드, 이미지, 이미지텍스트, 카드, 배너, 텍스트, 푸터 유형으로 이루어진 사이트를 만들어봅시다. 마무리는 역시나 막시나 반응형까지 해주어야 완성이겠죠?

함께 만들어 보아요❗️


🔨 제작 방법

➰ Figma로 구성 짜기

figma를 통해서 사이트를 어떤 유형으로 구성할 것인지, 유형마다 어떤 식으로 구성할 것인지를 구체적으로 짜주어야 합니다. (그래야 나중에 코딩할 때 수월하겠죠?🥹)



📋 헤더 유형

➰ vscode를 통해 코딩해주기! : html편

사이트 헤더 부분을 어떻게 구성해야할지 틀을 짜주어야 합니다.

코드 보기
<header id="headerType" class="header__wrap nexon">
    <div class="header__inner">
        <div class="header__logo">
            <a href="#">MOMENTO <em>store</em></a>
        </div>
        <div class="menu__bar">
            <div class="menubar__icon"></div>
        </div>
        <div class="header__menu">
            <ul>
                <li><a href="#sliderType">main</a></li>
                <li><a href="#imageType">best</a></li>
                <li><a href="#imageTextType">codi</a></li>
                <li><a href="#cardType">product</a></li>
                <li><a href="#bannerType">brand</a></li>
                <li><a href="#textType">SNS</a></li>
            </ul>
        </div>
        <div class="header__member">
            <a href="#">로그인</a>
        </div>
        <div class="header__ham">
            <span></span>
            <span></span>
            <span></span>
        </div>
        <!-- <a href="" class="header__inner_toogleBtn">
            <i class="fas fa-bars"></i>
        </a> -->
    </div>
</header>

➰ vscode를 통해 코딩해주기! : CSS편

헤더 부분의 CSS입니다. 햄버거메뉴가 핵심입니다.

코드 보기
/* headerType */
.header__inner {
    width: 100%;
    height: 70px;
    display: flex;
    /* flex-wrap: wrap; */
    align-items: center;
    justify-content: space-between;
    padding: 0 20px;
    box-sizing: border-box;
    border-bottom: 1px solid #ccc;
    position: fixed;
    left: 0;
    top: 0;
    z-index: 10000;
    background: #fff;
    backdrop-filter: blur(10px);
}
.header__logo {
    width: 20%;
    font-size: 30px;
    font-weight: 700;
    text-transform: uppercase;
}
.header__logo em {
    font-size: 18px;
    font-weight: 400;
    color: #999;
}
.header__menu {
    width: 60%;
    /* background: #fff; */
    text-align: center;
}
.header__menu li {
    display: inline;
}
.header__menu li a {
    padding: 12px 30px;
    margin: 0 10px;
    transition: background-color 0.3s;
}
.header__menu li a:hover {
    background-color: #e4b88e81;
    color: #fff;
    border-radius: 5px;
}
.header__menu ul li.active a {
    background-color: #e4b78e;
    color: #fff;
    border-radius: 5px;
}
.header__member {
    width: 20%;
    text-align: right;
}
.header__member a {
    font-size: 16px;
    border: 1px solid #000;
    padding: 10px 30px;
    border-radius: 50px;
    transition: all 0.3s;
}
.header__member a:hover {
    background-color: #000;
    color: #fff;
}
.header__ham {
    position: absolute;
    right: 16px;
    top: 10px;
    z-index: 1000;
    width: 50px;
    height: 50px;
    /* background: blue; */
    display: none;
    cursor: pointer;
}
.header__ham span {
    display: block;
    background: #000;
    width: 30px;
    height: 2px;
    border-radius: 3px;
    margin-left: 10px;
    margin-top: 5px;
    transition: 0.25s margin 0.25s, 0.25s transform;
}
.header__ham span:nth-child(1){
    margin-top: 17px;
}
.header__ham.active span {
    /* 가운데 0.25s는 딜레이 */
    transition: 0.25s margin, 0.25s transform 0.25s
}
.header__ham.active span:nth-child(1){
    margin-top: 25px;
    margin-bottom: -7px;
    transform: rotate(45deg);
}
.header__ham.active span:nth-child(2){
    transform: rotate(45deg);
}
.header__ham.active span:nth-child(3){
    margin-top:-2px;
    transform: rotate(135deg);
}

➰ vscode를 통해 코딩해주기! : CSS 미디어쿼리편 (반응형)

반응형일 때 CSS는 햄버거 메뉴 클릭시 오른쪽에 나타나는 메뉴바의 스타일과 효과가 핵심입니다.

코드 보기
/* 미디어쿼리 */
@media (max-width: 1300px) {
    .header__menu {
        position: fixed;
        right: -100%;
        top: 69px;
        background: #fff;
        width: 60%;
        height: 100vh;
        padding: 20px;
        text-align: right;
        transition: right 0.4s ease-in;
    }
    .header__menu ul li {
        display: block;
        margin: 20px;
    }
    .header__menu ul li a {
        padding: 10px;
        white-space: nowrap;
    }
    .header__menu.active {
        right: 0;
    }
    .header_logo {
        width: 50%;
    }
    .header__member {
        margin-right: 50px;
        width: 30%;
        font-size: 10px;
    }
    .header__ham {
        display: block;
    }
}

➰ vscode를 통해 코딩해주기! : JS편

주석을 확인해주세요!

코드 보기
//헤더부분 반응형
const btnHam = document.querySelector(".header__ham");
const btnMenu = document.querySelector(".header__menu");
const btnMenuList = btnMenu.querySelectorAll("ul li a");

//햄버거 메뉴 클릭시, 햄버거메뉴 액티브 할거야(css참고)! 메뉴바도 액티브 추가! 문서 픽스해!
btnHam.addEventListener("click", () => {
    btnHam.classList.toggle("active");
    btnMenu.classList.toggle("active");
    document.body.classList.toggle("fixed");
});
//메뉴 리스트 클릭시, 문서 픽스 멈춰(클릭한 곳으로 이동)!, 메뉴바 없어져!, 햄메뉴도 돌아와!
btnMenuList.forEach((list) => {
        list.addEventListener("click", () => {
            document.body.classList.remove("fixed");
            btnMenu.classList.remove("active");
            btnHam.classList.remove("active");
        });
    });
//작은 화면에서 햄버거 메뉴를 켜놓고 화면의 사이즈를 최대로 했을 때, 햄버거 버튼은 사라지지만 스크롤이 안됨(화면 멈춤 = 햄버거 메뉴 초기화 안된 것)
//버그 수정 
window.addEventListener("resize", () =>{
    let width = window.innerWidth;
    //console.log(width)
    if(width > 1300){
        //햄버거 메뉴 초기화
        document.body.classList.remove("fixed");
        btnMenu.classList.remove("active");
        btnHam.classList.remove("active");
    }
});

//스크롤 됐을 때
window.addEventListener("scroll", () => {
    let scrollTop = window.pageYOffset || window.scrollY || document.documentElement.scrollTop;
    //forEach
    document.querySelectorAll(".items").forEach((element, index) => {
        if (scrollTop >= element.offsetTop - 500) {
            document.querySelectorAll(".header__menu li").forEach(li => {
                //메뉴바 active 모두 없애기
                li.classList.remove("active")
            });
            document.querySelector(".header__menu li:nth-child(" + (index + 1) + ")").classList.add("active")
        }
    })
});

// 스크롤 이동 // 화면 부드럽게 넘겨짐
document.querySelectorAll("a").forEach(li => {
    li.addEventListener("click", (e) => {
        e.preventDefault();
        document.querySelector(li.getAttribute("href")).scrollIntoView({
            behavior: "smooth"  // 이동 부드럽게
        });
    });
});

📋 슬라이드 유형

➰ vscode를 통해 코딩해주기! : html편

레이아웃을 다 설정해줬다면 코딩을 해봅시다!
html의 body 부분에 레이아웃 구역을 정해줍니다.
슬라이드 효과를 넣어야 해서 swiper라는 사이트에서 원하는 슬라이드 효과를 가진 형식을 가져와 적용했습니다.

코드 보기
<section id="sliderType" class="slider__wrap items">
    <h2 class="blind">슬라이드 영역</h2>
    <div class="slider__inner">
        <!-- <div class="slider">
            <div class="slider__img">
                <div class="desc container">
                    <span>STORE</span>
                    <h3>MOMENTO’ s style</h3>
                    <p>
                        #모멘토는 스페인어로 “순간" 이라는 뜻으로,<br>
                        당신의 아름다운 순간을 선물해드립니다.
                    </p>
                    <div class="btn">
                        <a href="#">자세히보기</a>
                        <a href="#" class="black">쇼핑가기</a>
                    </div>
                </div>
            </div>
            <div class="slider__arrow">
                <a href="#" class="left"><span class="ir">이전 이미지</span></a>
                <a href="#" class="right"><span class="ir">다음 이미지</span></a>
            </div>
            <div class="slider__dot">
                <a href="#" class="dot active"><span class="ir">1</span></a>
                <a href="#" class="dot"><span class="ir">2</span></a>
                <a href="#" class="dot"><span class="ir">3</span></a>
                <a href="#" class="play"><span class="ir">플레이</span></a>
                <a href="#" class="stop"><span class="ir">정지</span></a>
            </div>
        </div> -->
        <!-- 슬라이드 효과를 주기 위해 swiper라는 페이지에서 비슷한 슬라이드 형식 가져옴 -->
        <div class="swiper mySwiper">
            <div class="swiper-wrapper">
                <div class="swiper-slide">
                    <div class="desc">
                        <span>STORE</span>
                        <h3>MOMENTO’ s style</h3>
                        <p>
                            #모멘토는 스페인어로 “순간" 이라는 뜻으로,<br>
                            당신의 아름다운 순간을 선물해드립니다.
                        </p>
                        <div class="btn">
                            <a href="#">자세히보기</a>
                            <a href="#" class="black">쇼핑가기</a>
                        </div>
                    </div>
                </div>
                <div class="swiper-slide">
                    <div class="desc">
                        <span>STORE</span>
                        <h3>MOMENTO’ s style</h3>
                        <p>
                            #모멘토는 스페인어로 “순간" 이라는 뜻으로,<br>
                            당신의 아름다운 순간을 선물해드립니다.
                        </p>
                        <div class="btn">
                            <a href="#">자세히보기</a>
                            <a href="#" class="black">쇼핑가기</a>
                        </div>
                    </div>
                </div>
                <div class="swiper-slide">
                    <div class="desc">
                        <span>STORE</span>
                        <h3>MOMENTO’ s style</h3>
                        <p>
                            #모멘토는 스페인어로 “순간" 이라는 뜻으로,<br>
                            당신의 아름다운 순간을 선물해드립니다.
                        </p>
                        <div class="btn">
                            <a href="#">자세히보기</a>
                            <a href="#" class="black">쇼핑가기</a>
                        </div>
                    </div>
                </div>
            </div>
            <div class="swiper-pagination"></div>
            <div class="swiper-button-next"></div>
            <div class="swiper-button-prev"></div>
        </div>
    </div>
</section>

➰ vscode를 통해 코딩해주기! : CSS편

slider의 효과와 swiper의 효과가 겹치는 부분이 있어 안 먹힐 때가 종종 있는데 그럴 때 당황하지말고 먼저 먹혔으면 하는 부분에 !important를 사용해주면 됩니다.

코드 보기
.slider__inner {
    /* width: 100%; */
    margin-top: 40px;
}
.slider {position: relative;}
.slider__img {
    /* width: 100%; */
}
.slider__img .desc {
    width: 1160px;
    margin: 0 auto;
    padding: 100px 20px;
}
.slider__img .desc span {
    font-size: 16px;
    background-color: #fff;
    padding: 1px 14px 0 14px;
    text-transform: uppercase;
    margin-bottom: 10px;
    display: inline-block;
    border-radius: 30px;
}
.slider__img .desc h3 {
    font-size: 110px;
    font-weight: 300;
    line-height: 1;
    color: #fff;
    text-transform: uppercase;
    margin-bottom: 16px;
    margin-left: -8px;
}
.slider__img .desc p {
    font-size: 20px;
    font-weight: 300;
    color: #fff;
    line-height: 1.5;
    margin-bottom: 130px;
}
.slider__img .desc .btn {}
.slider__img .desc .btn a{
    font-size: 16px;
    background-color: #fff;
    padding: 11px 50px;
    display: inline-block;
}
.slider__img .desc .btn a.black {
    background-color: #EA9B71;
    color: #fff;
}
.slider__arrow {}
.slider__arrow a {
    position: absolute;
    top: 50%;
    width: 30px;
    height: 56px;
    background-image:url(../img/slider_icon.svg);
    transform: translateY(-50%);
}
.slider__arrow a.left {
    left: 20px;
}
.slider__arrow a.right {
    right: 20px;
    background-position: -50px 0;
}
.slider__dot {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 25px;
}
.slider__dot  a {
    display: inline-block;
    width: 16px;
    height: 16px;
    background-image: url(../img/slider_icon.svg);
    background-position: -20px -70px;
}
.slider__dot a.active {
    background-position: 0 -70px;
} 
.slider__dot a.play {
    background-position: -40px -70px;
}
.slider__dot a.stop {
    background-position: -60px -70px;
}
/* swiper */
.swiper-slide {
    background: url(../img/slider_bg01.jpg) no-repeat center / cover;
}
.swiper-slide:nth-child(2) {
    background: url(../img/slide_bg_02.jpg) no-repeat center / cover;
}
.swiper-slide:nth-child(3) {
    background: url(../img/slide_bg_03.jpg) no-repeat center / cover;
}
.swiper-slide .desc {
    width: 1160px;
    /* width: 100%; */
    margin: 0 auto;
    padding: 100px 20px;
    box-sizing: border-box;
}
.swiper-slide .desc span {
    font-size: 16px;
    background-color: #fff;
    padding: 1px 14px 0 14px;
    text-transform: uppercase;
    margin-bottom: 10px;
    display: inline-block;
    border-radius: 30px;
}
.swiper-slide .desc h3 {
    font-size: 110px;
    font-weight: 300;
    line-height: 1;
    color: #fff;
    text-transform: uppercase;
    margin-bottom: 16px;
    margin-left: -8px;
}
.swiper-slide .desc p {
    font-size: 20px;
    font-weight: 300;
    color: #fff;
    line-height: 1.5;
    margin-bottom: 130px;
}
.swiper-slide .desc .btn a{
    font-size: 16px;
    background-color: #fff;
    padding: 11px 50px;
    display: inline-block;
}
.swiper-slide .desc .btn a.black {
    background-color: #121212;
    color: #fff;
}
.swiper-button-next, 
.swiper-button-prev {
    width: 30px !important;
    height: 56px !important;
    background-image: url(../img/slider_icon.svg);
}
.swiper-button-next {
    background-position: -50px 0;
}
.swiper-button-next::after, 
.swiper-button-prev::after {
    opacity: 0;
}

.swiper-pagination-bullet {
    width: 16px !important;
    height: 16px !important;
    background-image: url(../img/slider_icon.svg)!important;
    background-position: -20px -70px !important;
    background-color: transparent !important;
    opacity: 1 !important;
}
.swiper-pagination-bullet-active {
    background-position: 0px -70px !important;
}

➰ vscode를 통해 코딩해주기! : CSS 미디어쿼리편 (반응형)

미디어쿼리를 통해 핸드폰에서도 볼 수 있게끔 만들어줍니다.

코드 보기
/* 미디어쿼리 */
@media (max-width: 960px) {
    .swiper-slide .desc {
        width: 100%;
        text-align: center;
    }
    .swiper-slide .desc h3 {
        font-size: 70px;
    }
}

@media (max-width: 600px) {
    .swiper-slide .desc {
        padding: 80px 0;
    }
    .swiper-slide .desc h3 {
        font-size: 40px;
    }
    .swiper-slide .desc p {
        font-size: 16px;
        margin-bottom: 50px;
    }
    .swiper-slide .desc .btn a {
        padding: 10px 25px;
    }
}

➰ vscode를 통해 코딩해주기! : JS편

슬라이드가 자동으로도 움직이고, 수동으로도 움직일 수 있도록 하는 것을 자바스크립트를 통해 만들어줍니다.

코드 보기
//슬라이드 넘어가는 것
var swiper = new Swiper(".mySwiper", {
    navigation: {
        nextEl: ".swiper-button-next",
        prevEl: ".swiper-button-prev",
    },
    autoplay: {
        delay:2000,
        // 슬라이드버그 : 드래그했을때 슬라이드 멈추는 거 보완
        disableOnInteraction: false,
    },
    pagination: {
        el: '.swiper-pagination',
        type: 'bullets',
        //슬라이드 동그라미 클릭시 슬라이드 이동
        clickable: true,
    }
});
//슬라이드 스타트버튼, 스탑버튼
const btnStop = document.querySelector(".swiper-button-stop");
const btnStart = document.querySelector(".swiper-button-play");

//스타트 버튼 처음에 없게 하기
btnStart.style.display = "none";
//스탑버튼 클릭시, 슬라이드 자동넘김 멈춰!, 스탑버튼 눌렀으니 슬라이드 시작버튼 필요하니깐 생겨!, 스탑버튼 이제 사라져!
btnStop.addEventListener("click", () => {
    swiper.autoplay.stop();
    btnStart.style.display = "block";
    btnStop.style.display = "none";
});
//스타트버튼 클릭시, 슬라이드 자동넘김 넘어가!, 스타트 버튼 없어져!, 스탑버튼 다시 생겨! 
btnStart.addEventListener("click", () => {
    swiper.autoplay.start();
    btnStart.style.display = "none";
    btnStop.style.display = "block";
});

📋 이미지 유형

➰ vscode를 통해 코딩해주기! : html편

레이아웃을 다 설정해줬다면 코딩을 해봅시다!
html의 body 부분에 레이아웃 구역을 정해줍니다.

코드 보기
<section id="imageType" class="image__wrap nexon section items">
    <h2>이 달의 BEST</h2>
    <p>9월 가장 인기가 많았던 제품 TOP 2 를 지금 바로 소개합니다.</p>
    <div class="image__inner container">
        <article class="image img1">
            <h2 class="image__title">brin tweed jacket</h2>
            <p class="image__desc">“브린 트위드 자켓" 은 화이트톤과 아이보리 톤의 조화로 체크무늬가 들어간 자켓으로, 하객룩으로 인기가 많은 제품입니다.</p>
            <a class="image__btn" href="#" title="상세 보기">상세 보기</a>
        </article>
        <article class="image img2">
            <h3 class="image__title">cross denim pants</h3>
            <p class="image__desc">“크로스 데님 팬츠" 는 사선 버튼이 포인트인 청바지로 요즘 대세인 와이드 형태의 팬츠입니다. 사계절 내내 착용하실 수 있습니다.</p>
            <a class="image__btn green" href="#" title="상세 보기">상세 보기</a>
        </article>
    </div>
</section>

➰ vscode를 통해 코딩해주기! : CSS편

코드 보기
/* imageType */
.image__wrap {}
.image__wrap h2 {}
.image__wrap p {} /*section의 요소들과 같아서 section에 넣어줌(코드 재활용을 위해서)*/
#imageType01 {
    /* height: 500px; */
}
.image__wrap {}
.image__inner {
    display: flex;
    /* flex-wrap: wrap; */
    justify-content: space-between; /*컨테이너 있고 이거쓰면 양쪽 끝으로 붙어서 사진 사이 떨어지게 함*/
}
.image {
    width: 49%;
    height: 370px;
    padding: 200px 30px 30px 30px; /*글씨 옮기려고 넣는것*/
    box-sizing: border-box;/*패딩을 쓰면 그만큼 커지기 때문에 이를 방지하는 것*/
    color: #fff;
}
.image.img1 {
    background: url(../img/img01.jpg) no-repeat center / cover;
}
.image.img2 {
    background: url(../img/img02.jpg) no-repeat center / cover;
}
.image__title {
    font-size: 32px;
    margin-bottom: 10px;
    /* 한줄효과 */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.image__desc {
    font-size: 16px;
    margin-bottom: 10px;
    line-height: 1.4;
    font-weight: 300;
    padding-right: 100px;
    overflow: hidden;
    text-overflow: ellipsis; /*텍스트 흘렀을 때 ...으로 바꿔줌*/
    display: -webkit-box;
    -webkit-line-clamp: 2; 
    -webkit-box-orient: vertical;
    margin-bottom: 10px;
}
.image__btn {
    font-size: 16px;
    font-weight: 300;
    background: #626262;
    color: #fff;
    padding: 10px 20px;
    display: inline-block;
}
.image__btn.green {
    background: #1A4272;
}

➰ vscode를 통해 코딩해주기! : CSS 미디어쿼리편 (반응형)

width값이 600px일 때 사진이 좌우정렬에서 상하정렬로 바뀌게 하는 것이 특징입니다.

코드 보기
/* 미디어쿼리 */
@media (max-width: 600px) {
    .image__inner {
        flex-direction: column;
    }
    .image {
        width: 100%;
        padding: 205px 20px 20px 20px ;
    }
    .image:first-child {
        margin-bottom: 20px;
    }
    .image__title {
        font-size: 24px;
    }
    .image__desc  {
        font-size: 16px;
    }
}

📋 이미지/텍스트 유형

➰ vscode를 통해 코딩해주기! : html편

레이아웃을 다 설정해줬다면 코딩을 해봅시다!
html의 body 부분에 레이아웃 구역을 정해줍니다.

코드 보기
<section id="imageTextType" class="imageText__wrap nexon section gray items">
    <h2 class="blind">다가오는 가을 코디 추천</h2>
    <div class="imgText__inner container">
        <div class="imgText__txt">
            <span>MOMENTO’s pick</span>
            <h3>다가오는 <br>
                가을 코디 추천</h3>
            <p>모멘토가 pick한 가을 색감 뿜뿜 코디 추천 지금 바로 공개합니다!</p>
            <ul>
                <li><a href="#">셔츠 + 핀턱 슬랙스 + 로퍼/운동화</a></li>
                <li><a href="#">니트 + 골덴 숏팬츠 + 부츠</a></li>
                <li><a href="#">가디건 + 반팔 티셔츠 + 팬츠</a></li>
                <li><a href="#">캡모자 + 쉬폰 원피스 + 운동화</a></li>
                <li><a href="#">라이더 자켓 + 반팔 티셔츠 + 팬츠</a></li>
                <li><a href="#">트렌치코트 + 티셔츠 + 면팬츠</a></li>
            </ul>
        </div>
        <div class="imgText__img img1">
            <a href="#">초가을 코디 보러가기</a>
        </div>
        <div class="imgText__img img2">
            <a href="#" class="blue">늦가을 코디 보러가기</a>
        </div>
    </div>
</section>

➰ vscode를 통해 코딩해주기! : CSS편

코드 보기
/* imageTextType */
.imgText__inner {
    display: flex;
    justify-content: space-between;
}
.imgText__inner > div {
    width: 32%;
    height: 500px;
}
.imgText__txt span{
    font-size: 16px;
    color: #666;
    text-decoration: underline;
    text-underline-position: under;
    margin-bottom: 20px;
    display: block;
}
.imgText__txt h3 {
    font-size: 50px;
    font-weight: 300;
    margin-bottom: 20px;
}
.imgText__txt p {
    font-size: 18px;
    font-weight: 300;
    line-height: 1.5;
    color: #666;
    margin-bottom: 10px;
}
.imgText__txt ul {
    font-size: 18px;
    font-weight: 300;
    line-height: 1.6;
}
.imgText__txt ul li {
    position: relative; 
    padding-left: 20px;
}
.imgText__txt ul li a {
    color: #666;
}
.imgText__txt ul li::before{
    content:'';
    width: 5px;
    height: 5px;
    border-radius: 50%;
    position: absolute;
    left: 5px;
    top: 9px;
    background: #666;
}
.imgText__img {
    border-radius: 10px;
    position: relative;
}
.imgText__img a {
    position: absolute;
    left: 30px;
    bottom: 30px;
    background-color: #7C2B39;
    color: #fff;
    font-size: 18px;
    padding: 10px 30px;
    border-radius: 30px;
    display: inline-block;
}
.imgText__img a.blue {
    background-color: #784C23;
}
.imgText__img.img1 {
    background: url(../img/imgText_bg01.jpg) no-repeat center / cover;
}
.imgText__img.img2 {
    background: url(../img/imgText_bg02.jpg) no-repeat center / cover;
}

➰ vscode를 통해 코딩해주기! : CSS 미디어쿼리편 (반응형)

화면이 줄수록 나중에는 사진이 좌우정렬에서 상하 정렬로 바뀌고 반응형이 나타날 때 설명부분이 빠집니다.

코드 보기
/* 미디어쿼리 */
@media (max-width: 960px) {
    .imgText__inner{
        flex-wrap: wrap;
    }
    .imgText__txt h3{
        font-size: 40px;
    }
    .imgText__txt p {
        margin-bottom: 60px;
    }
    .imgText__inner > div.imgText__txt {
        width: 100%;
        /* height값 초기화 */
        height: auto;
        text-align: center;
    }
    .imgText__inner > div.imgText__txt ul {
        display: none;
    }
    .imgText__inner > div.imgText__img {
        width: 49%;
    }
}

@media (max-width: 600px) {
    .imgText__txt span {
        font-size: 14px;
        margin-bottom: 10px;
    }
    .imgText__txt h3{
        font-size: 30px;
    }
    .imgText__txt p {
        margin-bottom: 50px;
        font-size: 16px;
    }
    .imgText__inner > div.imgText__img {
        width: 100%;
        height: 200px;
    }
    .imgText__inner > div.imgText__img:first-child{
        margin-bottom: 20px;
    }
    .imgText__img a {
        left: 20px;
        bottom: 20px;
    }
} 

📋 카드 유형

➰ vscode를 통해 코딩해주기! : html편

레이아웃을 다 설정해줬다면 코딩을 해봅시다!
html의 body 부분에 레이아웃 구역을 정해줍니다.

코드 보기
<section id="cardType" class="card__wrap nexon section gray items">
    <h2>이 달의 마켓</h2>
    <p>MOMENTO’s가 pick해 온 의류 품목들을 공개합니다.</p>
    <div class="card__inner">
        <article class="card">
            <!--시맨틱태그 안에는 제목이 꼭 들어가야함!-->
            <figure class="card__header">
                <!--이미지 가져오는 새로운 기능-->
                <img src="assets/img/card_bg01.jpg" alt="코듀로이 팬츠">
                <!--웹표준 준수하기 위함으로 alt적어주는 것 접근성을 향상 시키기 위함-->
            </figure>
            <div class="card__body">
                <h3 class="tit">코듀로이 팬츠</h3>
                <p class="desc">가을하면 코듀로이, 코듀로이하면 가을로 그만큼 대표적인 가을 소재라고 할 수 있는 코듀로이 팬츠를 가져왔습니다. 요즘 팬츠 색상이 다양한 게
                    트렌드인 만큼 여러 색상을 가져왔는데.........</p>
                <a class="btn" href="#">
                    더 자세히 보기
                    <span aria-hidden="true">
                        <svg width="65" height="8" viewBox="0 0 65 8" fill="none"
                            xmlns="http://www.w3.org/2000/svg">
                            <path
                                d="M64.3536 4.35355C64.5488 4.15829 64.5488 3.84171 64.3536 3.64645L61.1716 0.464466C60.9763 0.269204 60.6597 0.269204 60.4645 0.464466C60.2692 0.659728 60.2692 0.976311 60.4645 1.17157L63.2929 4L60.4645 6.82843C60.2692 7.02369 60.2692 7.34027 60.4645 7.53553C60.6597 7.7308 60.9763 7.7308 61.1716 7.53553L64.3536 4.35355ZM0 4.5H64V3.5H0V4.5Z"
                                fill="black">
                        </svg>
                    </span>
                </a>
            </div>
        </article>
        <article class="card">
            <figure class="card__header">
                <img src="assets/img/card_bg02.jpg" alt="코끼리">
            </figure>
            <div class="card__body">
                <h3 class="tit">블라우스</h3>
                <p class="desc">가을하면 빠질 수 없는 블라우스도 가져왔는데 여리여리 느낌을 줄 수 있는 블라우스를 가져오고 싶어서 레이스가 포인트인 블라우스를 가져왔습니다.
                    구김이 잘 가지 않는 소재로 데려왔......</p>
                <a class="btn" href="#">
                    더 자세히 보기
                    <span aria-hidden="true">
                        <svg width="65" height="8" viewBox="0 0 65 8" fill="none"
                            xmlns="http://www.w3.org/2000/svg">
                            <path
                                d="M64.3536 4.35355C64.5488 4.15829 64.5488 3.84171 64.3536 3.64645L61.1716 0.464466C60.9763 0.269204 60.6597 0.269204 60.4645 0.464466C60.2692 0.659728 60.2692 0.976311 60.4645 1.17157L63.2929 4L60.4645 6.82843C60.2692 7.02369 60.2692 7.34027 60.4645 7.53553C60.6597 7.7308 60.9763 7.7308 61.1716 7.53553L64.3536 4.35355ZM0 4.5H64V3.5H0V4.5Z"
                                fill="black">
                        </svg>
                    </span>
                </a>
            </div>
        </article>
        <article class="card">
            <figure class="card__header">
                <img src="assets/img/card_bg03.jpg" alt="돌고래">
            </figure>
            <div class="card__body">
                <h3 class="tit">트렌치 코트</h3>
                <p class="desc">가을하면 모두 트렌치 코트를 떠올리시잖아요? 그래서 가져왔습니다. 자칫하면 촌스러워보일 수 있는 색감의 트렌치코트는 제외하고 탄탄하고 오래 입을
                    수 있는 트렌치코트로 데려왔습니다.</p>
                <a class="btn" href="#">
                    더 자세히 보기
                    <span aria-hidden="true">
                        <svg width="65" height="8" viewBox="0 0 65 8" fill="none"
                            xmlns="http://www.w3.org/2000/svg">
                            <path
                                d="M64.3536 4.35355C64.5488 4.15829 64.5488 3.84171 64.3536 3.64645L61.1716 0.464466C60.9763 0.269204 60.6597 0.269204 60.4645 0.464466C60.2692 0.659728 60.2692 0.976311 60.4645 1.17157L63.2929 4L60.4645 6.82843C60.2692 7.02369 60.2692 7.34027 60.4645 7.53553C60.6597 7.7308 60.9763 7.7308 61.1716 7.53553L64.3536 4.35355ZM0 4.5H64V3.5H0V4.5Z"
                                fill="black">
                        </svg>
                    </span>
                </a>
            </div>
        </article>
    </div>
</section>

➰ vscode를 통해 코딩해주기! : CSS편

style을 통해 CSS를 설정해줍니다.
하나하나 세심하게 스타일을 넣어주는 것이 중요합니다.

코드 보기
/* cardType */
.card__inner {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    /*양쪽 정렬 맞춰주는 것*/
}

.card {
    width: 32%;
    background: #f5f5f5;
}

.card__body {
    padding: 24px;
}

.card__body .tit {
    font-size: 24px;
    margin-bottom: 10px;
    /* 한 줄 효과 */
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis; 
}

.card__body .desc {
    font-size: 18px;
    line-height: 1.4;
    color: #666;
    margin-bottom: 20px;
    font-weight: 300;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 4;  /*줄효과 clamp : 4줄 효과*/
    -webkit-box-orient: vertical;
}
.card__body .btn:hover {
    text-decoration: underline;
}

➰ vscode를 통해 코딩해주기! : CSS 미디어쿼리편 (반응형)

코드 보기
/* 미디어쿼리 */
@media (max-width: 960px) {
    .card__inner {
        flex-wrap: wrap;
    }
    .card {
        width: 49%;
    }
    .card:last-child{
        display: none;
    }
}
@media (max-width: 600px) {
    .card {
        width: 100%;
    }
    .card:first-child{
        margin-bottom: 20px;
    }
    .card__body {
        padding: 20px;
    }
}

📋 배너 유형

➰ vscode를 통해 코딩해주기! : html편

레이아웃을 다 설정해줬다면 코딩을 해봅시다!
html의 body 부분에 레이아웃 구역을 정해줍니다.

코드 보기
<section id="bannerType" class="banner__wrap items">
    <h2 class="blind">배너 영역</h2>
    <div class="banner__inner">
        <h3 class="title">MOMENTO는?</h3>
        <p class="desc">
            트렌드도 중요하지만 한 번 입고 옷장에 박혀있는 옷들 말고<br>
            편안하면서도 오래 입을 수 있는 유행타지 않는 옷들을 추구합니다.
            <a href="#" title="유튜브 페이지로 이동"></a>
        </p>
        <span class="small">-MOMENTO 대표 드림-</span>
    </div>
</section>

➰ vscode를 통해 코딩해주기! : CSS편

style을 통해 CSS를 설정해줍니다.
하나하나 세심하게 스타일을 넣어주는 것이 중요합니다.

코드 보기
.banner__inner {
    background-image: url(../img/banner_type01.jpg);
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
    text-align: center;
    padding: 120px 0;
    color: #fff;
}
.banner__inner .title{
    font-size: 50px;
    line-height: 1;
    font-weight: 300;
    margin-bottom: 40px;
}
.banner__inner .desc{
    font-size: 24px;
    line-height: 1.5;
    font-weight: 300;
    margin-bottom: 70px;
}
.banner__inner .desc a {
    color: #fff;
    display: block;
}
.banner__inner .desc a:hover {
    text-decoration: underline;
}
.banner__inner .small{
    font-size: 16px;
    text-decoration: underline;
}

➰ vscode를 통해 코딩해주기! : CSS 미디어쿼리편 (반응형)

배너는 거의 비슷합니다.

코드 보기
/* 미디어쿼리 */
@media (max-width: 960px) {
    .banner__inner {
        padding: 100px 0;
    }
}
@media (max-width: 600px) {
    .banner__inner {
        padding: 80px 0;
    }
    .banner__inner .title {
        font-size: 30px;
        margin-bottom: 20px;
    }
    .banner__inner .desc {
        font-size: 16px;
        margin-bottom: 40px;
    }
}

📋 텍스트 유형

➰ vscode를 통해 코딩해주기! : html편

레이아웃을 다 설정해줬다면 코딩을 해봅시다!
html의 body 부분에 레이아웃 구역을 정해줍니다.

코드 보기
 <section id="textType" class="text__wrap nexon section items">
    <!-- 쓸 거 없을 때 div나 span -->
    <span>MOMENTO’s</span>
    <h2 class="mb70">SNS : MOMENTO’s LOOK</h2>
    <div class="text__inner">
        <div class="text t1">
            <h3 class="text__title">페이스북</h3>
            <p class="text__desc">MOMENTO의 룩북영상과 홍보영상을 볼 수 있으며 매달 마켓 상품 품목들을 실시간으로 확인하실 수 있습니다.</p>
            <a class="text__btn" href="#">바로가기</a>
        </div>
        <div class="text t2">
            <h3 class="text__title">인스타</h3>
            <p class="text__desc">MOMENTO의 실시간 라이브 영상을 볼 수 있으며 고객님들의 리뷰사진을 스토리에 공유합니다.</p>
            <a class="text__btn" href="#">바로가기</a>
        </div>
        <div class="text t3">
            <h3 class="text__title">유튜브</h3>
            <p class="text__desc">MOMENTO의 실시간 라이브 영상을 볼 수 있으며 촬영 비하인드 영상도 볼 수 있습니다. 그 외의 영상 계획도 있습니다.</p>
            <a class="text__btn" href="#">바로가기</a>
        </div>
        <div class="text t4">
            <h3 class="text__title">카카오톡</h3>
            <p class="text__desc">MOMENTO의 CS를 맡고 있으며 문의를 하고 싶으실 때 카카오톡을 통해 문의를 주시면 신속하게 답변하고 있습니다.</p>
            <a class="text__btn" href="#">바로가기</a>
        </div>
        <div class="text t5">
            <h3 class="text__title">트위터</h3>
            <p class="text__desc">MOMENTO 신상컷들을 업데이트 하고 있으며 업데이트 소식을 보다 빠르게 확인 할 수 있습니다.</p>
            <a class="text__btn" href="#">바로가기</a>
        </div>
        <div class="text t6">
            <h3 class="text__title">네이버 블로그</h3>
            <p class="text__desc">MOMENTO 공지사항이나 이벤트 소식 등을 전달하는 곳입니다. 추후에 진행할 플리마켓 공지도 여기서 확인할 수 있습니다.</p>
            <a class="text__btn" href="#">바로가기</a>
        </div>
    </div>
</section>

➰ vscode를 통해 코딩해주기! : CSS편

style을 통해 CSS를 설정해줍니다.
하나하나 세심하게 스타일을 넣어주는 것이 중요합니다.

코드 보기
/* textType */
.text__inner {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
}
.text {
    width: 32%;
    /* background: #f5f5f5; */
    margin-bottom: 2%;
    padding: 20px;
    box-sizing: border-box;
    border-radius: 10px;
    transition: background 0.4s;
}
.text:hover {
    background: #f5f5f5;
}
.text__title {
    font-size: 24px;
    line-height: 1;
    margin-bottom: 10px;
    white-space: nowrap;
    text-overflow: ellipsis;
    position: relative;
    padding-top: 75px;
}
.text__title::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    width: 60px;
    height: 60px;
    border-radius: 50%;
    background-color: #000;
    background: url(../img/textIcon.svg);
}
.text.t1 .text__title::before {
    background-position: 0 0;
}
.text.t2 .text__title::before {
    background-position: -60px 0;
}
.text.t3 .text__title::before {
    background-position: -120px 0;
}
.text.t4 .text__title::before {
    background-position: -180px 0;
}
.text.t5 .text__title::before {
    background-position: -240px 0;
}
.text.t6 .text__title::before {
    background-position: -300px 0;
}
.text__desc {
    font-size: 18px;
    font-weight: 300;
    line-height: 1.4;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 3; 
    -webkit-box-orient: vertical;
    color: #666;
    margin-bottom: 20px;
}
.text__btn {
    font-size: 16px;
    line-height: 1;
    text-decoration: underline;
    text-underline-position: under;
    color: #666;
}

➰ vscode를 통해 코딩해주기! : CSS 미디어쿼리편 (반응형)

사이트 화면 좁아질수록 2개씩 정렬

코드 보기
/* 미디어쿼리 */
@media (max-width: 960px) {
    .text {
        width: 49%;
        background: #f5f5f5;
    }
}

@media (max-width: 600px) {
    .text__title {
        font-size: 20px;
    }
    .text__desc {
        font-size: 16px;
    }
}
@media (max-width: 480px) {
    .text {
        width: 100%;
    }
}

📋 푸터 유형

➰ vscode를 통해 코딩해주기! : html편

레이아웃을 다 설정해줬다면 코딩을 해봅시다!
html의 body 부분에 레이아웃 구역을 정해줍니다.

코드 보기
<footer id="footerType" class="footer__wrap nexon section gray">
    <h2 class="blind">푸터 영역</h2>
    <div class="footer__inner">
        <div class="footer__menu">
            <div>
                <h3>MENU</h3>
                <ul>
                    <li><a href="#">OUTER</a></li>
                    <li><a href="#">TOP</a></li>
                    <li><a href="#">BOTTOM</a></li>
                    <li><a href="#">DRESS</a></li>
                    <li><a href="#">ACC</a></li>
                </ul>
            </div>
            <div>
                <h3>SHOP GUIDE</h3>
                <ul>
                    <li><a href="#">이용 약관</a></li>
                    <li><a href="#">이용 안내</a></li>
                    <li><a href="#">개인정보취급방침</a></li>
                </ul>
            </div>
            <div>
                <h3>MEMBERSHIP</h3>
                <ul>
                    <li><a href="#">로그인</a></li>
                    <li><a href="#">회원가입</a></li>
                    <li><a href="#">마이페이지</a></li>
                    <li><a href="#">주문조회</a></li>
                </ul>
            </div>
            <div>
                <h3>BANK ACCOUNT</h3>
                <ul>
                    <li><a href="#">신한 : 123-4567-890</a></li>
                    <li><a href="#">예금주 : (주)모멘토컴퍼니 </a></li>
                </ul>
            </div>
            <div>
                <h3>ABOUT US</h3>
                <ul>
                    <li><a href="#">company.(주)모멘토컴퍼니</a></li>
                    <li><a href="#">owner. 권혜현</a></li>
                    <li><a href="#">tel. 031-123-4567</a></li>
                    <li><a href="#">business no. 123-45-67</a></li>
                </ul>
            </div>
            <div>
                <h3>SNS</h3>
                <ul>
                    <li><a href="#">페이스북</a></li>
                    <li><a href="#">인스타</a></li>
                    <li><a href="#">유튜브</a></li>
                    <li><a href="#">카카오톡</a></li>
                    <li><a href="#">트위터</a></li>
                    <li><a href="#">네이버 블로그</a></li>
                </ul>
            </div>
        </div>
        <div class="footer__right">
            2022 NOEYHEYH. This is hyeon's Portfolio<br>
            All rights reserved.
        </div>
    </div>
</footer>

➰ vscode를 통해 코딩해주기! : CSS편

코드 보기
.footer__inner {
    width: 85%;
    padding: 0 20px;
    margin: 0 auto;
}
.footer__menu {
    display: flex;
    /* flex-wrap: wrap; */
    justify-content: space-between;
    margin-bottom: 70px;
}
.footer__menu h3 {
    font-size: 18px;
    margin-bottom: 20px;
}
.footer__menu li a {
    font-size: 14px;
    color: #666;
    margin-bottom: 10px;
    display: block;
}
.footer__right {
    border-top: 1px solid #d9d9d9;
    text-align: center;
    padding-top: 48px;
    color: #666;
    line-height: 1.5;
}

➰ vscode를 통해 코딩해주기! : CSS 미디어쿼리편 (반응형)

푸터는 오로지 글로만 이루어져 있어 반응형을 했을 때 다소 지저분해 보일 수 있으므로 width값이 작아졌을 때는 없애주었습니다.

코드 보기
/* 미디어쿼리 */
@media (max-width: 960px) {
    .footer__menu {
        display: none;
    }
    .footer__right {
        padding-top: 0;
        border-top: 0;
    }
    .footer__wrap {
        padding: 40px 0;
    }
}

▶완성본

댓글