프로젝트/[개인] 프론트엔드 로드맵

[용어정리] Part3 CSS | Learn the basics(기본 배우기)

MI개발자 2022. 1. 13. 20:32
Front-end 로드맵 따라하기

CSS - Cascading

(요약) 키워드로 알아보기 
CSS(Cascading Style Sheets)란?
직역하면 '*캐스케이딩 스타일 시트' 또는 '종속형 시트'라고한다.
https://en.wikipedia.org/wiki/List_of_stylesheet_languages
- 마크업언어가 실제 표시되는 방법을 기술하는 스타일언어(#Style Sheet Language)로, HTML과 XHTML에 주로 쓰이며, XML에서도 사용 할 수 있다. W3C의 표준이며, 레이아웃과 스타일을 정의 할 때의 자유도가 높다.

- Style Sheets: 홈페이지를 만드는 데 사용될 여러 가지 스타일들을 미리 정의해놓은 후, 원하는 곳에 이 스타일을 지정하면 손쉽게 홈페이지의 일관성을 유지할 수 있게해두었다. 즉, 스타일을 분리해서 관리하기 위해 만들어진 언어가 바로 CSS이다.

정리 : 
HTML문서 내에 정보콘텐츠와 스타일 가량 타이포그래피(Typography), 레이아웃, 이미지 등의 이런 시각적인 요소를 모두 포함한 '스타일언어'이다. (즉, HTML마크업 한 것을 예쁘게 꾸미게 도와준다) HTML요소가 표시되는 방식을 설명

*캐스케이딩란?
'위에서 아래로 흐르는', '상속 또는 종속하는'의 의미를 갖고있다. 따라서 Cascading은 선택자의 적용된 많은 스타일 중에 어떤 스타일로 브라우저에 표현할지 결정해주는 원리를 의미하게 된다.

 

웹사이트를 스타일링할때 총 크게 3가지로 나눠볼 수 있다.

Author Style (우리가 작성하는 css 파일) 

 ⬇ (우리가 지정한 스타일링이 없다면? )

User Style (브라우저에서 우리가 원하는 즉,(사용자스타일대로 바꾸는거) | 사용자 vs 작성자

  • 작성자 :
    CSS 파일에서 스타일을 정의하거나 HTML에 인라인 스타일을 추가한 사람 (
    페이지를 디자인/스타일링한 프론트엔드 개발자)
  • 사용자 :
    페이지를 사용할 사람/고객(최종 사용자)이들은 CSS를 수동으로 스타일을 바꾸지는 않지만, 접근성 옵션을 통해 글꼴 크기 등을 늘림

 ⬇(사용자가 지정한 스타일링이 없다면, 브라우저가 지정한 스타일로 넘어가게된다)

Browser(브라우저에서 기본적으로 적용된 스타일)

 

하지만 이 Cascading을 끊어내는게 하나 있는데, 바로 ❗important 이다. <- 가능한 쓰지 않기

Cascade_and_inheritance

최고의루트 - CSS/:root

사용자 정의 속성- CSS/--* 


*마크업언어(markup, markup language)란?

  • 태그 등을 이용하여 문서나 데이터의 구조를 명기하는 언어의 한 가지이다.
  • 태그는 원래 텍스트와는 별도로 원고의 교정부호와 주석을 표현하기 위한 것이었으나 용도가 점차 확장되어 문서의 구조를 표현하는 역할을 하게 되었다. 이러한 태그 방법의 체계를 마크업 언어라 한다.
  • 이는 일반적으로데이터를 기술하는 정도로만 사용되기에 프로그래밍 언어와는 구별된다.

 

더 알아보기 

 왜 Document와 Style을 분리해서 관리해야 할까?

우리가 CSS없이 HTML만으로 제작한다면 ? 

HTML의 목적자체는 웹으로 정보콘텐츠를 공유하기 위한 것인데 그럼, 어떠한 HTML의 경우는 그 정보가 엄~청나게 많이 담겨있을텐데 거기에 일일이 하나하나 모든 요소의 스타일까지 적용해준다면 그럼, 문서가 뒤죽박죽 지저분해질것이다.

 

이렇게 완성된 문서의 경우는 이후 스타일을 변경하거나, 유지보수를 할 때 굉장히 어려워 질 수 있다. 따라서 이런 문제점을 해결하기 위하여 국제컨소시엄(W3C, World Wide Consortium)에서 웹 표준화를 추친하는 곳이다.

 

(ex. W3C에서 여러 교육기관, 마이크로소프트사 등의 기업들이 모여 표준화를 추진한다. 따라서 W3C에서 "HTML5에는 <...>, <...>가있어"라고 정의를 하면 세상의 현존하는 Chrome, Firefox, Safari, Edge 등의 모든 브라우저들이 표준에 맞게 브라우저를 구현해야된다. 이에 우리가 HTML에 정의된 태그를 사용해서 웹페이지를 만들면 모든 브라우저상에서 잘 표현될 것이라고 믿고 사용하는 것이다. 다만 지원되는지 안되는지 '브라우저 호환성'(Browser compatibility) 에서 보면된다.  )

 

바로 이곳에서 만든 Style Seets전용 언어가 CSS이다.

W3C가 관리하는 대표적인 웹 표준

https://ko.wikipedia.org/wiki/W3C

CSS라는 스타일을 별도로 관리하는 언어를 만들어서 거기서 스타일을 관리를 하면 웹사이트의 스타일을 더 일관적으로 유지할 수 있고, 유지보수또한 쉬워진다. 이래서 CSS는 이러한 목적으로 탄생되었다!


❗ CSS Syntax 알아보기(선택자, 선언부(선언블록) 크게 2가지로 보자)

우선, CSS 스타일언어의정확한 명칭에 대해 알기!

 

1. 선택자 (selector) : 내가 HTML을 꾸미려면 '지목'을 해야된다.

  • CSS Selector :
    • 문서 트리에서 CSS를 적용할 엘리먼트를 패턴 표준 (현재 가장 최신버전은 2018년도에 발표한 CSS Level4이다.)
      https://developer.mozilla.org/ko/docs/Web/CSS/Attribute_selectors

선택자 종류에 대해 알아보자!
크게 (1)엘리먼트 선택자(Elemental selectors), (2)속성 선택자(Attribute selectors) 2개가 있다.

(1)엘리먼트 선택자(Elemental selectors)

  • 타입 선택자 : HTML태그 이름
  • 수도 엘리먼트 : 문서 트리에 직접 존재하지는 않지만 엘리먼트처럼 취급
  • 유니버설 선택자 : 모든 HTML태그를 선택
타입type
(HTML태그 이름's)
div, span, input, ... 
*수도pseudo엘리먼트 ::after, ::before, ::selection, ::placeholder, ...
유니버설universal * (모든 엘리먼트 선택 가능)
  • 수도엘리먼트는 가상엘리먼트라고도 불리며, html트리에는 존재하지는 않지만, html엘리먼트처럼 취급된다.
    ( 콜론 :: 이 2개이다)
  • 특정 정보 혹은 여러가지 상황에 의해 적용이된다 (lilnk에 마우스를 올리면 hover가된다.)

(2)속성 선택자(Attribute selectors) - HTML태그말고, 태그의 여러 속성들에 의해 정해진다.

  • 아이디 선택자 : 엘리먼트의 id속성
  • 클래스 선택자 : 엘리먼트의  class속성
  • 수도 클래스 : 특정 정보나 상황에 의해 적용
  • 속성 선택자 : 엘리먼트의 모든 속성
아이디id #main, #section-id, ...
클래스class .header, .sidebar, .main-menu, ...
수도pseudo클래스 :hover, :visited, :focus, :is( ), :not( ), :lang( ), ...
*속성attribute [href], [class="example"], [attr~ = "str"], ...
  •  속성 선택자는 [href]속성이 있는 모든 엘리먼트를 찾는다
  • [class="example"] 클래스속성의 값이 정확히 example이어야한다! (또 다른 클래스가 있어서도 안된다)
  • [sttr~="str"] sttr속성에 str라는 문자열이 포함만 되있으면된다. 이외에 특정 문자열로 시작하거나, 끝나는 속성또한 찾을 수 있다. https://www.nextree.co.kr/p8468/

속성선택자 예제: 

https://github.com/luckyjek/TIL_/tree/main/TodayWorld/css-basic

 

GitHub - luckyjek/TIL_: Today I learned / 오늘의 학습 기록소

:bulb: Today I learned / 오늘의 학습 기록소. Contribute to luckyjek/TIL_ development by creating an account on GitHub.

github.com

 

 

2. 선언부 (declarations)

  • 크게 3가지 파트로 이루어져있다.
    1) 속성(property)을 정해줘야된다.
    2) 속성에 따른 값(value)을 넣어줘야한다. (ex. 글꼴, 색상, 레이어배치 등.. 가능해진다.)
    3) (세미콜론) 절때 잊지말자! 오류가나도 티가 안난다..😥 ,(콤마)의 역할로서 병렬적으로 나열할 때 사용한다.

