위코드 자기소개 페이지 만들기

라용·2022년 8월 3일
0

위코드 - 스터디로그

목록 보기
4/100

위코드 사전스터디 과제로 자기소개 페이지를 만들며 정리한 내용입니다.

flexmedia query 를 활용한 반응형 다단구조를 만드는 연습을 하였고, 들어가는 이미지는 서버에서 불러오는 것을 고려해 html 태그에 스타일 속성으로 넣었습니다.

나열되는 카드리스트는 ul li 태그를 사용해 구조를 잡았고, 그 안의 콘텐츠를 a 태그로 묶고 figure 로 사진을 div 태그로 텍스트를 넣었습니다.

<ul class="card-list">
	<li class="card-item">
    	<a href="#">
        	<figure class="card-image"></figure>
          	<div class="card-desc"></div>
        </a>
	</li>
</ul>

카드리스트 이미지는 일반적으로 DB에서 불러오기 때문에 인라인 속성으로 사진을 넣었고, 반응형에 맞게 사진 크기가 조절 되도록 background-image 를 사용했습니다.

<figure class="card-image" style="background-image:url()"></figure>

css 파일에서는 별도 리셋 파일을 연결하지 않고 최소 요소만 초기화를 진행했습니다.

/* UA resets */

html, body, h1, h2, p, ul, li, figure {
    margin: 0;
    padding: 0;
    border: 0;
}
div, ul, li {
    box-sizing: border-box; // 이 부분을 놓쳐서 오류가 났었음
}
li {
    list-style-type: none;
}
a {
    text-decoration: none;
}

/* Typography */

h1, h2 {
    font-size: inherit;
    font-weight: inherit;
}

전체 콘텐츠는 div 로 감싸서 큰 레이아웃을 잡았습니다.

/* Layouts */

.wrapper {
    max-width: 1200px; // 크기에 따라 반응하도록 max-width 사용
    margin: 0 auto;
    padding: 0 2rem;
}

카드 리스트에 flex 속성을 적용하고 카드 아이템에 width 를 적용해 가로 배치, 다단구조를 만들었습니다.

.card-list {
    padding: 2rem 0;
    display: flex; 
    flex-wrap: wrap; // 길이에 맞게 아래로 넘어가는, 
    margin: 0 -1rem;
}
.card-item {
    width: 33.33333%; // 3단 구조
    padding: 0 1rem;
    margin-bottom: 1rem;
}

figure 태그에 적용한 배경 이미지 요소가 잘 보이도록 height 와 padding-bottom 을 적용하고 그 외 속성을 적용했습니다.

.card-image {
    height: 0;
    border-radius: 4px;
    padding-bottom: 60%;
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
}

미디어 쿼리를 사용하고 카드 아이템에 width 를 조절해 반응형 다단 구조를 만들었습니다.

@media(max-width: 900px){
    .card-item {
        width: 50%; // 2단 구조
    }
}

@media(max-width: 500px){
    .card-item {
        width: 100%; // 1단 구조
    }
    .card-desc {
        text-align: center;
    }
}

전체 코드를 아래 남깁니다.
html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>personal_page</title>
    <!-- <link rel="stylesheet" href="default.css"> -->
    <link rel="stylesheet" href="style.css">
    <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=Black+Han+Sans&display=swap" rel="stylesheet">
