본문 바로가기
Study/ft_transcendence

[CSS] CSS 맛보기 (노마드코더)

by jeongwle 2022. 6. 14.
728x90
반응형

이번에도 마찬가지로 인터넷 강의를 들으면서 쭈루루루룩 기록만 하는 식입니다.

CSS

CSS(Cascading Style Sheets)는 마크업 언어가 실제 표시되는 방법을 기술하는 스타일언어이다. HTML과 XHTML에 주로 쓰이며 XML에서도 사용할 수 있다. HTML과 같은 마크업 언어가 몸체를 담당한다면 CSS는 옷과 악세사리처럼 꾸미는 역할을 담당한다.

 

먼저 어떻게 하면 CSS를 HTML 페이지에 추가할 수 있는지 이해를 해야한다. 첫 번째 방법은 같은 HTML 파일에 HTML 코드와 CSS 코드를 같이 작성하는 것이다. 두 번째 방법은 대부분의 사람들이 추천하는 방법으로 CSS와 HTML 코드를 따로 분리해서 놓는 것이다.

<!-- html 파일 안에서 직접 작성하기 -->
<!DOCTYPE html>
<html lang="kr">
    <head>
        <title>Home - My first website</title>
        <style>

        </style>
    </head>
    <body>
        <header>
            <h1>123</h1>
        </header>

        <main>
            <p>hello!</p>
        </main>

        <footer>
            &copy; 2020 N.C
        </footer>
    </body>
</html>

<!-- html 파일과 css 파일을 분리하여 작성하고 연결하기 -->
<!DOCTYPE html>
<html lang="kr">
    <head>
        <title>Home - My first website</title>
        <link href="styles.css" rel="stylesheet" />
    </head>
    <body>
        <header>
            <h1>123</h1>
        </header>

        <main>
            <p>hello!</p>
        </main>

        <footer>
            &copy; 2020 N.C
        </footer>
    </body>
</html>

위 예제에서 보듯이 두가지 방법 모두 head태그 안에서 이루어져야 한다. 첫 번째 방법은 style 태그 안에서 CSS 코드를 작성하는 것이고 두 번째 방법은 link태그를 통해 CSS 파일을 연결하는 것이다.

 

CSS 작성 규칙

CSS는 HTML 태그를 가리키는 일을 한다. ex) 이 태그는 초록색이다. 이렇게 가리키는 것 자체를 selector라고 한다. 그 selector 안에서 글씨 크기는 25px이고 색깔은 blue이다 이런 것들을 property라고 한다. 원하는 태그를 지정하고 원하는 속성값을 사용하면 된다. 속성 이름은 띄어쓰기 및 언더바(_), 슬래시(/) 등이 존재하면 안된다. 하이픈(-)으로는 연결될 수 있다. 그리고 속성의 각각의 줄은 세미콜론(;)으로 끝나야 한다. 속성 이름 다음에는 속성 값을 써야한다.

<!DOCTYPE html>
<html lang="kr">
    <head>
        <title>Home - My first website</title>
        <style>
            h2 {
                color: blue;
                text-decoration: underline;
                font-weight: 300;
                font-style: italic;
                font-size: 50px;
            }
            main {
                text-align: center;
                color: tomato;
            }
        </style>
    </head>
    <body>
        <header>
            <h2>jeongwle times</h2>
        </header>

        <main>
            <p>hello!</p>
        </main>
        <footer>
            &copy; 2020 N.C
        </footer>
    </body>
</html>

위 코드의 실행결과

 

Blocks and inlines

1. box(div, header, main, section, footer, article ...). 어떤 box를 만들든 그 옆에는 아무것도 오지 않는다.

2. span, link, img 처럼 바로 옆에 다른 요소들이 올 수 있는 것들도 있다.

1번과 같은 요소들을 block이라 부르고 다른요소가 옆에 올수 있는 것들을 inline이라 부른다. 이것을 알아두면 나중에 디자인을 하거나 레이아웃을 다룰때 큰 도움이 된다고 한다.

 

inline은 높이와 너비를 가질 수 없고 block은 높이와 너비가 있다.

block요소를 inline 요소로 변경이 가능하고 그 반대 또한 가능하다.

 

