매일 한 페이지씩 읽기. CSS3 편
HTML5가 '정보와 구조화', CSS3가 'styling의 정의'라는 본연의 임무에 충실하도록 명확하게 구분하기 시작함.
각자의 문법을 갖는 별개의 언어.
Link style이 가장 일반적. Inline style은 js로 동적 생성시 사용하는 경우 있지만 웬만하면 link style로 통일할 것
Eric Meyer’s reset
normalize.css
브라우저마다 존재하는 디폴트 CSS를 리셋하기 위함.
px : 디바이스 별로 픽셀 크기가 다르기 때문에 명확하진 않음. 대부분 브라우저는 1/96인치 = 1px로 인식
em : 요소에 지정된 폰트 사이즈의 배수. 콘텐츠 사이즈 설정, 콘텐츠를 포함하는 컨테이너 크기 설정에 상대적인 설정이 가능하여 편리.
다만 중첩된 자식 요소에 사용하면 모든 자식 요소에 영향을 미치므로 주의
rem : 최상위 요소(html)의 폰트 사이즈를 기준으로 함
% : 백분률 상대 단위.
vh vw, vmin, vmax : 뷰포트를 기준으로한 상대적 사이즈
red, blue, tan 등 색상 이름.
hex코드, rgb, rgba, hsl, hsla등 사용 가능
box-sizing의 기본값이 content-box이기 때문에 지정한 width, height는 컨텐츠의 가로, 세로 크기를 지정한다.
box-sizing을 border-box로 지정하면 width, height값은 컨텐츠+padding+border를 포함한 영역을 지정한다. 그렇게에 padding을 높여도 박스크기가 커지지 않았던 것!!
box-sizing 속성은 상속되지 않기 때문에 box-sizing 속성을 사용하도록 초기화하려면 아래와 같이 정의해야한다 .
html {
box-sizing: border-box;
}
*, *:before, :after {
box-sizing: inherit;
}
공백, 들여쓰기, 줄바꿈등을 컨트롤 하는 속성.
부모 영역을 벗어난, wrapping(자동 줄바꿈) 되지 않은 텍스트의 처리 방법을 정의한다.
이 속성의 값으로
한 단어의 길이가 부모 영역을 벗어날 때 처리 방법 정의
기본 값은 부모의 영역을 넘어 테스트가 표시된다
word-wrap:break-word는 단어를 어느 정도 고려하여 개행한다 (. , - 등)
word-break:break-all은 던어를 고려하지 않고 부모 영역에 맞추어 강제 개행한다.
기준, 좌표 프로퍼티(top, bottom, left, right)
static(기본) : 부모 요소의 위치 기준
relative : 자신이 static일 때 기준에서 좌표 프로퍼티만큼 이동
absolute : static이 아닌 부모, 조상 요소중 가장 가까운 요소를 기준으로 좌표 프로퍼티만큼 이동.
absolute 선언시 black 요소의 width는 content에 맞게 변환 되므로, width를 지정해줘야 함.
fixed : 부모요소와 관계 없이 브라우저의 viewport 기준으로 좌표 프로퍼티만큼 이동. 스크롤되어도 고정(viewport에)
absolute와 마찬가지로 content에 맞게 width가 변환되므로 width를 지정해줘야 함
자식 요소가 부모 요소를 벗어날 때 처리 방법 정의
visible, hidden, scroll, auto
해당 요소를 다음 요소 위에 떠있게 한다. (가리지는 않음)
absolute와 병행해서 사용하면 안 됨.
float 적용시 inline처럼 content의 크기만큼 width가 변경됨.
단, 다음 block 요소가 그 크기만큼 가로가 작아지는게 아님. 여전히 width 100%
.clearfix:after {
content: "";
display: block;
clear: both;
}
여기 다 적기엔 너무 많으니 포엠에서 확인하자.
상속되지 않은 속성에 inherit을 적용하면 상속시킬 수 있다.
중요도. 어디에 선언되었는가(head에 직접? inline에? 파일로 따로? 등)
명시도. 어떤 선택자를, 얼마나 구체적으로 조합했는가(id인가 class인가 등)
선언 순서.
별거 없다.. 걍 공통으로 지원하지 않는 CSS속성을 각 브라우저용으로 사용하라는 것..
근데 가능하면 안 쓰고 개발하는게 좋지
별거없다.. 인자 순서에 따른 값이 무엇인지만 참고
비교적 최근 CSS3에 추가되어 대부분 브라우저에서 벤더 프리픽스를 사용해야한다고 함.
그래서 그레이디언트를 직접 작성하기보단 여기와 같은 작성 툴을 사용하는걸 권장하는 듯
transition은 자동으로 발동되지 않는다. 가상 클래스 선택자, JS등의 액션에 의해 발동된다.
자동 발동을 원한다면 CSS 애니메이션을 사용하도록 한다
property, duration, timing-function, delay 4가지 속성이 있다.
모든 css 속성이 transition이 가능한 것이 아니다.
// Box model
width height max-width max-height min-width min-height
padding margin
border-color border-width border-spacing
// Background
background-color background-position
// 좌표
top left right bottom
// 텍스트
color font-size font-weight letter-spacing line-height
text-indent text-shadow vertical-align word-spacing
// 기타
opacity outline-color outline-offset outline-width
visibility z-index
프로퍼티 값이 변하면 브라우저는 그에 영향을 받는 모든 요소의 기하값을 재연산하여 layout 작업을 수행한다. 즉 다수의 자식요소를 가지고 있는 요소가 변경되면 성능 저하가 우려되므로 가능하면 layout에 영향을 주는 효과는 피해야한다.
width height padding margin border
display position float overflow
top left right bottom
font-size font-family font-weight
text-align vertical-align line-height
clear white-space
단순히 요소의 프로퍼티 변화로 동작하는 transition과 달리,
애니메이션 속성은 하나의 줄거리를 구성하고, 줄거리 내에서 세부 움직임을 시간 흐름 단위로 제어하며 전체 줄거리의 재생과 정지, 반복까지 제어할 수 있다.
일반적으로 JS를 이용한 애니메이션보다 더 나은 렌더링 성능을 가진다고 알려졌지만, 경우에 따라 다르다.
비교적 작은 효과나 CSS만으로 충분한 효과를 볼 수 있는가 vs 바운스, 중지, 되감기 등의 고급 효과가 필요한가 (JS로)
transition에 비해 훨씬 디테일한 조정(움직임 중 hover시 정지 등)이 더 쉽고 용이하니 꼭 학습하자
모바일 사용자가 많아지면서 반응형 웹이 모던 웹 사이트의 필수가 됨. (하지만 내가 알기로 다시 적응형으로 가는 추세..)
css를 정교하게 초기화하고, box-sizing:border-box로 직관적인 박스 모델을 구성한다.
float를 이용한 시맨틱 웹 구조 예제가 있는데, 최근에는 flexbox를 사용하는게 더 편할것이다.
디스플레이, 브라우저가 재각각인 각종 디바이스에 맞는 화면을 제공하기 위한 방식.
@media : (print, screen..)(min-width ..)에 따라 style을 달리 정함
개인적으로 반응형은 블로그나 요소가 적은 단순한 페이지에서 사용하는 용도라고 생각한다.
한 화면에 다양한 요소가 있거나, 디자인 구현을 위해서 반응형을 포기해야하거나, 너무 어려울 수 있기에 요즘처럼 ux, ui를 중시하는 경향에서는 반응형을 지양한다고 알고있다.
요소의 정렬과 순서 변경, 간격조절, 서로 다른 height의 요소 수평 정렬등 여러가지 모두 간단하게 해결 가능
비교적 최신 브라우저가 아니면 지원하지 않지만, 의미있게 사용할만 하다.
부모가 inline이면 inline-flex로 선언하면 된다. (몰랐음)
flex container 속성
flex item 속성
단일 inline : padding-top, bottom에 동일 값 적용 / height === line-height (단 이 방법은 여러 줄일 경우 행간이 지나치게 넓어지거나, Click Dead Zone 이슈 발생)
복수 inline : padding-top, bottom에 동일 값 적용 / flex 사용
block : 부모요소 기준으로 position : absolute, top : 50% (요소 높이 고정 or 유동에 따라 추가조절 필요 ) / flex 사용
컨테이너 요소로 img 요소를 래핑하면 img 요소 아래에 의도하지 않은 여분의 공간이 패딩된다.
이유 : image 요소는 inline 요소이기에 텍스트로 취급된다. 타이포그래피를 이해한다면 텍스트의 높이는 어센더 + x-height + 디센더로 나눌 수 있으며, 이 '디센더'가 이미지에도 적용되어 아래 여백이 생기는 것이다.
해결 방법 :