</head>
<body>
    <div class="wrapper">
        <div class="header">
            <img class="header-profile" src="profile.png" alt="profile-img">
            <div class="header-meta">
                <h1>rayong.<span>portfoilo</span></h1>
                <p>개발 공부를 시작한 디자이너입니다. <span>정리하는 일을 좋아합니다.</span>
                </p>
            </div>
        </div>
        <div class="contents">
            <ul class="card-list">
                <li class="card-item">
                    <a href="https://velog.io/@rayong" target="_blank">
                        <figure class="card-image" style="background-image:url(https://velog.velcdn.com/images/rayong/profile/df592861-ea43-432c-aea2-a1f79730300b/image.png)" ></figure>
                        <div class="card-desc">
                            Developement studyLog 
                        </div>
                    </a>
                </li>
                <li class="card-item">
                    <a href="https://www.behance.net/gallery/146940837/Free-Presentation-Template-designtoolorg" target="_blank">
                        <figure class="card-image" style="background-image:url(https://mir-s3-cdn-cf.behance.net/projects/max_808/dcc810146940837.Y3JvcCwxMzgwLDEwODAsMjcwLDA.png)" ></figure>
                        <div class="card-desc">
                            Free Presentation Template - designtool.org
                        </div>
                    </a>
                </li>
                <li class="card-item">
                    <a href="https://www.behance.net/gallery/101788637/Green-Party-Lecture-Poster-Design" target="_blank">
                        <figure class="card-image" style="background-image:url(https://mir-s3-cdn-cf.behance.net/projects/max_808/df8bed101788637.Y3JvcCwyNDMwLDE5MDAsMzYwLDE3NA.jpg)" ></figure>
                        <div class="card-desc">
                            Green Party Lecture Poster Design
                        </div>
                    </a>
                </li>
                <li class="card-item">
                    <a href="https://www.behance.net/gallery/98238785/Alphabet-Presentation-Template" target="_blank">
                        <figure class="card-image" style="background-image:url(https://mir-s3-cdn-cf.behance.net/projects/max_808/e97da698238785.Y3JvcCw5MjAsNzIwLDIwLDA.png)" ></figure>
                        <div class="card-desc">
                            Alphabet Presentation Template
                        </div>
                    </a>
                </li>
                <li class="card-item">
                    <a href="https://www.behance.net/gallery/101402019/Green-Party-Korea-SNS-contents-design" target="_blank">
                        <figure class="card-image" style="background-image:url(https://mir-s3-cdn-cf.behance.net/projects/max_808/ebee5f101402019.Y3JvcCwxNDM4LDExMjUsOTIsMA.png)" ></figure>
                        <div class="card-desc">
                            Green Party Korea SNS contents design
                        </div>
                    </a>
                </li>
                <li class="card-item">
                    <a href="https://www.behance.net/gallery/138731157/921-GLOBAL-CLIMATE-STRIKE" target="_blank">
                        <figure class="card-image" style="background-image:url(https://mir-s3-cdn-cf.behance.net/projects/max_808/380d93138731157.Y3JvcCwxMTU2LDkwNCwzODAsODg.png)" ></figure>
                        <div class="card-desc">
                            921 GLOBAL CLIMATE STRIKE
                        </div>
                    </a>
                </li>
                <li class="card-item">
                    <a href="https://www.behance.net/gallery/101467341/Pin-Button-Design-for-2020-She-Will-Run" target="_blank">
                        <figure class="card-image" style="background-image:url(https://mir-s3-cdn-cf.behance.net/projects/max_808/b37451101467341.Y3JvcCwyODc2LDIyNTAsNjQsMA.jpg)" ></figure>
                        <div class="card-desc">
                            Pin Button Design for 2020 She Will Run
                        </div>
                    </a>
                </li>
            </ul>
        </div>
        <div class="footer">
            flex를 활용한 1단, 2단, 3단 그리드 연습
        </div>
    </div>
</body>
</html>

css

/* UA resets */

html, body, h1, h2, p, ul, li, figure {
    margin: 0;
    padding: 0;
    border: 0;
}

div, ul, li {
    box-sizing: border-box;
}

li {
    list-style-type: none;
}

a {
    text-decoration: none;
}

/* Typography */

h1, h2 {
    font-size: inherit;
    font-weight: inherit;
}

/* Layouts */

.wrapper {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 2rem;
}

/* Components */

body {
    background: #111;
    color: white;
}

.header {
    display: flex;
    align-items: center;
    padding: 4rem 0 2rem;
    border-bottom: 3px solid #000;
}

.header-profile {
    width: 5rem;
    height: 5rem;
    border-radius: 4px 20% 20% 4px;
    box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);
}

.header-meta {
    padding: 0 1.8em;
}

.header-meta h1 {
    font-size: 1.8rem;
    font-family: 'Black Han Sans', sans-serif;
    margin-bottom: 0.3em;
    line-height: 1;
}

.header-meta h1 span {
    color: #ADFF2E;
}

.header-meta p {
    font-weight: 300;
    letter-spacing: 0.05em;
    line-height: 1.5;
}

.contents {
    border-bottom: 3px solid #000;
}

.card-list {
    padding: 2rem 0;
    display: flex;
    flex-wrap: wrap;
    margin: 0 -1rem;
}

.card-item {
    width: 33.33333%;
    padding: 0 1rem;
    margin-bottom: 1rem;
}

.card-item:hover {
    transform:translateY(-5px);
    transition: 1s;
}

.card-image {
    height: 0;
    border-radius: 4px;
    padding-bottom: 60%;
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
}

.card-desc {
    font-size: 1.05rem;
    font-weight: 300;
    letter-spacing: 0.03em;
    color: gray;
    padding: 0.5em 0;
}

.footer {
    color: gray;
    text-align: center;
    padding: 2rem;
}

@media(max-width: 900px){
    
    .card-item {
        width: 50%;
    }

}

@media(max-width: 500px){

    .card-item {
        width: 100%;
    }

    .card-desc {
        text-align: center;
    }
 
}

@media(max-width: 412px){

    .header-profile {
        display: none;
    }
    
    .header-meta {
        padding: 0;
        text-align: center;
    }
    
    .header-meta h1 span {
        display: block;
        line-height: 1.2;
    }

    .header-meta p span {
        display: inline-block;
    }
    
    .header {
        padding: 3rem 0 2rem;
    }

    .wrapper {
        padding: 0 1rem;
    }
    
}
profile
Today I Learned

0개의 댓글