:Cascading Style Sheets
더 나은 UX를 제공하기 위해, UI 및 레이아웃을 적절히 구성하기 위해 사용한다
UI : User Interface
사용자가 애플리케이션을 작동시키는 도구
사용자가 애플리케이션을 사용하게 하는 데 매우 중요한 역할을 한다
💡직관적이고 쉬운 UI 제작은 프론트엔드 개발자의 기본 소양
💡좋은 UX는 직관적이고 쉬운 UI에서 나온다
seletor {
//declaration block
property: value; //declaration
}
style
속성 적용 <style>
요소 내에서 작성하여 적용 <link rel="stylesheet" href="name.css"/>
margin
: content 바깥 여백 영역
border
: content 테두리 (경계)
padding
: content 안쪽 여백 영역
color
: 글자색 지정
background-color
: 배경색 지정
background
: 배경색, 이미지, 크기, 반복 등 여러 스타일을 한 번에 지정할 수 있는 단축 속성
등..
font-family: "맑은고딕", "나눔고딕";
: 쉼표로 구분하여 fallback 글꼴 추가
font-size: 10px;
: 글자 크기
font-weight: 300;
: 글자 굵기
text-decoration: underline
: 밑줄(취소선, 이중선 등)
letter-spacing: 90%
: 자간
line-height: 110%
: 행간
text-align: left
: (left, right, center, justify) 정렬
text-shadow: 수평px 수직px 흐림반경 그림자색
: 그림자
절대단위 (px, pt 등)
상대단위 (em, rem, %, ch, vw, vh 등)
rem
: 브라우저 기본 글자크기 = 1rem
em
: 해당 요소가 속해있는 요소의 글자 크기가 1em
기준이 된다font-size
가 없다면 부모 요소의 font-size
가 상속된다 rem
사용할 것!vw
: viewport width, 보이는 영역 너비의 100분의 1 vh
: viewport height, 보이는 영역 높이의 100분의 1 1vw
, 1vh
사용 : 하나의 콘텐츠로 묶이는 요소들은 하나의 박스를 이룬다
display
속성1️⃣ block
: 줄바꿈이 되는 box (ex. <div>
, <p>
,<h1>
)
기본 width=100%
2️⃣ inline block
: 줄바꿈이 되지 않으나, block의 특징을 가지는 box (ex. <span>
, <button>
,input
)
기본 width=글자가 차지하는 만큼
but, width
와 height
지정 가능
span {
display: inline-block; //display 속성을 통해 지정할 수 있다
}
3️⃣ inline
: 줄바꿈이 되지 않고, 크기 지정을 할 수 없는 box (ex. <span>
, <a>
, <em>
)
기본 width=글자가 차지하는 만큼
{overflow: auto;}
선언할 시 브라우저 환경에 따라 스크롤이 추가 됨 overflow
속성의 value: hidden
등style
의 종류 : solid
, dotted
, dashed
등 p {
border: width(1px) style(solid) color(yellow);
}
p {
margin: top right bottom left // px
margin: top-bottom right-left
margin: t-r-b-l // -2rem: 음수 값 지정 가능. 과할시 다른 element와 겹치게 만들 수도 있다
}
p {
padding: top right bottom left // px
padding: top-bottom right-left
padding: t-r-b-l
}
content-box
border-box
(권장)* {
box-sizing: border-box;
}
// 사실 여기까지는 큰 어려움이 없었다.
이 밑으로 나오는 css의 다양한 selector는 헷갈리고 알쏭달쏭했다...
사실 자바스크립트보다 흥미가 떨어지는 부분이라고 느끼고 있었는데, CSS를 다루는 것은 애플리케이션의 UI, UX를 접근성 좋게 만들기 위한 일이며 프론트엔드 개발자의 기본 소양이라는 말을 들으니 의지가 타올랐다!
무엇보다 오늘 배운 내용은 오늘 제대로 알고 하루를 마무리 하자는 것은 내가 코드스테이츠에 임하는 첫 번째 다짐이다!!
익숙하지 않은 부분을 암기해야 한다고 생각하니 막막했지만 직접 활용해 보니까 그렇게 어려운 난관은 또 아니었다.
하루 종일 selector를 중점적으로 공부하고, 운동 다녀와서도 계속 복습하면서 익숙해지는 게 느껴졌다.
어느새 12시 32분을 넘어간다..
완벽하지 않아도 더이상 어렵게 느껴지지 않는다는 것으로 오늘도 결국 하나의 step을 마무리한 것 같다는 생각이 들었다
전체 셀렉터:
*{...}
태그 셀렉터:h1{...}
id 셀렉터:#only{...}
class 셀렉터:.class{...}
attribute 셀렉터:a[href]{...}
,p[class]
,p[id="정확히일치"]
,[class~="ABC"]
,[class^="접두사"]
,[class$="접미사"]
,[class*="1개이상포함"]
,[class|="~이거나 ~로시작"]
자식 셀렉터:
header > p {}
//header 요소의 자식 중 p 요소
형제 셀렉터:header + p {}
// header 요소 바로 인접한 형제 p 요소 1개
header ~ p {}
// header 요소 뒤에 나오는 모든 p 요소 형제들
후손 셀렉터:div p {}
//div 요소의 자식 p 요소와 후손 p 요소 모두 선택
그 외
가상 셀렉터
,UI 요소 상태 셀렉터
,구조 가상 클래스 셀렉터
,부정 셀렉터
,정합성 확인 셀렉터
등...
너무 많아서 예시는 생략... !!
https://flukeout.github.io/
위 사이트에서 css selector 실습 게임을 할 수 있다
많은 도움이 되었다!
div :nth-of-type(2)
: div의 자식 중 2번째 div 선택
div:nth-of-type(2)
: 2번째로 나오는 div 선택
div:nth-child(2)
: 2번째 자식이 div인 경우 모두 선택
div :nth-child(2)
: div의 2번째 자식 선택
li:only-child
: li가 외동인 경우 모두 선택
not(~)
: ~가 아닌 경우 모두 선택
오늘 배운 내용은 양적으로 방대해서 타이핑만 3시간 넘게 걸린 것 같다
공부하는 동안 공책에 적은 내용을 그대로 컴퓨터로 다시 작성해서 올리는 거라 필기를 2번 하는 것은 시간적인 면에서 비효율적인 것 같다...
앞으로 시간 분배를 어떻게 할지, 컴퓨터로 정리를 어떻게 해야 효율적으로 할 수 있을 지에 대해 생각해 봐야 할 것 같다 ㅠㅠ
맞아..옛날엔 공책에 적으면서 공부했지