프론트엔드

CSS 기본 개념

도우 2025. 1. 19. 15:10
반응형

1. HTML 과 CSS 연동 방법

적용할 태그에 style 속성으로 넣기 (인라인 스타일)

가급적 사용하지 않아야 한다.

<html>
	<body>
		<h1 style="color:blue">Hello World!</h1>
	</body>
</html>

 

HTML 문서 <head> 안에 <style> 태그로 넣기 (내부)

내부 방식보다는 외부부 방식을 많이 사용한다.

<html>
	<head>
		<style>
			h1 {
				color: blue;
			}
		</style>
	</head>
	<body>
		<h1>Hello World!</h1>
	</body>
</html>

 

HTML 문서 <head> 안에 CSS 파일로 링크하기 (외부)

<html>
	<head>
		<link rel="stylesheet" href="css/sytle.css">
	</head>
	<body>
		<h1>Hello World</h1>
	</body>
</html>

 

 

2. Selector

HTML 문서의 특정 부분에 대해 렌더링 방법을 정의하기 위해서는 특정 부분을 선택할 수 있어야 함 CSS Selecotr는 이런 특정 부분을 선택하기 위한 문법이다.

출처 :  https://poiemaweb.com

  • 전체 셀렉터(``) : 모든 요소를 선택
  • 태그 셀렉터 : HTML 태그 이름으로 선택 (예 : p, div, span)
  • 클래스 셀렉터 (.) : 특정 클래스가 적용된 요소 선택
  • ID 셀렉터(#) : 특정 ID를 가진 요소 선택
  • 속성 셀렉터([]) : 특정 속성이나 속성값을 가진 요소 선택

전체 셀렉터 (Universal Selector)

HTML 문서 내의 모든 요소를 선택한다. html 요소를 포함한 모든 요소가 선택된다(head 요소 포함)

* { margin: 0; }

태그 셀렉터 (Type Selector)

지정된 태그명을 가지는 요소를 선택한다

p { color: blue; }

클래스 셀렉터 (Class Selector)

class 속성 값을 지정하여 일치하는 요소를 선택한다. class 속성 값은 중복될 수 있다.

.highlight { background: yellow; }

ID 셀렉터 (ID Selector)

id 속성 값을 지정하여 일치하는 요소를 선택한다. id 속성 값은 중복될 수 없는 유일한 값이다.

#header { font-size: 24px; }

속성 셀렉터 (Attribute Selector)

지정된 속성을 갖는 모든 요소를 선택한다.

input[type="text"] { border: 1px solid gray; }
/*input 요소 중에 text 속성을 갖는 모든 요소*/

 

 

3. 복합 Selector (Combinator)

태그 안에, 또 다른 태그를 넣을 수 있으므로, 각 태그 또는 요소 간에 부모/자식의 관계가 매겨짐 관계를 기반으로 HTML 문서 특정 부분을 선택할 수 있는 문법이다.

  • 후손 셀렉터 (Descendant Selector) : 스페이스로 표시
  • 자식 셀렉터 (Child Selector) : > 로 표시
  • 인접 형제 셀렉터 (Adjacent Sibling Selector) : + 로 표시
  • 일반 형제 셀렉터 (General Sibling Selector) : ~ 로 표시

 

후손 셀렉터

부모 태그 안에 있는 모든 하위 태그를 하위 요소, 후손 요소라고 부름 부모 태그(Selector1) 안에 있는 모든 태그 중에 selector2를 선택한다.

selector1 selector2
<style>
	div span {
		color: royalblue;
	}
	/* div 요소의 후손요소 중 p 요소*/
</sytle>

 

자식 셀렉터

부모 태그(selector1) 안에 있는 바로 다음 레벨의 태그 중에 selector2를 선택한다.

selector1 > selector2
<style>
	h1 { color: black}
	div > p {color: red;}
</style>

 

인접 형제 셀렉터

태그 (selector1) 와 동일 레벨에 위치하고, selector1의 바로 뒤에 위치하는 selector2를 선택한다. 즉, selector1과 selector2 사이에 다른 태그가 위치할 경우 선택이 안된다.

selector1 + selector2
<style>
	h1 + h2 { color: red;}
</style>
<body>
	<div>
		<h1>Hello</h1>
		<h2>World!</h2>
	</div>
</body>

 

일반 형제 셀렉터

태그(Selector1)와 동일 레벨에 위치하고, selector1의 뒤에 위치하는 selector2를 선택한다. 즉, selector1과 selector2 사이에 다른 태그가 위치해도 선택 가능하다.

selector1 ~ selector2
<style>
	h1 ~ p { color: red; }
</style>
<body>
	<h1>Hello</h1>
	<h2>world !</h2>
	<p>일반 형제 셀렉터는 사이에 다른 태그가 위치해도 선택이 가능합니다.</p>
</body>

 

 

4. 가상 클래스 셀렉터 (Pseudo-Class Selector)

가상 클래스는 요소에 특정 이벤트 발생시를 선택하는 문법이다. ex) h1 태그 요소에 마우스가 올라갔을 때 이러한 특정 상태에는 원래 클래스가 존재하지 않지만 가상 클래스를 임의로 지정하여 선택하는 방법이다. 가상 클래스는 마침표 대신 콜론을 사용한다. CSS 표준에 의해 미리 정의된 이름이 있기 때문에 임의의 이름을 사용할 수 없다

