Waave 랜딩페이지 Floating Action Button 구현해보기

 

1. Top Button 만들기

우선 버튼을 만든다. 나는 웹플로우에서 제공해주는 button 레이아웃을 사용하여 background 이미지를 추가하여 생성했다. Fixed를 사용하여 위치를 고정하고, 클래스명도 Top Button으로 지정해주었다. z-index값도 꼭 올려주어야한다.

 

2. Page section 연결하기

Top Button 클릭시 상단으로 올라가야하므로 Hero section에 Hero라는 아이디값을 주고, page section 연결을 해주었다. 여기까지만 해도 Top 버튼의 역할은 할 수 있다.! 

 

 

 

3. Interactions를 연결

상단으로 이동되었을 때 Top Button이 비활성화되게 하기위해서는 Interaction을 추가해주면 된다.

Top Button요소가 클릭된 상태에서 Element trigger에서 +버튼을 누르고, Scroll into view를 클릭한다. 그럼 연결되었다고 Scroll into view가 생기고 Top Button 요소 옆에는 번개모양이 쪼끄맣게 뜬다. 

 

 

 

스크롤해서 내려간 상태에서 Top Button을 더블 클릭하면 상단으로 올라오는 것을 볼 수 있다.

4. 여기서 중요한데, 왼쪽의 레이아웃이 정렬된 Navigator에서 TopButton을 더블클릭하면 Current상태가 된다. 아래 이미지 처럼 Current라고 뜬다면 연결이 되었다는 뜻이다. 이 상태에서 버튼을 display : none 걸어주면 된다. 그런 후 새로고침하거나, 다른영역을 누르면 동작되는 것을 확인 할 수 있다.

일정표 

09:00 ~ 10:10 : 디자인 카타 진행(Saas - slack)

10:10 ~ 10:30 : 데일리 스크럼 진행 & 학습 계획 세우기

10:30 ~ 11:00 : 오전 스크럼

11:00 ~ 12:00 : 디자인 카타 정리(slack - Core Experience 다시 정리 )

12:00 ~ 13:00 : 디자인 집중반 - OT 듣기

 

14:00 ~ 16:00 : 개인과제 - CMS 적용&에어테이블 연동

17:00 ~ 18:00 : 과제 검토

 

19:00 ~ 20:00 : 아티클 & TIL 작성

20:00 ~ 20:20 : 데일리 회고 진행하기

20:20 ~ 21:00 : TIL 작성 후 제출 & 내일 계획 세우기

 

 

오늘 공부 내용

[Wavve 랜딩페이지 반응형으로 구현하기] 개인과제 진행하며 알 수 있었던 점들

 

1. WebFlow로 캐러셀 작업하기

제공해주는 레이아웃 중 Slider를 사용해보았는데, 제공되는 레이아웃이다보니 제공된 클래스명 자체를 바꿔버리니 원래 동작되던 기능이 제대로 되지 않아서 애를 먹었다. 웬만해서는 제공해주는 클래스명은 살려두고 안에 새로운 div를 만들어서 적용할 것을 추천해주셨다.! 다음에도 이런 일로 시간을 소모하지 않기위해 잘 기억해두어야겠다. 

 

 

TIL 작성

디자인 심화 개인과제 진행중인 12월의 셋째주,

시간이 정말 빨리간다. 일주일만에 간단한 코딩 수업을 떼고 웹플로우로 랜딩페이지 만들기 과제에 들어갔다. 오랜만에 작업하니 재밌기도하고 시간가는 줄 모르고 열심히 했다. 하지만 약간의 현타는 어쩔 수 없나보다. 퍼블리싱을 배우기 위해 초반에 3개월 아니 6개월은 투자한 것 같은데, 웹플로우를 배우는데 고작 일주일밖에 안됐지만 그럴싸한 웹페이지를 만들 수 있다는 것이다.! 현타가 세게 온다ㅎ 이 과정은 디자인을 하는데 구조적으로 이해를 돕기 위해 진행된다고는 하지만 다들 구현하는 것을 보면 어느 수준까지는 잘 만드는 것을 보면서 참 세상 좋다고 생각했다. 진짜 나중에는 ai가 대체될 수도 있단 생각이 확 드는 순간이기도 했다.  아무튼, 4일동안의 어떻게 진행할지 구체적인 계획을 세우고 단계별로 작업하였다.

 

1일차

1. 서비스 선정 : 내가 선택한 랜딩페이지는 Wavve. 깔끔한 레이아웃이 마음에 들었고, 반응형으로 작업할 때 수월할 것 같아서 선택했다.

2. 기존 wavve 랜딩페이지 조사 : 웹페이지에서 제공하는 백그라운드 이미지, 상품이미지, 아이콘, 로고, 배지 등 각종 이미지들을 모아서 따로 저장해둔 뒤 사용한 색상들과 레이아웃 구조를 파악하고 형태, 스타일 등을 조사해 보았다. 

 

2일차

3. 디자인 시스템 설정 : 반응형으로 구현하기 위해 Typography를 2px 단위로 설계했는데, pc버전에서 모바일버전으로 갈 수록 1-2px 차이가 확 느껴지니 그 때 유용하게 활용하기 위해 body 쪽 font 사이즈를 촘촘히 설계했다. 색상은 의외로 단순해서 Primary 컬러와 Gray기본 컬러 하나씩만 만들었고 아이콘도 많이 사용되지 않았는데 한가지 추가한 것은 햄버거 버튼에 사용할 아이콘이었다. 

4. 시안 작성:  pc버전으로 설계를 마친뒤, tablet 버전과 mobile 버전까지 만들어보았다. 모바일 버전에선 상단의 Header에 있는 메뉴들이 다 들어가지지 않기 때문에 햄버거 버튼으로 대체한 뒤 클릭하면 side bar가 열리고 메뉴를 선택할 수 있도록 설계하였다(모바일버전에서만 display가 block될 수 있도록) 그외에 캐러셀 부분도 pc에선 flex를 활용해 텍스트와 이미지가 가로로 펼쳐져 있다가, 테블릿 사이즈부터는 세로로 바뀌도록 설정했다.

5. 필수과제 적용 : 헤더에 이용권과 자료받기 메뉴를 추가하였고 메인화면에 CTA버튼도 생성했다. 사용자 이름과 이메일을 입력하고 신청할 수 있는 폼 형태도 하단에 추가하였다. 

 

3일차

6. WebFlow 디자인 세팅 : 사용할 NotoSans 폰트를 등록하고, 작업할 때 편리하도록 font-size, weight, Primary color, Gray color 등을 추가해두었다.