block(box)의 세가지 속성 margin, border, padding

 

block의 3가지 속성(property)

1. margin

margin은 박스의 경계(border) 바깥에 있는 공간을 말한다.

margin: 20px; 값이 하나인 경우 상하좌우 모두 20px로 적용한다는 의미이다.

margin: 20px 15px; 값이 두개인 경우 20px는 위, 아래, 15px는 왼쪽, 오른쪽으로 인식한다.

margin: 20px 15px 10px 5px; 값이 네개인 경우 위부터 시계방향으로 위, 오른쪽, 아래, 왼쪽 순으로 적용된다.

주의할 점 : collapsing margins (위 아래쪽에서만 일어남 상위 block의 위와 아래부분이 하위 block의 위와 아래와 겹칠 때 생기는 현상 -> 둘의 위 아래 마진이 하나로 취급된다.) 너무 깊게 생각하지 말고 이런게 있다는 것 정도만 알아두면 된다고 한다.

collapsing-margins 현상

 

2. padding

padding은 박스의 경계(border) 안쪽의 공간을 말한다.

padding 또한 value 값을 넣을 때 margin과 같은 원리로 동작한다. 값이 하나일 경우, 둘일 경우 등등

padding이 무엇인지와 태그에 아이디를 부여했을때 어떻게 select해서 css코드를 작성하는디 등에 대한 예시를 밑에 코드로 남겨두겠다

<!DOCTYPE html>
<html lang="kr">
    <head>
        <title>Home - My first website</title>
        <style>
            html {
                background-color: tomato;
            }
            body {
            
                background-color: thistle;
                margin: 20px;
                padding: 20px;
            }
            div {
                height: 150px;
                width: 150px;
                padding: 10px;
            }
            #first {
                background-color: whitesmoke;
                width: 150px;
                height: 150px;
            }
            #second {
                background-color: teal;
                width: 100px;
                height: 100px;
            }
            #third {
                background-color: wheat;
                width: 50px;
                height: 50px;
                
            }
            #fourth {
                background-color: blanchedalmond;
                width: 25px;
                height: 25px;
            }
        </style>
    </head>
    <body>
        <div id="first">
            <div id="second">
                <div id="third">
                    <div id="fourth"></div>
                </div>
            </div>
        </div>
    </body>
</html>

위 코드의 실행결과

html 블럭을 사용하면 tistory css까지 건드려버려서 올릴 수가 없다. 대충 위와 같은 사진의 그림이 나오는데 관리자 도구를 켜서 margin과 padding을 눌러보면서 확인해보면 좋을 것 같다.

 

3. border

border은 말 그대로 box의 경계선이다.

border에 value를 주는법 -> border: 2px(size), solid(style), black(color)

스타일은 이곳에서 찾아 볼 수 있다.

 

inline

inline은 border도 적용되고 padding도 적용되지만 margin은 좌우로만 가질 수 있다.

 

Box 옆에 또 Box를 배치하는 법(Flexbox)

프로퍼티로 display를 설정할 수 있는데 display: inline-block은 문제가 많으므로 사용하지 않는다.

flexbox를 이용해서 box 옆에 box를 배치할 수 있다. flexbox를 사용하기 위해서는 세가지 규칙을 따라야 한다.

첫 번째 규칙은 자식 엘리먼트에 어떤 것도 적지 말아야 한다는 것이다. 부모 엘리먼트에만 명시해야 한다.

<body>
  <div></div>
  <div></div>
</body>

 

이렇게 있을 경우 css 코드를 div에 적용하지 않고 body에 적용해서 box옆에 box를 배치할 수 있게 한다는 뜻이다. 그래서 box들을 우리가 원하는 곳으로 움직이게 하기 위해서는 부모 엘리먼트를 flex container로 만들어야 한다. 이를 위해 부모 엘리먼트에 display: flex;를 적어주면 된다.

 

두 번째 규칙과 세 번째 규칙은 주축(main axis)와 교차축(cross axis)이다.

main axis & cross axis

주축의 default 값은 수평이고 교차축의 default 값은 수직이다. default 값이 존재한다는 것은 바꿀 수 있다는 말이기도 하다.