혹시라도 우선순위 높은 속성들을 위주로 공부하고싶다면 아래주소를 참고하자.
https://rc-dot-cr-status-staging.appspot.com/metrics/css/popularity


BEM : https://nykim.work/15

html에서 컴포넌트 클래스 이름을 작성할 때 너무너무 복잡하고, 유지보수 하기가 힘들기 때문에 어떻게하면 클래스를 작성할때 잘 작성할 수 있을지에 대해서 이름을 작성하는 방법에 대해서 정의한 규칙이다.

 

이런 뱀 말고도 다양한 방법들이 존재하는데, 요즘 많은 사람들이 뱀을 이용하고있고 사용하고 있기때문에 뱀 규칙에 따라 한 번 만들어 보자! 나중에 프로젝트를 조금더 모듈화해서 만들고, 포스트 css같은 아이들을 이용하게 되면 이런 뱀은 필요가 없다.

하지만 이런 모듈화를 이용하지않고, 간단하게 프로젝트를 만든다면, 이런 뱀을 이용해서 만들면 조금 더 손쉽게 이름을 만들 수가 있는데 자,  본론으로 뱀은 무엇인가? 바로 B는 block E는 element M은 modifier 즉,  block과 element와 modifier로 나누어서 이름을 작성하는것을 말한다.

 