7. 레이아웃 잡기 : header/ main/ footer 로 기본 구조로 나눈 뒤, 메인에서는 section으로 크게 덩어리를 나눠준 뒤, 그 안에서 보여질 부분은 Container Default로 class명칭을 정하고 width를 1440px로 지정했다. 캐러샐을 작업하기 위해 Slider를 사용했는데, 만지다보니 첫번째 슬라이드에 두번째 세번째 내용도 다같이 들어가져 있었다.. 이리저리 만져도 되지 않아 튜터님을 찾아갔었는데, 기본으로 제공해주는 명칭으로 돌리니 제대로 작동하였다. 제공해주는 클래스명은 건드리면 안되겠다는 생각을 했다..  

8. 반응형 작업하기 : tablet과 mobile사이즈로 작업하면서, 이탈되거나 잘리는 부분들만 수정해주고, 나머지는 플렉스와 그리드의 배열만 옮겨서 적당히 배치했다. 말은 쉽지만, 사실 손이 많이 가는 작업이었다. 폰트 같은 경우는 전체 다 줄이도록 손을 봤으니..ㅎ 확실히 반응형 작업하기엔 webflow가 쉽고 빠른 것 같다. 직접 코딩하면 코드치고 확인하고 계속 왔다갔다해야하는데,,

9. 인터랙션 : link걸어서 클릭시 해당 section으로 이동되도록 설정하고, 버튼에도 hover효과도 주었다. 또, header와 footer는 컴포넌트화 시키고 mobile 버전에서는 햄버거 버튼이 display:block이 되도록 pc버전일때는 none이 되도록 설정해주었다.

 

4일차

10. CMS 직접 입력하기 : airtable이 서비스를 종료하는 이슈로 인해 CMS Collections에 직접 등록했다. 연동할 적절한 페이지가 없어서 wavve style 설명 리스트에다가 적용했는데 하고나서 이거 이렇게 하는 거 아닌 것 같은데 싶었다. 왜냐면 등록한 collection각각의 하위 항목에 생성된 slug를 통해 페이지 이동이 가능한데, 내가 적용한 곳은 페이지 이동이 굳이 필요없었기 때문이다. 그래서 header의 항목들에다가 적용하려고 했으나, 필수 과제가 section 이동이라 말았다. 다음번엔, 시작할 때 연동할 테이블과 페이지도 미리 설계한 뒤에 진행해야겠다고 느꼈다. 화면을 다 만들어놓고 구겨넣으려고 하니 적절하지 않은 것 같았다. 

11. GA4 & airtable 연동 : 서비스 종료로 과제에 적용할 수 없어 아쉬웠지만 다음에 기회가 된다면 제대로 구현해보고 싶으 마음이 들었다. 자동화된다는 것은 너무 신기한 일이니까! 

내일은 전체적으로 검토해보고 오전 중에 과제를 제출하도록 해야겠다. 이번 과제를 통해 웹페이지의 구조적인 설계와 방법에 대해서 더 알 수 있었고 앞으로 디자인을 하는데에 많은 도움이 될 것 같았다. 실제로도 구직공고에 webflow를 사용할 수 있는지를 물어보는 곳도 있었다. 내일은 튜터님께 CTA 버튼을 고정시키는 법에대해서 여쭤보도록 해야겠다  

'개인' 카테고리의 다른 글

[WIL]20241213  (1) 2024.12.13
[TIL]20241211  (0) 2024.12.11
[TIL]20241210  (0) 2024.12.10
[TIL]20241209  (2) 2024.12.09
[WIL]20241206  (2) 2024.12.06

O2O(Online to Offline)와 O4O(Offline for Online)는 두 가지 방식의 마케팅 접근 방식을 나타낸다.

둘 다 고객의 구매 여정을 개선하기 위한 전략이지만, O2O는 온라인에서 오프라인으로의 전환을 목표로 하고, O4O는 오프라인 경험을 온라인으로 확장시키는 것을 강조한다.

 

