[CSS] CSS 기본개념

수리·2022년 9월 13일

Cascading 이란

  • 영어로는 작은 폭포, 폭포처럼 쏟아지는 물, 연속적인 이라는 뜻 (계속해서 떨어지는 느낌)
  • a) 우리가 styling 작성한 문서가 있고, b) styling 작성 안해도 브라우저에서 기본적으로 보여지는 UI가 있다. (브라우저에서 기본적으로 작성된 styling이 있기 때문)
  • 이 상태에서 브라우저 상에 버튼이 표시될 때,
    브라우저 왈 😎 : " 너네가 적은 버튼에 스타일링이 있어 없어?!"
    답변 : a에서 스타일링이 없다면 b로 떨어져 브라우저에 잇는 styling을 가져와서 기본값을 보여준다.

    이처럼 cscading은 정의된 것이 있다면 쓰고, 정의된 것이 없다면 다음으로 지정된 것으로 넘어간다.

1. 웹사이트 스타일링 3가지

  1. Author Style
  • 우리가 웹사이트를 만들때 제공하는 CSS 파일
  1. User Style
  • 사용자의 취향에 맞게 브라우저 스타일을 조정하는 것
    ex) 다크모드, 글자크기 작게 등
  1. Browser
  • HTML을 통해 봤듯이 브라우저 상에서 기본적으로 지정된 스타일
    ex) H1 태그는 가장 큰 제목 스타일이 적용되는 것처럼

Cascading은 우리가 지정한 스타일이 최고의 우선선위를 갖고 우리가 지정한 스타일이 없다면 사용자가 지정한 스타일로 넘어간다. 이도 없다면 브라우저 스타일로 넘어간다.

Cascading 순서 : Author Style > User Style > Browser

" 이 연결고리를 끊는 한가지가 있는데, 이는 !important 다.

  • !important는 CSS 척추가 잘못 되었거나 HTML 단계에서 박스 구조를 잘못 나눴을 때, 즉 나쁜 architecture 가 나왔을 때 important을 쓰게 된다.
  • 보통의 경우라면 important을 쓰지 않는 게 좋다.

2. Lable(레이블)

박스대로 HTML을 잘 나눠야 labeling이 쉬워지고, labeling이 잘 돼 있어야 CSS를 꾸밀 때 어떤 태그를 골라서 스타일을 적용할 지 쉬워진다.

2-1) Selectors
HTML의 어떤 태그들을 선택할지 규정하는 문법이다.

  • Universal(*) : 모든 태그들을 다 선택한다.
  • type (tag) : 태그의 이름을 선택하면 해당 태그에 대해 모두 적용한다.
  • ID(#) : 특정 아이디를 갖는 태그만 선택한다.
  • Class (.) : 특정 클래스를 갖는 태그만 선택한다.
  • State(:) : 특정 상태를 부여하여 선택한다. ex) button : hover
  • Attribute([]) : 특정 속성값만 선택한다. ex) a[href] a태그 중 hyper reference 있는 태그에만 적용

CSS 기본형태)

selector {
	attribute : value;
}

3. block vs inline

block (블럭요소)

  • 블럭 레벨의 경우 한줄에 하나씩 나온다.
  • display: inline-block으로 변경해줄 경우 한줄에 여러개가 나온다.

inline (인라인요소)

  • 인라인 레벨의 경우 한줄에 공간이 남으면 여러개가 나온다.
  • 인라인은 컨텐츠 자체만을 꾸며주기 때문에 아무런 컨텐츠가 없다면 화면상에 적용되어 보여지지 않는다.
  • display : block으로 변경해줄 경우

4. Position

  • position은 기본값으로 static이라는 값을 갖고 있다.
  • 여기서 static은 html 상에서 적혀진 순서대로 브라우저 상에 보여지는 것을 뜻한다.

4. 1 position : relative
만약 position을 relative으로 변경해준다면 원래 있어야 하는 자리에서 css로 지정해준 left, right 등 값에 따라 위치가 변경된다.

4.2 position : absolute

  • absolute의 경우 내 아이템과 가장 가까이에 있는 박스 안에서 위치 변경이 일어난다.
  • relative는 원래 있어야 하는 자리에서 상대적으로 위치 변경이 일어난다면, absolute는 아이템들이 담겨있는 상자 안에서 위치가 변경된다.

4.3 position : fixed

  • 상자 안에서 완전히 벗어나 윈도우 안에서 움직인다.
  • 웹 페이지안에서 움직인다.

4.4 position : sticky

  • 본래 있어야 하는 자리에서 벗어나지 않고 화면을 스크롤링해도 그 자리에 그대로 붙어있는다.

5. Flexbox

박스와 아이템들을 행 또는 열로 자유자재로 배치시켜줄 수 있는 CSS다.

Flex를 알기 전에 사용됐던 float에 대해 알아보자.

5.1 Float

  • Float의 본래 목적은 이미지와 텍스트를 어떻게 배치할 것인지 정의하기 위해 쓰였다. (텍스트들이 이미지를 감싸면서 배치될 수 있도록)
  • 과거에는 레이아웃을 할 수 있는 기능이 없다보니 float을 이용해 박스를 배치하곤했었음 -> 사실 이같은 방법은 float의 본래 목적에서 벗어난 것임!
  • 현재는 flex가 있기 때문에 float은 본래의 목적으로 쓰이고 있다.

출처 : 드림코딩

5.2 Flex 기본개념

Flex를 이해하는데는 2가지 개념을 주목하면 된다.

첫번째, Flex 박스는 컨데이터 박스에 적용되는 속성값들이 존재하며 각각의 아이템들에 적용할 수 있는 속성값들 역시 존재한다.

