본문 바로가기
CSS

[CSS] CSS 첫걸음

by 개발지망생 2023. 2. 7.

📖 CSS 정의

Cascading Style Sheets의 준말.

HTML이 웹페이지의 내용을 담당한다면, CSS는 웹페이지의 디자인을 담당한다.

정의하는 방법으로는

 

  • 내부 스타일시트
  • 외부 스타일시트
  • 인라인 스타일시트

등이 있다.

 

🤔 CSS를 적용하는 3가지 방법

✅ Inline 방식

해당하는 Tag안에 style 속성을 통해 적용하는 방법

<div style="background-color: aqua;">하이</div>
💡 css 속성뒤에 마무리로 세미콜론을 넣어준다.
제일 마지막 속성에는 세미콜론을 안 넣어도 동작은 하나 넣어주는 게 명시적으로 좋다.

 

✅ Style tag 방식

head 태그 안에 style태그를 선언하여 적용하는 방법

<!DOCTYPE html>
<html lang="ko">

<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>HTML/CSS 예시 파일</title>
    <!-- head안에 style 태그 적용 -->
    <style>
        div {
            background-color: aquamarine;
        }
    </style>
</head>

<body>
    <div>하이</div>
</body>

</html>
💡 style tag는 왜 head 안에 선언해야 될까?
html 문서는 위에서부터 아래로 읽기 때문에 style tag가 body태그의 중간이나 끝에 위치할 경우 css가 처음에 적용 안된 채로 렌더링 되다가 나중에 적용되어 속도가 늦거나 오류로 보일 수 있다

 

✅ link를 통한 외부 css파일 적용 방식

style태그와 마찬가지로 head안에 link태그를 선언하여 적용하는 방법

 

link 구성요소

<link rel="stylesheet" href="./style.css">

rel : 어떤 타입의 파일을 가져올지 설정해 준다.

href : 가져올 파일의 경로를 넣어준다.

 

link 사용예제

아래와 같이 파일모음 안에 파일들이 구성되어 있다고 가정하고 코드 예제처럼 적용해 주면 된다.

📦파일모음
 ┣ 📜index.html
 ┗ 📜style.css

 

<!DOCTYPE html>
<html lang="ko">

<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>HTML/CSS 예시 파일</title>
    <!-- 
    	link태그도 style태그와 마찬가지로 head태그 안에 위치한다.
        rel : stylesheet라는 타입의 파일을 가져온다.
        href : 불러올 style.css 파일 경로.
     -->
    <link rel="stylesheet" href="./style.css">
</head>

<body>
    <div>하이</div>
</body>

</html>

 

🤔 tag, class, id에 CSS 적용방법

css에서 tag는 간단하게 태그명만 적으면 된다.

class를 적용할 땐 앞에 . 으로 시작하며, id는 앞에 #으로 시작한다.

div {
    background-color: aqua;
}

.class {
    background-color: red;
}

#id {
    background-color: blue;
}


✅ id와 class 차이점

ID

아이디는 고유한 값이기에 단 하나만 존재해야 한다.

🤙 여러 태그에 중복된다 하더라도 문제없이 브라우저에선 잘 렌더링 되나 개발자끼리의 약속이다
또한, 하나의 태그에 여러 아이디를 선언하지 않는다


CLASS

클래스는 여러 번 사용도 가능하며 한 줄에도 여러 개의 클래스가 들어갈 수 있다

ID / CLASS 사용 예시

잘못된 예시)

<!-- 똑같은 아이디가 여러개인 경우 -->
<div id="same">하이</div>
<div id="same">바이</div>

<!-- 한줄에 여러개의 아이디가 들어가는 경우 -->
<div id="same different">하이</div>

 

옳은 예시)

<!-- 개발자끼리의 약속으로 한 태그에 아이디는 단, 하나만 사용 -->
<div id="same">하이</div>

<!-- class는 같은 클래스도 여러번 사용 가능하다 -->
<div class="left"></div>
<div class="left"></div>

<!-- class는 한 줄에 여러개의 class 사용이 가능하다 -->
<div class="left right center"></div>

 

🤔 CSS선택자 우선순위

같은 선택자가 여러 CSS명령을 중복으로 받는 경우를 생각하면 일반적으로 우선순위가 같은 선택자라면 나중에 기술한 것이 먼저 기술한 것보다 우선순위가 높다.

선택자마다 우선순위를 변태처럼 수치화시킨 분들의 값을 가져왔다.

선택자 우선순위
전체 선택자(*) 0
type 선택자 (p, h1, ul, ...) 1
가상 선택자 (:first-child, ...) 10
class 선택자 (.abc, ...) 10
id 선택자 (#abc, ...) 100

태그에 직접 입력하는 인라인 스타일은 위의 모든 선택자보다 우선으로 실행되며, 최우선으로 CSS를 적용해야 할 경우에는 선택자의 마지막에 "!important"를 붙이면 된다.

div { color: red !important;}

 

결론

태그선택자 < class 선택자, 가상 선택자 < id 선택자 < 인라인 스타일 < !important 순이 되겠다.

 


+추가

본문 내용은 위에서 끝났으나, 궁금한 점이 하나 생긴다.(안 생기면 지나가셔도 됩니다)

자바스크립트로 style을 준다면 인라인스타일로 적용된다. 그렇다면 해당 태그 style에 이미 !important 가 있는 경우에는 스크립트를 간절하게 적용해도 아래와 같이 적용이 안 되는 마음 아픈 일이 발생한다.

See the Pen 우선순위 예시 by newExpand (@newExpand) on CodePen.

 

 

한 가지 해결법은 인라인에도 !imprtant를 넣으면 인라인이 이긴다. 그럼 스크립트로 !important를 넣어보자

See the Pen Untitled by newExpand (@newExpand) on CodePen.

 

 

해결 됐다. 제일 좋은 방법은 이런 코드를 안 만나는 게 아닐까..? 계속 공부해 봐야겠다.

'CSS' 카테고리의 다른 글

[CSS] CSS Attribute 선택자 정리  (0) 2023.02.23
[CSS] 자주 쓰이는 Scss 핵심 기능  (0) 2023.02.14
[CSS] position 정리  (0) 2023.02.13
[CSS] CSS Box Model  (0) 2023.02.13
[CSS] Grid 활용법  (0) 2023.02.09

댓글