1. Online for Offline ( O4O

온라인으로 유명한 업체들이 쌓아왔던 정보와 노하우, 기술을 바탕으로 오프라인까지  비즈니스 역량을 늘리는 것.

그렇다면 왜? 온라인 업체가 아무리 잘 되더라도 자신의 브랜드 가치를 높이기 위해선 고객과의 접점이 꼭 필요하므로

 

  • 온라인으로 유명한 업체들이 쌓아왔던 정보와 노하우, 기술을 바탕으로 오프라인까지  비즈니스 역량을 늘리는 것.
  • 개념: 오프라인 매장에서 소비자 경험을 강화한 후, 온라인 채널을 통해 추가 구매로 이어지게 하는 방식
  • 목적: 오프라인 경험을 통해 고객 충성도를 높이고, 온라인에서 지속적으로 브랜드와 상호작용하게 유도.
  • 예시:
    • 매장 방문 후, 매장에서 제품을 체험하고 온라인으로 리뷰 작성, 추가 구매나 프로모션 참여 유도.
    • 오프라인에서 제공하는 쿠폰이나 이벤트가 온라인몰에서 사용할 수 있도록 유도하는 경우.

 

 

2. Online to Offline ( O2O )

  • 온라인의 서비스를 오프라인에서 경험하는 것 또는 오프라인 매장으로 유도하는 방식 
  • 목적: 온라인에서 유입된 고객을 실제 오프라인에서 구매로 연결시켜 매출을 증가시키는 전략.
  • 예시:
    • 온라인 쇼핑몰에서 상품을 검색하고, 매장 방문 예약을 통해 실제 매장에서 제품을 체험하고 구매하는 경우.
    • 음식 배달 앱에서 음식 주문 후, 오프라인 식당에서 음식을 픽업하거나 소비하는 경우.
    • 최근 여기어때에서 호텔 여기어때를 오픈했는데 오프라인에 있는 비즈니스 역량을 늘리겠다는 취지인 듯

 

다양한 O4O서비스 전략 사례

1. 세포라(Sephora)_ 화장품 브랜드

 

  • 소비자 브랜드의 매장 체험 → 온라인 구매
  • 고객이 오프라인 매장에서 제품을 테스트하고 사용 후기를 남깁니다.
  • 이후, 온라인몰에서 제품을 구매하거나 리뷰를 참고하여 추가 구매를 유도합니다

2. H&M

  • 오프라인 매장 이벤트 → 온라인 프로모션 참여
  • 매장에서 진행되는 할인 행사나 이벤트에서 고객이 제품을 체험하고 구매 후, 온라인으로 추가 할인 쿠폰이나 리워드를 제공합니다.
  • 이러한 쿠폰은 온라인몰에서 사용 가능하여, 고객이 더 많은 구매를 유도합니다.

3. 스타벅스

  • 매장 방문 고객을 위한 온라인 이벤트 참여 유도
  • 매장에서 받은 텀블러 또는 음료 쿠폰을 온라인 앱에서 등록하거나 사용하여, 추가적인 온라인 혜택이나 포인트 적립을 유도합니다.

4. 애플 스토어

  • 오프라인 리테일에서의 인스타그램 캠페인 활용
  • 고객이 매장에서 사진을 찍어 SNS에 공유하도록 유도하고, 온라인에서 이 콘텐츠를 통해 브랜드와 소통하게 만듭니다.
  • 이후, 온라인 쇼핑몰에서 제품을 구매하거나 추가 활동을 유도하는 캠페인 진행.

 

5. 그외

  • 아마존 고 : 들고나가면 계산이 되는 무인 시스템. ai를 활용하여 고른 물건들을 자동으로 계산
  • 알리바바_ 타오카페( 신선식품 ) / 빙고박스
  • W concept
  • 무신사 스탠다드
  • 쿠캣 등

 

FACTS(사실, 객관) : 이번 일주일 동안 있었던 일, 내가 한 일

1. 코딩 수업

웹퍼블리싱 특강수업을 통해 html과 css의 기초부터 응용까지 오랜만에 코딩이었다.

웹플로우(Webflow)와 에어테이블(Airtable)을 활용해 노코드(No-code) 환경에서 웹 페이지를 제작하는 방법을 배웠다. 단순한 페이지 생성에서 나아가, 데이터베이스(DB) 연동자동화 워크플로우 설정까지 진행하면서 실제 프로덕션 환경에서의 활용까지 실습해볼 수 있었다.

 

2. 디자인 카타

안드로이드(Android)와 iOS의 주요 차이점과 공통점을 분석하며 플랫폼별 디자인 가이드라인을 학습했다

 

FEELINGS(느낌, 주관) : 나의 감정적인 반응, 느낌

1. 오랜만의 코딩

퍼블리싱은 몸에 익어서 쉽게 할 수 있었으나, 코드없이 웹페이지를 만드는 것은 처음이어서 웹플로우 툴에 익숙해지는데 시간이 걸렸다. 에어테이블을 통한 데이터베이스 연동은 꽤나 재밌었다. 자동화까지 해보니 백엔드개발자들이 매번 자동화라고 이야기 했던 것들이 이런걸 말하는거구나를 알게되었다. 잘 활용하면 유용할 것 같았지만 이것도 몸에 익으려면 연습을 해야할 것 같았다.

 

2. 너무나도 다양하고 넓은 영역..

자료를 조사하면서 매번 든 생각은 왜,, ios랑 안드로이드는 통일하지 않아서 이렇게 사용자들도 개발하는 사람들도 헷갈리게 하는것일까였다.. 다른 이유야 당연하겠지만 똑같은 기능을 다르게 부른다는 것이 참 이상하다고 생각하였다. 덕분에 나는 자료조사를 2번해야하니까 귀찮지만 어쩔수없지..^^..

 

FINDINGS(배운 것) : 그 상황으로부터 내가 배운 것, 얻은 것

1. 개발 지식의 범위가 한층 넓어졌따.?

퍼블리싱을 하며 웹 페이지를 구조화하고 스타일링하는 기본적인 원리뿐만 아니라, 반응형 디자인웹 접근성의 중요성도 다시 한번 중요하다는 것을 알게되었다. 또, 실제로 백엔드까지 직접 해보면서 효율적인 업무 자동화의 장점을 알 수 있었고, 이렇게 비개발자도 사용할 수 있는 도구들도 잘 활용하면 어느정도 개발의 지식을 더 넓힐 수 있을 것 같다고 생각했다. 이번 주차를 통해 개발의 전반적인 지식과 이해도가 높아졌고 기획과 디자인외의 개발과정에서 실제로 어떤식으로 일을 진행하는지도 경험할 수 있었다.

 

2. 플랫폼별 디자인 이해의 중요성
안드로이드와 iOS의 디자인 가이드라인을 비교하면서 플랫폼 특유의 UX와 UI 설계를 이해하는 것이 중요하다는 것을 알았다. 단순히 예쁘게 만드는 것에서 끝나는 것이 아니라, 사용자 친화적이고 일관성 있는 경험을 제공하기 위해 각각의 플랫폼 요구 사항에 맞춘 디자인이 필요하다는 점을 배웠다.

또, 각각의 플랫폼을 조사하다보니 어떤 환경에서 어떤 컴포넌트를 적절히 사용하는 것이 좋을지, 어떤 점이 더 적절하고 편리하게 사용할수 있을지에 대해서도 생각해보게 되었다. 이렇게 플랫폼에 적합한 디자인을 구현하려면 세부적인 요소까지 신경 써야 한다는 것을 알게 되었고, 이는 향후 디자인 기획에서 큰 도움이 될 것 같다.

 

FUTURE(미래) : 배운 것을 미래에는 어떻게 적용할 지

1. 노코드 도구의 활용 능력 강화
웹플로우와 에어테이블처럼 노코드 도구를 활용한 웹 제작 기술을 꾸준히 연습하고 익혀서, 향후 프로젝트에서 더 빠르고 효율적으로 결과물을 낼 수 있을 것 같았다. 특히 데이터베이스 연동과 자동화 기능은 기획 업무에도 큰 도움이 될 수 있으므로, 이를 활용해 보다 효율적인 워크플로우를 제안하고 실행할 수 있도록 잘 연습해서 써먹어보아야겠다.

 

2. 다양한 플랫폼에 적합한 디자인 역량 개발
이번 디자인 카타에서 배운 내용을 바탕으로, 플랫폼별로 특화된 사용자 경험(UX)을 제공하는데에 도움이 많이 될 것 같았다. 실제 프로젝트에 적용하기 위해서는 안드로이드와 iOS의 가이드라인을 직전에 더 찾아보아야겠지만, 아예 무지하던 때보다는 훨씬 많은 지식들이 생겼다는 것에 의의를 두겠다. 앞으로도 사용자와 개발자가 모두 만족할 수 있는 통합적 디자인 솔루션을 고민해보고 제안할 수 있는 디자이너가 되고자 한다.

 

'개인' 카테고리의 다른 글

[TIL]20241219 / ch.4 노코드 개발_ 개인과제  (1) 2024.12.19
[TIL]20241211  (0) 2024.12.11
[TIL]20241210  (0) 2024.12.10
[TIL]20241209  (2) 2024.12.09
[WIL]20241206  (2) 2024.12.06

1. 하이어라키 백: 계층 구조를 따라가기

  • 무슨 뜻이냐면?
    앱이 "부모 → 자식" 관계로 계층적 구조를 가지고 있을 때, 현재 페이지의 상위(부모) 페이지로 이동하는 동작
  • ex: 쇼핑 앱에서 카테고리 > 제품 목록 > 제품 상세정보 페이지를 보고 있다면,
    • 하이어라키 백은 '제품 상세정보 → 제품 목록'으로 이동하는 동작 (계층을 따라 위로 올라가는 것)
  • iOS와 안드로이드에서 차이점:
    • iOS
      • 화면 왼쪽 위에 있는 '뒤로가기(Back)' 버튼으로 사용자에게 상위 계층으로 돌아가는 일관된 경험 제공.
      • 스와이프 제스처로도 상위 페이지로 이동 가능.
    • 안드로이드
      • 보통 뒤로가기 버튼을 사용하여 이전화면으로 복원
      • 계층적 이동은 명시적으로 상단의 앱바(App Bar)나 네비게이션 버튼으로 구현
      • 디바이스의 하드웨어/소프트웨어 뒤로가기 버튼은 히스토리백 동작으로 연결되는 경우가 많음

2. 히스토리 백: 사용자가 방문한 직전 페이지로 돌아가기

  • 무슨 뜻이냐면?
    계층 구조는 신경 쓰지 않고, 사용자가 바로 전에 방문했던 페이지로 이동하는 동작
  • ex: 같은 쇼핑 앱에서 검색 → 검색 결과 → 제품 상세정보로 이동했다고 치면,
    • 히스토리 백은 '제품 상세정보 → 검색 결과'로 이동하는 것 (사용자가 실제로 이동했던 순서를 따라가는 것)
  • iOS와 안드로이드에서 차이:
    • iOS: 히스토리 백은 기본적으로 없어요. 대신, 개발자가 직접 이런 흐름을 만들어야 함
    • 안드로이드: 뒤로가기 버튼(소프트키나 하드웨어 키)로 바로 이동할 수 있음(기본 기능)

3. 왜 다를까?

  • iOS
    • 애플은 앱의 계층적 구조(하이어라키)를 중심으로 설계
    • 그래서 상위 페이지로 가는 동작을 중요하게 생각하고, 사용자가 어디서 왔는지는 별로 신경 쓰지 않음
  • 안드로이드
    • 구글은 사용자가 이전에 방문했던 페이지로 돌아가는 것을 더 중요시 여김
    • 디바이스의 뒤로가기 버튼이 모든 앱에서 기본적으로 히스토리 백 동작을 함

4. 쉽게 비교

구분하이어라키 백히스토리 백

무엇을 기준으로? 페이지의 계층 구조(부모-자식 관계) 사용자가 방문한 순서(히스토리 스택)
예시 이동 방향 상세정보 → 제품 목록(부모 페이지) 상세정보 → 검색 결과(직전 방문 페이지)
iOS에서의 동작 기본적으로 Back 버튼 제공 구현 필요
안드로이드에서의 동작 앱 상단 버튼으로 구현 가능 뒤로가기 버튼으로 기본 제공

5. 핵심 요약

  • iOS: 계층적인 네비게이션(Hierarchy Back)에 최적화, 히스토리백은 필요 시 명시적 구현.
  • 안드로이드: 히스토리백을 기본으로 제공하며, 계층적인 네비게이션도 추가적으로 지원.

  • 하이어라키 백: "계층 구조에 따라 위로 올라감!"
  • 히스토리 백: "내가 바로 전에 갔던 곳으로 돌아감!"

 

 

참고하면 좋을 링크 : https://brunch.co.kr/@uxdesingercho/1

일정표 

09:00 ~ 10:10 : 디자인 카타 진행(UI 컴포넌트 조사)

10:10 ~ 10:30 : 데일리 스크럼 진행 & 학습 계획 세우기

10:30 ~ 13:00 : 노코드 종합반 수강(1주차)

 

14:00 ~ 16:00 : 노코드 종합반 수강 및 과제 제출

16:00 ~ 18:00 : 노코드 종합반 수강(2주차)

 

19:00 ~ 20:30 : 아티클진행(ios vs ADR)

20:30 ~ 21:00 : TIL 작성 & 내일 계획 세우기 & 마무리

 

 

오늘 공부 내용 : [디자인 카타] ios vs ADR

모바일 디자인을 하기위한 가장 대표적인 ios와 안드로이드의 타이포그래피 체계와 해상도 사이즈 단위의 개념을 알게되었다. 디자인 카타를 통해 개념을 명확히 이해할 수 있었던 좋은 학습시간이었다

  • iOS pt 단위를 사용해 접근성을 고려한 Dynamic Type을 통해 텍스트 크기를 유연하게 관리.
  • Android sp 단위를 사용해 텍스트 크기와 UI 요소를 디바이스의 해상도와 무관하게 일정하게 유지.
  • 두 플랫폼 모두 타이포그래피 체계 해상도 대응 단위가 다르며, 모바일 디자인에서 사용자의 접근성을 고려한 최적화된 UI 경험을 제공하려는 방향성이 명확히 다름.

링크 : [ios vs ADR] OS별 기본 서체와 타이포그래피 체계   [ios vs ADR] 해상도 사이즈 단위의 개념

 

TIL 작성

 

타이포그래피 체계와 해상도 단위 개념에 대해 더 깊이 이해하게 되었고, iOS와 Android의 차이점을 명확히 알게 되었다.

플랫폼별 텍스트 크기와 UI 디자인에 대한 최적화 방식이 다르다는 것을 깨닫고, 앞으로 모바일 디자인에서 더 유용하게 적용할 수 있을 것 같다.

 

 

운영체제(OS)별 기본 서체와 타이포그래피 체계는 사용자 인터페이스(UI)와 사용자 경험(UX)의 중요한 요소입니다. 아래는 주요 OS별 기본 서체와 타이포그래피 체계를 정리한 내용입니다.

 

1. iOS

  • 기본 서체:
    • Apple SD Gothic : 애플에서 디자인한 한국어 전용 서체
    • San Francisco (SF Pro for UI) : iOS 9 이후 사용 ios의 기본서체
    • 이전 버전: Helvetica Neue
  • 타이포그래피 특징:
    • macOS의 SF와 유사하지만 모바일 환경에 맞게 더 세밀하게 설계됨.
    • 작은 화면에서 가독성을 최적화하기 위해 동적 글꼴 크기(dynamic type) 사용.
  • UI 체계:
    • Apple HIG를 기반으로 크기, 두께, 색상 대비 등 모바일 화면에서 읽기 쉬운 서체 배치를 권장.

 

2.  Android

  • 기본 서체:
    • Noto Sans : 구글에서 어도비와 공동 개발한 글꼴, 다국어 지원
    • Roboto  : Android 4.0 (Ice Cream Sandwich) 이후 사용되었으며 안드로이드의 기본 서체
    • 이전 버전: Droid Sans
  • 타이포그래피 특징:
    • Roboto는 Google이 디자인한 서체로, 모던하고 유연하며 화면에서 높은 가독성을 제공.
    • 네이티브와 웹에서 일관된 UI 제공을 위해 설계됨.
  • UI 체계:
    • Material Design: 타이포그래피 체계는 계층적(hierarchical) 구조를 강조하며, 텍스트 크기, 스타일, 간격을 통해 정보 우선순위를 명확히 함.

3. Android의 sp와 iOS의 Dynamic Type

  • 각각의 플랫폼에서 폰트 크기 조정 및 사용자 가독성 향상을 위해 제공하는 시스템으로 모두 사용자 경험을 개선하고, 다양한 디바이스와 화면 크기에 적응하도록 설계되었습니다.
  • 선언된 스타일과 스케일을 참고만 하면됨

1) Android: sp (Scale-independent Pixels)

  • 정의: sp는 Scale-independent Pixels의 약자로, Android에서 텍스트 크기를 정의하는 단위
  • 픽셀(px)을 기반으로 하되, 사용자의 글꼴 크기 설정에 따라 스케일이 조정
  • 특징:
    • sp는 화면 크기 및 해상도와 독립적이면서도, 접근성 설정(Accessibility Settings)의 텍스트 크기 조정 옵션에 영향을 받습니다.
    • UI 디자인에서 텍스트 크기를 지정할 때 권장되는 단위.
    • sp로 설정된 텍스트는 사용자가 설정한 폰트 크기 기본값에 따라 자동으로 크기가 변합니다.
  • 장점:
    • 다양한 해상도와 디바이스 크기에 대응.
    • 접근성 강화: 시력이 약한 사용자도 텍스트 크기를 조정 가능.

