2024.07.26 ~ 28 수업

반응형
RESULT

edited_blob

 

HTML
<!doctype html>
<html>
    <head>
        <title>Profile</title>
        <link rel="stylesheet" href="./style.css"> <!--CSS연결-->
    </head>
    <body>
        <div class="wrapper"> <!--div 태그에 wrapper 라는 클래스명을 지정하여 전체 틀을 잡기-->
            <div class="header"> <!--wrapper 클래스 내에 header, contents, section 클래스를 만들어 3개의 레이아웃 구성 -->
                <img class="profile" src="./images/profile.png" alt=""> <!--이미지 태그에 profile 클래스명 지정하고 이미지경로 지정-->
                <h1>Seop E</h1>
                <p>Front-end Designer</p>
            </div>
            <div class="contents"> <!--contents클래스 내에 section, list 클래스를 만들어 2개의 레이아웃 구성 -->
                <div class="section Information"> <!--디자인이 같으므로 같은 클래스를 가질수 있게 다중 클래스 사용.-->
                    <h2>Information</h2>
                    <ul class="list"> <!--스타일 리스트 태그 (목록 태그) 생성-->
                        <li>Seop E</li>
                        <li>pplo23@naver.com</li>
                        <li>seongNam gg-do, korea</li>
                    </ul>
                </div>
                <div class="section skill"> <!--디자인이 같으므로 같은 클래스를 가질수 있게 다중 클래스 사용.-->
                    <h2>Skill</h2>
                    <ul class="list"><!--스타일 리스트 태그 (목록 태그) 생성-->
                        <li>KMS</li>
                        <li>JS</li>
                        <li>HTML + CSS</li>
                    </ul>
                </div>
            </div>
            <div class="footer">Footer</div> <!--하단 콘텐츠생성. 클래스 .footer또는 <footer> 태그로도 사용가능하다-->
        </div>
    </body>
</html>
CSS

 

/
*css 리셋*/
body , p , ul { /*body, p, ul 태그에서 마진은과 패딩의 초기값(기본값을) 적용 = initial*/
    margin: initial;
    padding: initial;
}

li {
    list-style-type: none; /*목록의 머리기호를 지정하지않음   */
}

h1,h2{ /*기본적으로 주어진(사용자 에이젠트 스타일시트) h1의 속성을 새로 지정해줌*/
    margin:initial;
    font-size: inherit; /*폰트 크기를 부모의 속성을 상속받는다.*/
    font-weight: inherit; /*폰트 두께를 부모의 속성을 상속받는다.*/
}



/*디자인 작업*/
body{
    /* background-color: orange; */
    background-image: url(./images/background.gif); /*body의 배경이미지를 지정*/
    background-size: cover; /*배경 사이즈 크기 조절을 하는데 요소를 전체 덮도록 배경이미지를 확대함*/
}

.wrapper{ /*모든 wrapper의 공통 디자인 (공통분모)*/
    background-color: rgb(190, 190, 190); /*배경색을 rgb색상으로 지정*/
    width: 800px; /*너비 800px*/
    margin: 60px auto; /*중앙정렬*/
}

.header {
    background-image: url(./images/cover04.png); /*header의 배경 이미지 지정*/
    background-size: cover; /*배경 사이즈 확대*/
    text-align: center; /*텍스트 및 인라인요소 중앙 정렬*/
    color: white; /*색상 흰색*//
    min-height: 400px; /*요소의 고정 높이값을 설정하며 콘텐츠가 이 높이보다 클 경우에는 콘텐츠에 맞춰 높이가 자동으로 늘어난다.*/
    height: auto; /*내부 콘텐츠의 높이만큼 자동 조절되며 높이 기본값은 auto 이나 min높이와 별개이다. 각각 지워보고 차이점을 보자.*/
    padding: 60px 0; /*안쪽 여백 상하 60px, 좌우 0 지정*/
    box-sizing: border-box; /*요소의 너비와 높이를 계산하는 방법을 제어한다. 크기가 상하단 패딩 60px이 포함된다.*/
}

.header img.profile{  /*프로필 이미지 */
    border: 6px solid white; /*테두리 지정*/
    width: 140px; /*이미지의 너비 140px 지정*/
}

.header h1{ /* 헤더 소속의 모든 h1들 -> 하위결합자 Descendant combinator 교안 셀렉터에 콤비네이터 참고*/
    font-size: 80px; /*h1의 폰트크기 지정*/
    font-weight: bold; /*h1의 두께 지정*/
}

.header p { /* 하위결합자 사용하여 header내의 모든 p요소를 설정 */
    border-top: 8px solid; /*테두리 상단 스타일 지정*/
    width: fit-content; /**부모요소의 가용범위 내에서 알아서 최대크기로 width를 조정*/
    margin: 4px auto; /* 중앙 정렬*/
    padding: 4px 20px; /*안쪽 여백 상하4px 좌우 2px 지정*/
}


.section { /*공통분모*/
    /*box-shadow: inset 0 0 20px #red; /*border soild 써도되지만 공간 차지하니까 박스그림지로 대체*/
    background-color: white; /*배경색 흰색 스타일 지정*/
    margin: 20px; /*바깥여백 상하좌우20px*/
    padding: 20px; /*안쪽여백 상하좌우 20px*/

    background-repeat: no-repeat;  /*information, skill 배경이미지를 지정한 것에 대한 배경이미지 반복 하지않음*/
    background-position: right 40px center; /*이미지의 위치값을 오른쪽 40px*/
}

.section.Information{ /*이미 공통분모인 section에 적용하여 이미지만 추가*/
    background-image: url(./images/icon-information.png);

}