컨데이너(container)에 꾸며줄 수 있는 속성값들은 하기와 같다.

아이템(item)들에 꾸며줄 수 있는 속성값들은 하기와 같다.

출처 : 드림코딩

두번째, Flex 박스에는 중심축과 수평축(반대축)이 있다.

Flex 박스에서 수직 너가 중심축이야! 하고 지정하면 반대로 수평축은 반대축이 된다.

  • 위 사진에서는 아이템들이 가로로 나열 돼 있어 수평축이 중심축이 되고, 수직축이 반대축이 되었다.
  • 만약 아이템들이 세로로 나열 돼 있다면 수직축이 중심축이 되고, 수평축이 반대축이 된다.

기타) CSS에서 %와 vh의 차이는?
height : 100%란 뜻은 부모 요소의 높이의 100% 값을 갖겠다는 뜻이고, 100vh라는 뜻은 부모요소와 상관 없이 아이템이 포이는 viewport height을 100퍼센트 다 쓰겠다는 뜻이다.

5.3 Container 기본속성
a) display : flex

  • flex를 사용하기 위해서 컨데이터 박스에 너 이제부터 flex 박스야!라고 말해준다.
  • 사용시 세로로 나열 돼 있던 아이템들이 왼쪽~오른쪽으로 나열된다.

b) flex-direction

  • 기본값은 row(왼쪽에서 오른쪽으로)로 배열된다.
  • flex-direction: row-reverse / column / column-reverse로 사용 가능하다.

c) flex-wrap

  • 기본값은 nowrap이다. 즉 아이템들이 아무리 많아도 한줄에 나열 돼 보여지는 것. (우리가 wrapping을 안하겠다고 선언한 것과 동일함)
  • 만약 flex-wrap을 : wrap으로 지정하면 아이템들이 자동적으로 아이템들이 다음 줄에서 보여진다.
  • wrap 역시 wrap-reverse을 사용할 수 있다.

d) flex-flow

border : 2px solid black; 식으로 줄여서 표현할 수 있듯이 flex 역시 한줄에 줄여서 표현할 수 있다.

flex flow : column nowrap;

e) justify-content (중심축 배치)
중심축에서 아이템들을 어떻게 배치할 것인지에 대해 결정해준다. (중심축이 수평축이라고 가정 했을 때)

  • justify-content : flex-start; (기본값, 왼쪽 > 오른쪽으로)
  • justify-content : flex-end; (오른쪽 > 왼쪽으로 정렬)

만약 flex-direction이 column인 경우, 동일하게 위에서 밑으로, 밑에서 위로 direction을 바꿔주지만 flex-direction의 row-reverse와는 다르게 컨텐츠의 순서는 유지한채 밑에서 위로 컨텐츠를 보여준다.

  • justify-content : center; (중심에 배열)
  • justify-content : space-around; (박스를 둘러싼 여백을 넣어주는 것, 그렇기 때문에 맨 처음 아이템과 맨 끝 아이템은 여백이 1이라면 박스 간 여백은 2가 된다. 박스 하나의 여백과 다음 박스의 여백값이 합쳐져서)
  • justify-content : space-evenly; (처음~끝까지 박스간 간격을 동일하게)
  • justify-content : space-between; (처음, 끝 아이템의 왼쪽과 오른쪽은 딱 화면에 맞게 배치하고, 중간 아이템간 여백만 동일하게 넣어준다.)

f) align-items (반대축 아이템 배치)
중심축이 수평이라면 수직축에서 어떤식으로 아이템들을 배치할 지 정한다.

  • align-iems : baseline; (만약 아이템들이 10개 있고 그중 하나의 아이템만 높이가 더 클 경우, baseline 지정시 그 안에 텍스트가 모두 한줄에 올 수 있도록 배치함)

g) align-content : justify-content와 동일하게 다만 축은 다르게 배열이 적용된다.

5.4 Container 기본속성
a) order

  • item에 order: 0, 1, 2..등으로 순서를 지정해줄 수 있다.
  • 현업에서 거의 쓰이지 않아 참고용으로만 여기면 된다.

b) flex-grow

  • 본래는 컨데이터가 아무리 커져도 아이템의 크기는 변하지 않고 컨데이너가 너무 작아질 경우에는 어쩔 수 없이 아이템 크기가 작아졌었다.
  • flex-grow를 쓰게 될 경우 컨데이터 공간을 채우기 위해 아이템들이 늘어나게 된다.
  • flex-grow의 기본값은 0이다.

c) flex-shrink

  • 컨테이너가 점점 작아졌을 때 어떻게 행동하는지를 결정한다.
  • item 1에 flex-shrink를 2, item 2와 3에는 flex-shrink를 1씩 줄 경우, 컨데이터가 작아짐에 따라 item 1만 2와 3에 비해 2배씩 줄어들게 된다.

d) flex-basis

  • 아이템들이 공간을 얼마나 차지해야하는지 조금 더 세부적으로 명시할 수 있게 도와준다.
  • 기본값은 auto로 flex-grow와 flex-shrink값을 따라가지만 만약 두 값이 없고 flex-basis만 n%로 할 경우, 다른 아이템에 비해 커질때/작아질 때 몇 %를 차지하게 할 지 정할 수 있다.

e) align-self

  • 아이템별로 아이템을 정렬할 수 있다.
  • 아이템 하나만 center로 맞출 수도 있고, 컨테이너에서 지정된 것을 벗어나 아이템 하나만 내가 배치하고 싶을 경우 사용한다.
profile
웹개발 공부 스터디로그

0개의 댓글