2) iOS: Dynamic Type

  • 정의: Dynamic Type은 iOS에서 텍스트 크기를 조정하는 시스템으로, 사용자가 설정한 글자 크기 설정에 따라 텍스트 크기를 동적으로 변경할 수 있습니다.
  • 특징:
    • iOS의 Accessibility 옵션에서 텍스트 크기를 설정하면, Dynamic Type을 지원하는 앱의 텍스트 크기가 자동으로 조정됩니다.
    • 텍스트 스타일(UIFont.TextStyle)을 사용해 기본 폰트 크기와 가변성을 지정합니다.
  • 장점:
    • Apple의 Human Interface Guidelines에 따라 자동으로 크기가 최적화되어 가독성이 향상됨.
    • Dynamic Type은 화면 크기, 장치 유형(iPhone, iPad 등)에 상관없이 일관된 경험을 제공.

3) 차이점

  • 안드로이드는 글자를 확대했을 때 간격이나 여백은 확대전과 동일하지만, ios는 글자를 확대하면 간격도 함께 확대됨. 확대/축소를 통해 명확한 차이를 이해할 수 있음.
  • 예시 : ios는 줄간격을 지정하면 됨 /  안드로이드는 폰트사이즈가 20일 때 패딩값을 얼마나 줄지를 따로 지정함(간격은 같이 안커짐 그래서 배수로 넣는 경우도 있음) 