만약 카드를 만든다고 한다면 block은 카드 자체가된다.  (즉, 카드 하나가 우리가 만들고자 하는 컴포넌트이다.) 여기서 안에 들어있는 이미지나 image, title, button들은 다 element이다. (즉, 한가지, 더이상 분리될 수 없는 엘리멘트 자체인 것이다.) ex . block_ _element- -modifier

 

이제 어떻게 이름을 작성하는지 한 번 보자. card는 블럭 자체이므로  card 하나라고 적고, img, title은 블럭안에있는 엘레멘트이기 때문에  _ _(언더스코어) 2개를 이용해서 이미지 카드 안에있는 이미지 카드 안에있는 타이블, 카드안에있는 디스크립션 , 버튼 또한 이렇게 각각정의해서 사용할 수가있다.

그리고 여기서! 버튼이 과연 블럭안에 속해있는 컴포넌트인지 아닌지를 조금 고민할 필요가 있다. 만약 버튼이 카드 안에서 뿐만 아니라 다른 컴포넌트에도 공통적으로 쓰인다면 이 버튼은 카드안에 속해있을 필요가 없다. 그래서 card _ _라고 정의하는 것 보다 버튼은 버튼자체로 컴포넌트 자체이므로 블럭으로 정해서

ex. (왼) .button  , (오) .button--blue

라고 작성하는 것이 좋다.

 

그럼 만약 card가 여러가지가 묶여있는 즉, cards라는 컨테이너 안에 들어 있다면 카드를 다시

.cards

.cards _ _ card

.cards _ _ card _ _ title

.cards _ _ card _ _ description

이런식으로 정해야 될까? 라고 좀 생각해 볼 필요가 있을 것 같다. 많은 사람들이 다른 방식으로 또 이렇게 토론 할 수도 있겠지만 아니라고 말해주고싶다.

 

(주관적인 생각) 이렇게 하이라키(hierarchy)대로 이름을 일일이 다 작성하는 것은 뱀은 아니다. 뱀은 컴포넌트 단위로, 블럭 레벨로 이렇게 이름을 작성하는 것이기 때문에 카드는 카드 자체로 하나의 컴포넌트이다. cards는 이런 카드를 묶어놓은 컨테이너뿐이다. 그래서 

.cards

.card

.card _ _ title

.card _ _ description

이와같이 작성하는게 더 올바를 것 같다. 그래서 만든 이 card라는 블럭은 cards라는 컨테이너 안에 들어갈 수도있고, 또 다른 부분에서도 쉽게 쓰여질 수 있기 때문이다. 그래서 이런식으로 작성하는것이 조금 더 코드 양을 줄일 수도 있고, 앞에서 본 방식대로 작성하게되면 타이핑해야하는게 너무 많다. 그래서 깔끔하게 방식대로 작성하는걸 추천한다.


함께보면 좋은 자료

mozilla

goorm-김버그 HTML&CSS는 재밌다.

패스트캠퍼스

드림코딩엘리