[HTML, CSS] CSS와 HTML을 활용한 화면 설계 기본

somin·2021년 6월 30일
0

html&css

목록 보기
3/4

레이아웃을 위한 HTML을 만들기

1. 화면 분할

  • 콘텐츠의 흐름은 좌에서 우, 위에서 아래
  • CSS로 화면을 구분 시 수직분할과 수평분할을 차례대로 적용하여 콘텐츠의 흐름을 따라 작업 진행
  • 수직분할 : 화면을 수직으로 구분하여, 콘텐츠가 가로로 배치될 수 있도록 요소를 배치
  • 수평분할 : 분할된 각각의 요소를 수평으로 구분하여, 내부 콘텐츠가 세로로 배치될 수 있도록 요소를 배치
    *수평으로 구분된 요소에 height 속성을 추가하면 수평분할을 보다 직관적으로 할 수 있음

2. Atomic CSS 방법론

.w70 { width: 70%; }
.h40 { height: 40%; }
  • 클래스 이름으로 지정된 w10, w20, w70, 또는 h20, h40, h80을 CSS로 구현
  • 클래스 이름과 구현을 1:1로 일치시켜 아주 작은 단위로 CSS를 작성 기법

3. html이 가진 기본 스타일 및 레이아웃 리셋

1) html이 가진 기본 스타일

  • body 태그가 가진 기본 스타일에 약간의 여백이 존재하여 박스의 시작을 정확히 (0,0)의 위치에서 시작하기 불가
  • width, height 계산이 여백을 포함하지 않음
  • 브라우저마다 기본 스타일 차이 존재

2) 레이아웃 리셋

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}

Flexbox로 레이아웃 잡기

1. display: flex

  • 부모 박스요소에 적용해 자식 박스의 방향과 크기를 결정
  • 기본값으로 부모 박스의 자식 요소는 왼쪽부터 차례대로 이어 배치
    *자식 요소는 flex라는 속성에 값을 적용(flex: 0 1 auto)

2. flex-direction

  • flexbox는 박스가 수직으로 분할되는 것이 기본값이지만 방향을 설정해 수평으로 분할 가능
  • flex-direction 속성은 부모 박스요소에 적용
  • 값 : row(기본값) / column (수평 분할)

3. flex 속성

  • 자식 박스에 어떠한 속성도 주지 않으면, 왼쪽에서부터 오른쪽으로 콘텐츠의 크기만큼 배치
  • 자식 요소의 flex 속성을 추가하지 않으면 기본값이 적용(flex: 0 1 auto)
  • 기본 크기를 바탕으로 필요에 따라 늘리거나 줄일 수 있는 값이 적용
  • flex에 적용되는 grow, shrink, basis는 각 값을 따로 지정할 수 있음
  • grow, shrink 속성은 단위가 없고, 비율에 따라 결과가 달라짐
flex: <grow> <shrink> <basis>
flex: 0 1 auto // 기본값

flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;

1) grow

  • 자식 박스는 얼마나 늘어날 수 있는가
  • flex-grow 속성에 적용하는 값은 비율을 의미
  • basis를 제외한 여백을 비율대로 나누어 갖음
  • 모든 자식 박스의 flex-grow 속성이 0보다 큰 값을 동일하게 가지는 경우, 각 박스의 가로 길이는 동일한 비율을 가짐

(1) box 클래스의 flex-grow 값을 1로 설정

.box {
  flex: 1 1 auto;
}
  • 모든 박스가 동일한 비율로 가로 길이가 늘어남

(2) target 클래스의 flex-grow 값을 1로 설정

.box {
  flex: 0 1 auto;
}

.target {
  flex: 1 1 auto;
}
  • target 박스 하나에만 flex-grow 속성 값이 1인 경우 부모 박스의 가로 길이 중에서 남은 빈 영역만큼 늘어남
    *다른 자식 박스안의 콘텐츠가 담긴 길이를 제외한 나머지를 의미

(3) box 클래스 & target 클래스의 flex-grow 값을 설정

.box {
  flex: 1 1 auto;
}

.target {
  flex: 1 1 auto;
}
  • target 클래스에 적용된 flex-grow 속성의 값이 1, box 클래스에 적용된 flex-grow 속성의 값이이 1일 경우, grow가 적용된 전체 값은 1+1+1이므로 각 자식 박스의 가로 길이는 1/3의 길이를 가짐
.box {
  flex: 1 1 auto;
}

.target {
  flex: 2 1 auto;
}
  • target 클래스의 flex-grow 속성의 값이 2, box 클래스의 flex-grow 속성의 값이 1일 경우, grow가 적용된 전체 값은 2+1+1이므로 target 클래스를 가지지 못한 나머지 자식 박스는 1/4의 길이를 가짐

2) shrink

  • 자식 박스는 얼마나 줄어들 수 있는가
  • shrink는 grow와 반대로 설정한 비율만큼 박스 크기가 작아짐
  • 실제 크기를 예측하기가 어렵기 때문에 grow 속성에 변화를 주는 방식 추천
  • 0으로 세팅시 basis보다 작아지지 않아 고정폭을 쉽게 만들 수 있음

3) basis

.left {
  flex: 0 1 100px; 
  // grow를 0으로 설정해줘야 100px 이상으로 늘어나지 않음
}

.right {
  flex: 1 1 auto; 
  // grow를 1로 설정해 나머지 공간을 채워줌
}
  • 박스가 flex-grow나 flex-shrink에 의해 늘어나거나 줄어들기 전 기본 크기
  • flex-grow 속성의 값이 0인 경우에만 flex-basis 속성의 값이 유지
  • width와 flex-basis를 동시에 적용하는 경우, flex-basis가 우선

4. justify-content / align-items

  • 콘텐츠 정렬
  • justify-content : main axis를 기준으로 정렬
  • align-items : cross axis를 기준으로 정렬
  • flex-direction 속성의 값을 column일 경우 main과 cross axis는 서로 바뀜

1) 콘텐츠 수평 정렬 (justify-content)

  • 옵션 : flex-start, flex-end, center, space-between

2) 콘텐츠 수직 정렬 (align-items)

  • 옵션 : flex-start, flex-end, center, stretch

와이어프레임 설계 및 목업 구현

  • 와이어프레임 : 화면단위의 레이아웃을 설계하는 작업
    *레이아웃의 뼈대로 전체적은 구조를 보여줌
  • 목업 : 실제품을 만들어보기 전 실물과 비슷하게 시제품을 제작하는 작업
    *하드코딩을 통해 실제 제품이 작동하는 모습과 동일하게 HTML 문서를 작성
  • 프로토타이핑 : 처음부터 종료까지 핵심 동작이 가능하게 구현된 앱
    *개발 초기에 모형을 만들어 기능의 요구사항을 파악한 후 반영하는 개선 방식
  • 하드코딩 : 데이터를 코드 내부에 직접 입력하는 것

1. 변수를 활용한 html

let comment = { user: '박소민', content: '우리집 고양이 까까는...' }

2. 하드코딩를 활용한 html

<div class="writer">박소민</div>
<div class="content">우리집 고양이 까까는...</div>

3. id 및 class 사용

  • id : 반복되지 않는 고유한 것
  • class : 반복되는 것
profile
✏️

0개의 댓글