4.  그 외

1) Windows

  • Windows 10/11: Segoe UI
  • 이전 버전 (XP 등): Tahoma, Verdana
  • UI 체계: Windows Design Language(Fluent Design): 타이포그래피는 심플하고 명확하며 다양한 화면 크기에서 일관성을 유지하는 것이 목표.
  • 타이포그래피 특징:
    • Segoe UI는 현대적이고 읽기 쉬운 가독성을 중점으로 디자인됨.
    • ClearType 기술을 활용하여 디스플레이에서 선명한 렌더링 제공.
    • 두께(weight)와 크기별로 다양한 글꼴 스타일 지원.

2) macOS

  • macOS Yosemite 이후: San Francisco (SF Pro)
  • 이전 버전: Lucida Grande
  • UI 체계: Apple Human Interface Guidelines(HIG): 간결하고 직관적인 타이포그래피 구조를 강조하며, 서체 크기와 간격을 적절히 조정하도록 권장.
  • 타이포그래피 특징:
    • San Francisco는 Apple이 직접 설계한 서체로, 가독성과 디자인 일관성을 중시.
    • 가변 서체(variable font) 기술을 활용하여 크기와 상황에 따라 최적의 읽기 경험 제공.
    • 트래킹(글자 간 간격)이 동적 조정되며 디지털 환경에서 최적화됨.

3) 웹 브라우저

  • 웹 환경에서는 OS별 기본 서체를 상속하지만, CSS에서 주로 사용하는 기본 서체는 Arial, Verdana, Times New Roman, Courier New 등이 디폴트로 사용됨. Google Fonts와 같은 웹 폰트가 많이 사용됨.
  • 타이포그래피 특징:
    • 반응형 웹 디자인을 위해 가변 서체(variable fonts)와 유연한 글꼴 크기 사용.
    • 브라우저마다 렌더링 방식에 차이가 있어 크로스 브라우저 테스트가 중요.

4) Linux

  • 배포판에 따라 다르지만, 일반적으로 Ubuntu, DejaVu Sans, Liberation Sans 등이 사용됨
  • UI 체계: GNOME, KDE 등 데스크톱 환경에서 각자의 디자인 가이드라인 제공
  • 타이포그래피 특징:
    • 오픈소스 환경을 고려하여 다양한 글꼴 지원.
    • 주로 스크린에서의 가독성을 고려하여 디자인됨.

 

 

 


Q. 산세리프(Sans-serif)와 세리프의(Serif) 차이는 무엇일까?

  • 획이 살아있다 세리프라고 말함 → 명조체
    획이 없다 산세리프라고 말함 →  고딕
  • [세리프와 산세리프 비교 표]
  • 항목 세리프(Serif) 산세리프(Sans-serif)
    획 끝 디자인 장식이 있음 장식이 없음
    분위기 전통적, 고전적, 신뢰감 현대적, 깔끔함, 단순함
    가독성 인쇄 매체에서 가독성이 높음 디지털 환경에서 가독성이 높음
    사용 용도 책, 신문, 잡지 등 인쇄 매체 웹사이트, 앱, 디지털 인터페이스 등

Q. 제가 사용하는 폰은 갤럭시인데, 글꼴 설정에 들어가니까 기본, SamsungOne, 굵은 고딕, Roboto 이렇게 네가지가 기본 글꼴로 제공되는데 여기서 '기본' 글꼴이 noto sans가 맞을까요?

  • 아닙니다. 굵은고딕입니다. 
    운영체제(안드로이드, ios)와 기종(갤럭시, 아이폰, lg폰 등)의 스타일은 다를 수 있으므로 참고하는 것이 좋음.

ios와 Android 각 해상도와 사이즈를 다루는 단위 및 개념에 차이가 있는데 주로 화면크기, 픽셀 밀도, 디스플레이 스케일링 방식을 다루는 방식 등이 있다.

 

1. iOS의 해상도 개념