selector:pseudo-class { property: value; }
  • link : 방문하지 않은 링크가 적용된 요소
  • visited : 방문한 링크가 적용된 요소
  • hover : 특정 요소에 마우스가 올라간 상태
  • active : 링크 요소를 클릭한 상태
  • focus : 특정 요소에 포커스가 있는 상태
<style>
	/* a 요소가 방문하지 않은 링크일 때 */
      a:link {
        color: red;
      }
	/* a 요소가 방문한 링크일 때 */
      a:visited {
        color: blue;
      }
	/* a 요소에 마우스가 올라와 있을 때 */
      a:hover {
        color: green;
      }
	/* a 요소가 클릭된 상태일 때 */
      a:active {
        color: gray;
      }
	/* input 요소에 포커스가 들어와 있을 때 */
      input:focus {
        color: brown;
      }
</style>

 

 

5. 가상 요소 셀렉터 (Pseudo-Element Selector)

가상 요소는 요소의 특정 부분에 스타일을 적용하기 위하여 사용된다.

  • 요소 콘텐츠의 첫글자 또는 첫줄
  • 요소 콘텐츠 앞 또는 뒤

가상 요소에는 두 개의 콜론(::)을 사용한다. CSS 표준에 의해 미리 정의된 이름이 있기 떄문에 임의의 이름을 사용할 수 없다.

  • ::first-letter : 요소의 첫 글자 선택
  • ::first-line : 요소의 첫 라인(줄) 선택
  • ::after : 요소의 뒤에 위치하는 공간 선택
  • ::before : 요소의 앞에 위치하는 공간 선택
  • ::selection : 요소에서 드래그한 부분을 선택
selector::pseudo-element { property:value; }
<style>
	/* p 요소 콘텐츠의 첫글자를 선택 */
	p::first-letter { font-size: 3em; }
	/* p 요소 콘텐츠의 첫줄을 선택 */
	p::first-line { color: red }

	/* h1 요소 콘텐츠의 앞 공간에 content 속성 값을 삽입 */
	h1::before{
		content: " HTML!!! ";
		color: blue;
	}

	/* h1 요소 콘텐츠의 뒷 공간에 content 속성 값을 삽입한다. */
	h1::after{
		content: " CSS3!!! ";
		color: red;
	}

	/* 드래그한 콘텐츠 선택한다. */
	::selection {
		color: red;
		background: yellow;
	}
</style>

 

 

6. 상속 (Inheritance)

상속이란 상위(부모, 조상) 요소에 적용된 프로퍼티를 하위(자식, 자손) 요소가 물려 받는 것을 의미한다. 모든 프로퍼티가 상속되는 것은 아니다. 프로퍼티 중에는 상속이 되는 것과 되지 않는 것이 있다.

property Inherit

width/height no
margin no
padding no
border no
box-sizing no
display no
visibility yes
opacity yes
background no
font yes
color yes
line-height yes
text-align yes
vertical-align no
text-decoration no
white-space yes
position no
top/right/bottom/left no
z-index no
overflow no
float no
<style>
	.text-red {
		color: red;
		border: 1px solid #bcbcbc;
		padding: 10px;
	}
</style>
<body>
	<div class="text-red">
		<h1>Heading</h1>
		<p>Paragraph<strong>strong</strong></p>
		<button>Button</button>
	</div>
</body>

color는 상속되는 프로퍼티로서 자식 요소는 물론 자손 요소까지 적용된다. 하지만 button 처럼 요소에 따라 상속 받지 않는는 경우도 존재한다.

 

강제 상속 설정

부모의 프로퍼티 중 상속되지 않는 프로퍼티값을 상속하고 싶을 때에는, 자식 요소에 해당 프로퍼티를 inherit으로 설정하면 된다.

<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <style>
      p {
        color: OrangeRed;
      }
      h1 {
        border: 1px solid OrangeRed;
      }
      span {
        border: inherit;
      }
    </style>
  </head>
  <body>
    <p>p 태그 안에 <span>span 태그를</span> 넣어보았습니다.</p>
    <h1>p 태그 안에 <span>span 태그를</span> 넣어보았습니다.</h1>
  </body>
</html>

 

CSS 우선순위