justify-content 는 주축에 적용이되고 align-items 는 교차축에 적용이 된다.

만약 여기서 body의 height이 설정되어 있지 않다면 body의 height은 박스의 height이 되므로 align-items 를 설정하더라도 적용이 되지 않을 수 있다. 박스가 이미 맨 위 아래를 차지하고 있기 때문이다.

 

position property

1. position: fixed

스크롤을 내려도 계속 고정된 위치에 박스가 존재한다. 박스가 고정된 위치는 초기에 위치한 자리이다. 

 

※ top, right, bottom, left 넷중에 하나만 고쳐도 다른 layer로 바뀐다.

layer가 바뀐 모습

 

2. position: static(default)

레이아웃이 박스를 처음 위치하는 곳에 두는 것을 말한다고 한다.

 

3. position: relative

top, right, bottom, left를 이용해서 아주 조금씩 위치를 옮기는 데 유용하게 사용할 수 있다. 엘리먼트가 처음 위치한 곳을 기준으로 위치를 수정한다.

position: relative로 왼쪽 밑 위로 옮긴 모습

 

4. position: absolute

position: absolute인 박스의 부모박스가 postion: relative인지 확인하고 아니라면 position: relative인 부모를 찾기위해 더 상위로 올라가게 되고 relative인 부모를 찾았을 경우 그 부모의 크기를 기준으로 맨 위, 아래, 오른쪽, 왼쪽으로 absolute 박스를 움직이게 한다.

음.... 조금 완벽하게 이해한 것 같지는 않다.

 

pseudo selector

pseudo selector 또한 종류가 무수히 많고 전부 외울 수는 없다. 필요할 때 검색해서 찾아 사용해야 할 것 같다.

음.. 설명을 제대로 못하겠으니 이미지로 기록을 해볼까 한다.

div: first-child, div: last-child

 

odd 는 2n + 1로도 대체 가능하다.

Attribute selector page Click

 

 

combinator

body > span, p span, p + address, p ~ span 4가지 combinator

 

State

:active -> 버튼을 누르고 있을 때 색이 변한다.

:hover -> 버튼위에 마우스를 대면 색이 변한다.

:focus -> 키보드로 탭으로 움직이다가 선택되면 색이 변한다.

:visited -> link에만 적용된다.

:focus-within -> focus된 자식을 가진 부모 엘리먼트의 상태를 말한다. 밑에 사진 두개를 보고 이해해보자.

커서를 올리니 form의 border의 색이 변했다.
state를 다른 element와 연계해서 사용하는 예시

 

Color 표기법

color를 표기하는 방법에는 3가지가 있다.

계속 써오던 것처럼 색상명을 적는 것과 hex로 나타내는 것과 rgb로 나타내는 것 세가지가 있다. 이중에 rgb는 rgba로 해서 a부분에 0~1까지의 값을 줘서 투명도를 설정할 수 있다.

 

Variable 사용법

:root {
  --main-color: #9acd32;
  ... your custom property
}
p {
  color: var(--main-color);
}

div {
  background-color: var(--main-color);
}

루트는 모든 문서의 출발점이 된다. 여기서 property를 custom해놓으면 Variable을 이용해서 유용하게 사용할 수 있다. custom property를 작성할 때도 규칙이 존재한다. --으로 시작하여야 하고 단어사이를 하이픈(-)으로 연결해야 한다. 띄어쓰기나 다른 문자들은 사용하면 안된다.

더 자세하게 살펴보기

 

맛보기는 여기서 끝났다. 정말 기초적인 것만 배우면서 어떻게 사용해야하는 지 이해하는 정도만 가르쳐 준 것 같다. 검색과 실습을 통해 숙련도를 끌어올리는 것은 이제 본인의 몫인 것 같다.

 

728x90
반응형

'Study > ft_transcendence' 카테고리의 다른 글

[React] 22.07.11 회고록  (0) 2022.07.11
[CSS] CSS 조금 더 깊게 맛보기 (노마드 코더)  (0) 2022.06.17
[Html] html 맛보기(노마드 코더)  (0) 2022.06.07
[UI / UX] UI 와 UX 란?  (0) 2022.06.06
[Transcendence] 시작  (0) 2022.06.02

댓글