iOS는 Point 단위를 사용하여 레이아웃을 설계하며, 이 단위는 논리적 단위로, 픽셀 밀도(DPI)에 따라 실제 픽셀 크기로 변환 된다. 개발자가 다양한 디바이스에서 동일한 레이아웃을 구현할 수 있도록 도와준다. 

  • ‘pt’단위를 사용 (iPhone 4부터 레티나 디스플레이가 도입되어, 물리적 해상도는 그대로 유지하면서 픽셀 수가 증가)
  • Point 단위: iOS의 UI 요소는 디바이스의 픽셀 밀도와 관계없이 일정한 크기를 유지함.
    (예를 들어, 1 Point는 고해상도 기기에서 더 많은 물리적 픽셀로 매핑된다)
  • 예시:
    • @1x: 1 Point = 1 픽셀 (구형 iPhone)
    • @2x: 1 Point = 2x2 픽셀 (iPhone Retina 디스플레이)
    • @3x: 1 Point = 3x3 픽셀 (iPhone Plus 및 Pro 디스플레이)

 

2. Android의 해상도 개념

Android는 Density-independent Pixel (dp) 단위를 사용하며 이 단위는 iOS의 Point와 비슷하지만, 좀 더 유연하다. 화면 밀도를 기반으로 다양한 범주를 제공하며, 밀도 그룹에 따라 dp를 실제 픽셀로 변환한다. android는 이외에도 화면 크기(스몰, 노멀, 라지, 엑스트라 라지)와 해상도를 조합하여 다양한 디바이스에 최적화된 레이아웃을 구현함.

  • px보다는 'dp'단위를 사용 (px은 화면의 전체 화면 크기와 상관없이 지정한 수치만큼 표시되는 절대적 표시 단위)
  • dp 단위: Android는 화면의 물리적 크기와 픽셀 밀도를 조합하여 UI를 설계
    • 기본적으로 1dp = 1px (160dpi 기준)
      (고밀도 디스플레이에서는 dp가 더 많은 픽셀에 매핑된다)
    • 예시
      • mdpi: 1dp = 1px (160dpi)
      • hdpi: 1dp = 1.5px (240dpi)
      • xhdpi: 1dp = 2px (320dpi)
      • xxhdpi: 1dp = 3px (480dpi)
      • xxxhdpi: 1dp = 4px (640dpi)

 

3. 주요 차이점

항목 ios Android
단위 Points (pt) dp (Density-independent Pixels)
기준 밀도 @1x, @2x, @3x mdpi (160dpi 기준)
밀도 계산 방식 픽셀 배율(@2x, @3x) DPI와 매핑(dp -> px)
리소스 제공 방식 @1x, @2x, @3x 리소스 폴더 mdpi, hdpi, xhdpi, xxhdpi 등
유연성 고정된 스케일링 방식 다양한 DPI와 해상도 조합 지원

 

4. 디자인 고려사항

  1. iOS: 고정된 해상도와 배율(@2x, @3x) 리소스를 준비하고, Point 단위에 맞춰 디자인.
  2. Android: 다양한 화면 크기와 DPI를 고려하여 dp 단위로 레이아웃을 설계하고, 적절한 크기의 리소스를 mdpi, hdpi, xhdpi 등의 폴더에 분리하여 제공

 

5. 각 단위의 관계와 차이점

1) px (Pixel)

  • 의미: 물리적 픽셀 단위. 화면의 실제 디스플레이 픽셀을 나타냄
  • 특징
    • 디바이스 해상도에 따라 값이 다르게 보일 수 있음.
    • 화면 밀도가 높을수록 픽셀이 더 작아져 동일한 px 값이 상대적으로 작게 보임.
    • 고정된 단위로, 크기가 디스플레이 DPI에 따라 달라지지 않음.
  • 사용 예: 이미지 작업, 픽셀 단위로 정밀한 크기 조정이 필요할 때.

2) dp (Density-independent Pixel)

  • 의미: 밀도 독립적인 픽셀 단위. 화면 밀도에 따라 크기를 조정하는 논리적 단위로, 안드로이드에서 주로 사용
  • 특징
    • 기준: 160dpi에서 1dp = 1px.
    • DPI에 따라 dp는 다른 수의 물리적 픽셀로 변환되며, 크기가 일관되게 유지
  • 사용 예: UI 요소 크기 및 마진, 패딩 등 레이아웃 설계.

3) sp (Scale-independent Pixel)

  • 의미: 글꼴 크기를 조정하기 위한 단위. dp와 비슷하지만, 사용자 설정(글꼴 크기 조정)을 반영한다는 점에서 차이가 있음.
  • 특징
    • 기본적으로 dp와 동일하게 동작.
    • 사용자가 시스템 글꼴 크기를 조정하면 sp 크기도 변경됨.
      • 예: 글꼴 크기 200%로 설정 시, 16sp는 32px로 렌더링.
    • 접근성을 고려하여 텍스트 크기 설정에 사용.
  • 사용 예: 텍스트 크기 (android:textSize="16sp").

4) pt (Point)

  • 의미: 인쇄 기반 단위로, 1pt = 1/72 인치. 주로 iOS 및 웹(특히 CSS)에서 사용
  • 특징
    • 화면의 실제 물리적 크기를 기준으로 렌더링됨.
    • 고정된 물리적 크기를 원할 때 사용.
    • iOS에서는 pt를 논리적 단위로 사용하며, 픽셀 배율(@1x, @2x, @3x)에 따라 실제 픽셀로 변환.
  • 사용 예: iOS UI 설계, 웹에서 글꼴 크기 설정.

5) 단위 간 관계 요약

단위 의지 고정/변동 여부 주요 사용 사례
px 물리적 픽셀 고정 정밀한 그래픽 작업, 이미지 크기 지정
dp 밀도 독립적 픽셀 DPI에 따라 변동 안드로이드 UI 요소 크기
sp 글꼴 크기를 위한 밀도 독립적 픽셀 DPI + 사용자 글꼴 설정에 따라 변동 안드로이드 텍스트 크기
pt 1/72 인치 (인쇄 기준 단위) 고정 (iOS에서 논리적 단위로 변동) iOS UI 설계, 웹 글꼴 크기

6) 예제 비교

안드로이드에서 dp, sp, px 비교

  1. 해상도가 **mdpi(160dpi)**인 경우:
    • 1dp = 1sp = 1px
  2. 해상도가 **xxhdpi(480dpi)**인 경우:
    • 1dp = 3px
    • 1sp = 3px (글꼴 크기 설정이 기본값일 경우)
  3. 글꼴 크기 설정을 **200%**로 변경한 경우:
    • 1dp = 3px (불변)
    • 1sp = 6px (사용자 설정 반영)

  iOS에서 px, pt 비교

  1. 배율이 @2x인 경우:
    • 1pt = 2px
  2. 배율이 @3x인 경우:
    • 1pt = 3px

  결론

  • dp와 sp는 안드로이드에서 레이아웃을 위한 필수 단위
  • pt는 iOS 및 웹에서 주로 사용
  • px는 물리적 크기를 다룰 때 사용하며, 해상도에 의존적

 