.section.skill{ /*이미 공통분모인 section에 적용하여 이미지만 추가*/
    background-image: url(./images/icon-skills.png);
}
.section h2{ /*하위 결합자를 사용하여 section내의 모든 h2 요소를 설정 */
    font-size: 32px;
    color: deeppink;
    font-weight: bold;
    margin-bottom: 20px;  /*하단 바깥여백을 20px 지정*/
}

.list li {
    border-left: 5px solid #999;  /*리스트의 왼쪽 테두리 스타일 지정*/
    padding: 20px 10px; /*안쪽여백 상하30px 좌우 10px 지정*/
    margin: 10px; /*상하좌우 바깥여백을 사용하여 간격 띄우기*/
    padding-left: 30px; /* 왼쪽 여백을 사용하여 왼쪽 테두리 간격 띄우기*/
   
}

.list li:hover { /* :hover 를 사용하여 마우스 리스트의 li에 마우스 포인터를 올려 상호작용을 시킴*/
    border-color:deeppink; /*마우스 커서 상호작용시 테두리 색상 변경 */
    color: deeppink; /*마우스 커서 상호작용시 글씨색상 변경*/
    font-size: 16px; /*마우스 커서 상호작용시 폰트크기 변경*/
}

.footer{ /*하단콘텐츠*/
    background-color: #f4f4f4; /*배경색상 지정*/
    padding: 12px 0; /*안쪽 여백 상하12px 좌우 0px 지정*/
    text-align: center; /*텍스트 및 인라인요소 중앙정렬*/
    color: #999; /*글씨색상 지정*/

}


 

■ 클래스 셀렉터 (class selector)
   클랙스 셀렉터는 HTML 요소의 class 속성을 기반으로 요소를 선택하며 이때 선택하려는 속성값 앞에 
   마침표(.)를 추가하고 작성한다. 우리가 여태 마침표를 쓰지않은 이유는 태그 선택자 즉, HTML 요소를 직접 지칭    하기에 작성하지 않았던 것이다. (<div>,<p>등)

●타입 셀렉터와 클래스 셀렉터 입력방법
blob
클래스 셀렉터를 보면 굳이 타입 셀릭터와 같이 쓸필요가 있을까 하고 의문이 들텐데 이렇게 써도 적용이 된다고 보여주는 것도있고 셀렉터 특정성 점수 (Selector Specificit) 의 이유도 있다 이 내용은 나중에...


● 다중 셀렉터 입력방법

blob
다중 클래스를 사용하여 여러 요소를 동시에 선택하여 적용 할 수 있다.


● 하위 셀렉터 입력방법

blob






display block은 하나의 태그가 브라우저에서 좌우공간을 다 차지하면서
독립적인 덩어리 공간을 가지는 요소들이다.
inline은 하나의 태그가 브라우저에서 실제로 코딩된 그 영역만 차지하여
좌우로 다른 태그가 나란히 위치할 수 있는 특징이있다.

etc-image-4
왼쪽부터 block (div,ul,li,h1~h6,p 등) / inline (strong,span,a,img 등)


block 는 한줄 전체에 할당 받으며 박스모델 모두 사용 가능하지만
inline 은 텍스트 배치의 흐름이기에 박스모델 중 일부만 지원한다.
inline은 width,height 의 개념이 없으며 margin,padding 좌우로만 적용 가능하고
padding은 상하단 보여지긴하지만 공간을 차지하지 않아서 레이아웃 구성이 어렵다는 단점이있다.
또한 border 적용은 가능하나 중간에 줄바꿈이되서 마찬가지로 레이아웃 구성이 어렵다.

이러한 inline의 단점을 부각시키고 block 처럼 박스 모델 모두 사용가능한 표현이 display : inline-block 이 있다,

blob
inline 속성과 같이 줄바꿈 없이 한줄에 적용되며, block 속성과 같이 크기 등을 조절할 수 있다.


★결론적으로 block의 장점과 inline의 장점을 모두 가지고 있는 표현 방식이 inline-block 이며
inline이기 때문에 콘텐츠의 양만큼 전체 너비가 자동 조절된다,
부모요소에게 지정된 text-align, vertical-align 속성에 영향 받으며 정렬에 용이하다.
block이기 때문에 원하는 width, height 속성값을 직접 지정 할 수 있으며
박스모델을 자유자재로 사용 할 수 있다.




■ vertical-align은 inline 요소와 table 셀 요소 내부의 수직(vertical) 정렬을 지정한다.이
어떠한 요소가 부모 요소의 기준선에 상대적으로 어떻게 수직(vertical) 정렬(align)되는지를 설정한다.
단 inline 요소에만 적용되므로 block 요소는 적용되지 않는다.


● Baseline

etc-image-6
글자의 크기가 달라도 보이지 않는 어떠한 선에 맞춰저있다.

English와 한글이  동일안 선에 맞춰저있는 것을 확인 할 수 있다. 이러 한 선이 baseline이다.

1. baseline: vertical-align의 기본값. 이미지와 텍스트 등의 요소는 기본적으로 이 baseline을 기준으로 배치가 된다. 글자가 앉아있는 선이다.
한글과 다르게 영어소문자에만 있는 g, j, p, q, y와 같이 끝이 밑으로 내려가는 부분(decender)은 baseline 밑으로 내려간다.
2. top: vertical-align상의 상단부분.
3. bottom: vertical-align상의 하단부분.
4. middle: vertical영역의 중간이 아닌 알파벳 소문자의 중간이 middle값이 된다.
    폰트 종류가 바뀌게 되면 middle값도 상대적으로 바뀌게 된다.
(만약 텍스트와 이미지를 나란히 놨을 때 이미지에 vertical-align: middle속성값을 넣으면 이미지는 텍스트의 소문자




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형