중요도, 선언 순서보다 명시도가 주로 우선순위에 많이 영향을 미치며, 계산 방식을 가볍게는 알고 있어야 한다.

  1. HTML 문서에서 뒤에 나오는 CSS가 우선순위가 높음
  2. 기본 우선순위
    • 프로퍼티 값 뒤에 !important 있는 경우 (우선순위 점수 : 무한대) -> .yellow { background-color: yellow; !important; }
    • 태그 안에 속성으로 적은 style에 의해 설정된 프로퍼티 (우선순위 점수 : 1000점) -> <p style="texct-align:center>스타일</p>
    • id로 선택한 CSS Selector 에서 적용된 프로퍼티 (우선순위 점수 : 100점) -> #test { color: blue; }
    • class, html 속성, 수도 클래스로 선택한 CSS Selector에서 적용된 프로퍼티 (우선순위 점수 : 10점) -> .test { color : green; }, [title="test"]{ color: blue; }
    • 태그 또는 가상 요소 셀렉터로 선택한 CSS Selector에서 적용된 프로퍼티 (우선순위 점수 : 1점) -> h1 { color:red; }
    • 전체(``)로 선택한 CSS Selector에서 적용된 프로퍼티 (우선순위 점수 : 0점) -> { margin: 0; }
    • 상속된 프로퍼티 (우선순위 점수 : 마이너스)

 

💡 간단하게 정리하면 아래와 같다. !important > Inline Style > id > class > tag

 

 

7. CSS BOX MODEL (박스 모델)

block 또는 inline-block 특성을 가지는 요소는 box 형태를 가지며, box 형태의 세부 사항을 수정할 수 있다.

출처 :  https://poiemaweb.com

  • content : 요소의 텍스트나 이미지 등 실제 내용이 위치하는 영역. width, height 프로퍼티를 가진다
  • padding : border 안쪽에 위치하는 요소의 내부 여백 영역. padding 프로퍼티 값은 패딩 영역의 두께를 의미한다. 기본색은 투명(transparent)이므로, 요소에 적용된 배경의 컬러, 이미지가 패딩 영역에 적용된다.
  • border : 테두리 영역. border 프로퍼티 값으로 테두리 두께를 지정할 수 있다
  • margin : border 바깥에 위치하는 요소의 외부 여백 영역이다. margin 프로퍼티로 마진 영역의 두께를 지정할 수 있다. 기본색은 투명(transparent)이며, 배경색 지정이 불가능하다.
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <style>
      div {
        /* 배경색 지정: content 와 padding 영역에 적용 */
        background-color: orange;

        /* 디폴트로 content 영역 너비, box-sizing 프로퍼티를 통해 변경 가능(추후 설명) */
        width: 300px;

        /* 패딩 영역 두께 */
        padding: 20px;

        /* 테두리: 두께 형태 색상 (테두리는 색상도 지정 가능) */
        border: 10px solid yellow;

        /* 마진 영역 두께 */
        margin: 20px;
      }
    </style>
  </head>
  <body>
  </body>
</html>

 

box-sizing

box-sizing 프로퍼티는 width, height 프로퍼티의 대상 영역을 변경할 수 있다.

출처 :  https://poiemaweb.com

box-sizing 프로퍼티의 기본값은 content-box이다. 이는 width, height 프로퍼티의 대상 영역이 content 영역을 의미한다. box-sizing 프로퍼티의 값을 border-box로 지정하면 마진을 제외한 박스 모델 전체를 width, height 프로퍼티의 대상 영역으로 지정할 수 있어서 CSS Layout을 직관적으로 사용할 수 있게 한다.

  • content-box : width, height 프로퍼티 값은 content 영역 의미 (디폴트)
  • border-box : width, height 프로퍼티 값은 content + padding + border를 포함한 영역 의미
<html>
  <head>
    <style>
      .content-box {
        width: 600px;
        border: 10px solid;
        padding: 50px;
        margin: 50px;
        background-color: red;
      }

      .border-box {
        box-sizing: border-box;
        width: 600px;
        border: 10px solid;
        padding: 50px;
        margin: 50px;
        background-color: red;
      }
    </style>
  </head>
  <body>
    <div class="content-box">content-box</div>
    <div class="border-box">border-box</div>
  </body>
</html>

 

8. 참고문헌

https://poiemaweb.com/

 

웹 프로그래밍 튜토리얼 | PoiemaWeb

Front-end Development Tutorial

poiemaweb.com

 

https://www.inflearn.com/course/프런트엔드-풀스택-2

 

풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2] 강

잔재미코딩 DaveLee | 현업에서 실제 웹서비스를 개발한 경험을 기반으로, 입문자를 위한 실제 상용화도 가능한 수준의 웹과 앱서비스를 개발하는 것을 목표로 하는 풀스택 시리즈 강의입니다. 이

www.inflearn.com

 

반응형