참고하면 좋을 링크 : https://design3damso.tistory.com/entry/%EB%94%94%EC%9E%90%EC%9D%B8-%EB%8B%A8%EC%9C%84

일정표 

09:00 ~ 10:10 : 디자인 카타 진행(UI 컴포넌트 조사)

10:10 ~ 10:30 : 데일리 스크럼 진행 & 학습 계획 세우기

10:30 ~ 13:00 : 웹퍼블리싱 특강 시간(grid&flex)

 

14:00 ~ 16:00 : 웹 퍼블리싱 특강

16:00 ~ 17:00 : 실습

17:00 ~ 18:00 : 과제 작성

 

19:00 ~ 20:30 : 아티클진행 (flex&grid 정리)

20:30 ~ 21:00 : TIL 작성 & 내일 계획 세우기 & 마무리

 

 

오늘 공부 내용 : [css] Flex 와 Grid

flex와 grid 기능 정리 및 사용법 블로그 업데이트 : https://eunzi789.tistory.com/65

 

[주요 목적]

1. Flexbox (Flexible Box)

  • 1차원 레이아웃 시스템
  • 주로 한 방향(행 또는 열)으로 아이템을 배치하고 정렬하는 데 사용.
  • 요소 간의 정렬과 간격 조정을 유연하게 처리.
  • 사용 예시: 버튼 그룹 / 네비게이션 바 / 간단한 정렬
  • 정렬 및 정돈을 위해 justify-content, align-items와 같은 속성을 사용

2. Grid (CSS Grid Layout)

  • 2차원 레이아웃 시스템
  • 행과 열을 동시에 관리할 수 있어 복잡한 레이아웃을 쉽게 구성할 수 있음.
  • 정밀한 레이아웃 구성이 가능하며, 페이지의 전체 구조를 설계하는 데 적합.
  • 사용 예시: 웹 페이지 전체 레이아웃 / 대시보드 디자인 / 카드형 레이아웃
  • grid-template-rows와 grid-template-columns로 행과 열을 정의

 

[자동 정렬 및 공간 분배]

1. Flex

  • 자식 요소들은 부모 컨테이너 내에서 자동으로 배치
  • 공간 분배는 자식 요소들의 내용과 크기에 따라 결정
  • 내용 기반(content-based)으로 작동

2. Grid

  • 부모 컨테이너에서 정확한 행과 열 크기를 미리 정의할 수 있음
  • 각 아이템이 특정 셀에 배치되도록 설정 가능
  • 레이아웃 기반(layout-based)으로 작동

[장단점]

1. Flex

  • 장점: 간단한 레이아웃에서 빠르고 직관적으로 사용할 수 있음.
  • 단점: 복잡한 2차원 레이아웃에는 적합하지 않음.
  • 사용: 요소가 한 방향으로 나열되고, 정렬 및 간격 조정이 필요한 경우.

2. Grid

  • 장점: 복잡한 페이지 레이아웃을 설계할 때 강력한 기능 제공.
  • 단점: 간단한 정렬 작업에는 불필요하게 복잡할 수 있음.
  • 사용: 행과 열을 모두 관리하며, 더 구조적인 레이아웃이 필요한 경우

 

TIL 작성

실무를 하면서 사용하기 전에 항상 다시 찾아보고 적용했던 flex와 grid의 사용법과 헷갈렸던 부분을 이참에 다시 정리해보았다.  flex는 한방향으로의 배치를 조정하지만 grid는 행과열 모두 관리할 수 있다는 차이점에 대해 알게되었다. 이를 통해 각자 기능의 장단점을 파악하고 상황에 따라 적절히 선택해야한다는 것을 알게되었다. 

내용을 정리하면서 css레이아웃 설계에 대한 이해도가 더 높아졌으니 직관적이고 효과적인 디자인으로 구현해 보아야겠다.

'개인' 카테고리의 다른 글

[TIL]20241219 / ch.4 노코드 개발_ 개인과제  (1) 2024.12.19
[WIL]20241213  (1) 2024.12.13
[TIL]20241210  (0) 2024.12.10
[TIL]20241209  (2) 2024.12.09
[WIL]20241206  (2) 2024.12.06

Flex와 Grid

display: flex와 display: grid는 요소를 배치하고 정렬하는데 사용

부모 요소에 display: flex 또는 display: grid를 설정하면 그 안의 자식 요소들이 영향을 받음

 

 

[주요 목적]

1. Flexbox (Flexible Box)

  • 1차원 레이아웃 시스템
  • 주로 한 방향(행 또는 열)으로 아이템을 배치하고 정렬하는 데 사용.
  • 요소 간의 정렬과 간격 조정을 유연하게 처리.
  • 사용 예시: 버튼 그룹 / 네비게이션 바 / 간단한 정렬
  • 정렬 및 정돈을 위해 justify-content, align-items와 같은 속성을 사용

2. Grid (CSS Grid Layout)

  • 2차원 레이아웃 시스템
  • 행과 열을 동시에 관리할 수 있어 복잡한 레이아웃을 쉽게 구성할 수 있음.
  • 정밀한 레이아웃 구성이 가능하며, 페이지의 전체 구조를 설계하는 데 적합.
  • 사용 예시: 웹 페이지 전체 레이아웃 / 대시보드 디자인 / 카드형 레이아웃
  • grid-template-rows와 grid-template-columns로 행과 열을 정의

 

[자동 정렬 및 공간 분배]

1. Flex

  • 자식 요소들은 부모 컨테이너 내에서 자동으로 배치
  • 공간 분배는 자식 요소들의 내용과 크기에 따라 결정
  • 내용 기반(content-based)으로 작동

2. Grid

  • 부모 컨테이너에서 정확한 행과 열 크기를 미리 정의할 수 있음
  • 각 아이템이 특정 셀에 배치되도록 설정 가능
  • 레이아웃 기반(layout-based)으로 작동

 

[장단점]

1. Flex

  • 장점: 간단한 레이아웃에서 빠르고 직관적으로 사용할 수 있음.
  • 단점: 복잡한 2차원 레이아웃에는 적합하지 않음.
  • 사용: 요소가 한 방향으로 나열되고, 정렬 및 간격 조정이 필요한 경우.

2. Grid

  • 장점: 복잡한 페이지 레이아웃을 설계할 때 강력한 기능 제공.
  • 단점: 간단한 정렬 작업에는 불필요하게 복잡할 수 있음.
  • 사용: 행과 열을 모두 관리하며, 더 구조적인 레이아웃이 필요한 경우

 


* Flex *

Flexbox는 1차원 레이아웃 도구로, 자식 요소를 가로(row) 또는 **세로(column)**로 정렬하고, 요소 간의 간격을 쉽게 조정합니다. display: flex;를 부모 요소에 설정하여 활성화된다

     display: flex; /* 플렉스 컨테이너 활성화 */
     flex-direction: row; /* 가로 방향 정렬 */
     justify-content: space-around; /* 가로 간격 균등 분배 */
     align-items: center; /* 세로 가운데 정렬 */
     gap: 10px; /* 요소 간 간격 */

display: flex와 함께 사용할 수 있는 주요 속성

  1. flex-direction 자식 요소를 배치할 방향을 설정
    • row (기본값): 요소를 가로로 배치
    • row-reverse: 요소를 가로로 배치하되, 순서를 뒤집음.
    • column: 요소를 세로로 배치
    • column-reverse: 요소를 세로로 배치하되, 순서를 뒤집음
  2. justify-content : 자식 요소의 가로 정렬(주 축) 방식을 설정
    • flex-start (기본값): 왼쪽 정렬
    • flex-end: 오른쪽 정렬
    • center: 가운데 정렬
    • space-between: 양 끝을 맞추고 요소 간 간격 균등
    • space-around: 요소 간 간격 균등 + 바깥 간격 포함
    • space-evenly: 요소 간 간격을 완전히 균등하게 분배
  3. gap : 자식 요소 간의 간격을 설정
    • 길이 값(px, %, em 등): 간격 크기 설정
  4. align-items : 자식 요소의 세로 정렬(교차 축) 방식을 설정
    • stretch (기본값): 자식 요소를 컨테이너 높이에 맞게 늘림
    • flex-start: 위쪽 정렬
    • flex-end: 아래쪽 정렬
    • center: 세로 가운데 정렬
    • baseline: 텍스트 기준선을 기준으로 정렬
  5. flex-wrap : 요소가 컨테이너를 벗어날 때 줄바꿈 여부를 설정
    • nowrap (기본값): 줄바꿈 없음
    • wrap: 줄바꿈 허용
    • wrap-reverse: 줄바꿈 허용, 순서를 뒤집음

* Grid *

Grid는 2차원 레이아웃 도구로, 요소를 행(row)과 열(column)에 배치하며 복잡한 레이아웃을 간단히 구현하고

display: grid;를 부모 요소에 설정하여 활성화된다.

<!DOCTYPE html>
<html>
<head>
    <style>
        .grid-container {
            display: grid; /* 그리드 컨테이너 활성화 */
            grid-template-columns: 100px 1fr 2fr; /* 열 크기 설정 */
            grid-template-rows: 50px auto; /* 행 크기 설정 */
            gap: 10px; /* 셀 간 간격 */
        }

        .header {
            grid-column: 1 / 4; /* 첫 번째 열부터 네 번째 열 앞까지 차지 */
            background-color: lightgreen;
        }

        .sidebar {
            grid-column: 1 / 2; /* 첫 번째 열만 차지 */
            grid-row: 2 / 3; /* 두 번째 행만 차지 */
            background-color: lightblue;
        }

        .main {
            grid-column: 2 / 4; /* 두 번째 열부터 네 번째 열 앞까지 차지 */
            grid-row: 2 / 3; /* 두 번째 행만 차지 */
            background-color: coral;
        }
    </style>
</head>
<body>
    <div class="grid-container">
        <div class="header">Header</div>
        <div class="sidebar">Sidebar</div>
        <div class="main">Main Content</div>
    </div>
</body>
</html>

display: grid와 함께 사용할 수 있는 주요 속성

grid-template-columns 열(column)의 크기를 설정

  • 길이 값(px, %, fr 등): 열의 크기를 설정
  • repeat(n, 값): 값을 반복
  • minmax(최소값, 최대값): 최소~최대 크기 설정
.container {
    grid-template-columns: 100px 1fr 2fr; /* 1열: 100px, 2열: 1fr, 3열: 2fr */
    grid-template-columns: repeat(3, 1fr); /* 3개의 열, 동일 비율 */
}
더보기
fr 단위란?
fr 단위는 다른 열(또는 행)들과 비율을 기반으로 공간을 나눕니다. 예를 들어, 1fr 2fr은 전체 남은 공간을 1:2의 비율로 나누는 것을 의미합니다. 픽셀 값, 백분율 등 다른 고정적인 단위가 설정된 영역을 제외한 남은 공간을 계산하여 나눕니다
  1. grid-template-rows 행(row)의 크기를 설정
    • 길이 값(px, %, fr 등): 행의 크기를 설정
    • repeat(n, 값): 값을 반복
  2. grid-column 그리드 아이템이 **가로 방향(열)**에서 시작할 위치와 끝날 위치를 지정
    grid-row 그리드 아이템이 **세로 방향(행)**에서 시작할 위치와 끝날 위치를 지정
    .item {
        grid-row: 2 / 4; /* 두 번째 행에서 시작해 네 번째 행 **앞에서** 끝남 */
    }
    
    • 축약형(속성값 중 앞은 무조건 span 키워드가 사용 됨)
    grid-column: span 2; /* 두 열을 차지 */
    grid-row: span 3; /* 세 행을 차지 */
    
  3. .item { grid-column: <start> / <end>; grid-row: <start> / <end>; }
  4. gap 행과 열 간의 간격을 설정
    • 길이 값(px, %, em 등): 간격 크기 설정

 

Grid 용어정리

  • 그리드 컨테이너 (Grid Container) : display: grid를 적용하는, Grid의 전체 영역. Grid 컨테이너 안의 요소들이 Grid 규칙의 영향을 받아 정렬된다. 위 코드 <div class=”container”></div>가 Grid 컨테이너.
  • 그리드 아이템 (Grid Item) : Grid 컨테이너의 자식 요소. 이 아이템들이 Grid 규칙에 의해 배치되는 것. 위 코드에서 <div class=”item”></div>들이 Grid 아이템이다.
  • 그리드 트랙 (Grid Track) : Grid의 행(Row) 또는 열(Column)
  • 그리드 셀 (Grid Cell) : Grid의 한 칸을 가리키는 말로 <div>같은 실제 html 요소는 그리드 아이템이고, 이런 Grid 아이템 하나가 들어가는 “가상의 칸(틀)”이라고 생각하면 된다.
  • 그리드 라인(Grid Line) : Grid 셀을 구분하는 선
  • 그리드 번호(Grid Number) : Grid 라인의 각 번호.
  • 그리드 갭(Grid Gap) : Grid 셀 사이의 간격.
  • 그리드 영역(Grid Area) : Grid 라인으로 둘러싸인 사각형 영역으로, 그리드 셀의 집합.

+ Recent posts