한줄 지식
한줄로 끝나는 지식들을 잠시 모아둔다. 추후에 더 많은 내용을 알게된다면 글로도 쓸 수 있는 내용들이다.
시멘틱(Semantics) - MDN
프로그래밍에서 시맨틱은 코드 조각의 의미를 나타낸다.
예를 들어 "이게 어떻게 시각적으로 보여질까?"보다 "이 Javascript 라인을 실행하는 것은 어떤 효과가 있는가?", 혹은 "이 HTML 엘리먼트가 가진 목적이나 역할은 무엇인가?"
HTML은 채워질 데이터를 나타내도록 코딩해야합니다. 기본 프리젠테이션 스타일기반이 아니라요. 프레젠테이션(어떻게 보여져야만 하는가)은 CSS만의 단독 역할입니다.
의미론적인 마크업을 사용하면 아래와 같은 이점이 있다:
검색 엔진은 의미론적 마크업을 페이지의 검색 랭킹에 영향을 줄 수 있는 중요한 키워드로 간주한다(
SEO
참조).시각 장애가 있는 사용자가 화면 판독기(스크린리더)로 페이지를 탐색할 때 의미론적 마크업을 푯말로 사용할 수 있다.
의미없는 클래스 이름이 붙여져있거나 그렇지 않은 끊임없는
div
들을 탐색하는 것보다, 의미있는 코드 블록을 찾는 것이 훨씬 쉽다.개발자에게 태그 안에 채워질 데이터 유형을 제안한다
의미있는 이름짓기(
Semantic naming
)는 적절한 사용자 정의 요소 / 구성 요소의 이름짓기(namimg
)를 반영합니다.
사용할 마크업에 접근할 때 스스로에게 물어보세요. "내가 채울 데이터를 가장 잘 설명하고 나타내는 요소는 무엇일까?" 예를 들어, 그 데이터는 정렬된 목록입니까? 정렬되지 않은 목록입니까?, 관련된 정보가 제외된 섹션이 있는 아티클(article)입니까?, 정의의 나열입니까?, 캡션이 필요한 그림 또는 이미지입니까?, 사이트 전체 머리글(header) 및 바닥글(footer) 외에 또 다른 머리글과 바닥글이 있어야합니까? 등등
.someclass { cursor: pointer } vs someclass:hover { cursor: pointer } 차이
실질적인 차이는 없고, 작은 성능의 차이만 있을 수 있다.
:hover
를 사용하면 약간의 성능 저하가 있을 수 있다. 이는:hover
상태 가DOM
을 통해 위쪽으로 전파되는 반면cursor: pointer
속성은 자식 요소에 의해 상속되기 때문이다.여기서 핵심은 브라우저가
:hover
상태를 관리해야 하지만, 로드시cursor: pointer
속성만 초기화하면 된다는 것이다.
하지만 이 성능의 차이는 정말 미미하기 때문에, 성능보다는 스타일의 가독성이 .someclass {cursor : pointer}
가 더 좋기 때문에 이렇게 작성하는 편이 더 낫다.
void tag
대부분의 HTML 요소들은 여는 태그와 닫는 태그를 가지고 있다. 하지만, 일부 태그의 경우 내용이 없기 때문에 "self-closing"이 가능한 태그들이 존재하는데 이것을 void tag 라고 한다. (참고)
Open and Close 위젯 쉽게 만들기
details
태그와 summary
를 이용하면 쉽게 만들 수 있다.
summary::-webkit-details-marker { display: none; }
삼각형 마커에 대한 커스텀을 위해 참고용으로 남겨둔다.
자주 까먹는 flex
flex: grow shrink basis
flex-grow - 다른 flex 아이템과 관련하여 여유 공간이 있을때 flex 아이템이 커질 수 있는 양이다.
flex-shrink - 사용 가능한 공간이 충분하지 않을 때, 다른 flex 아이템과 비교하여 flex 아이템이 축소될 수 있는 양이다.
flex-basis - flex 아이템의 크기가 조정되는 기본 크기이다.
attribute selector
넓은 범위
좁은 범위
다중
empty selector
동적으로 UI
를 그릴때, 내용이 없는 경우에 유용. 단 공백도 내용으로 인식한다는 점을 유의(주석은 있어도 empty로 인식이 가능하다).
CSS 변수
의사 클래스를 이용하여 루트에 사용자 정의 속성을 등록하고, 하위에서 var()
표기법을 통해 사용할 수 있다.
조건부 규칙
특정 기기별 스타일 타켓팅하는 법
텍스트 그림자
오른쪽 / 아래 / 퍼짐의 양(생략 가능) / 색상
왼쪽 / 위 / 퍼짐의 양(생략 가능) / 색상
고해상도 배경 이미지
img tag vs css background-image
사실 가장 간단한 대답은, 내가 선택한 이미지가 콘텐츠의 일부인지 디자인의 일부인지를 확인하면 되는 것이다.
이럴때는 img tag!
page
인쇄시 기본적으로 배경 이미지를 포함하고 싶을 때 사용한다.경고 아이콘 처럼 이미지가 중요한 의미인 경우
img
태그를 사용하여, 스크린 리더에게 이미지의 의미를 전달할 수 있다(with alt text
).img가 콘텐츠의 일부인 경우(
with alt text
)텍스트 크기에 비례하여 이미지를 렌더링하기 위해 브라우저 크기 조정에 의존하는 경우
배경에서
background-image
를 사용하는 것보다img
태그를 사용하면 애니메이션 성능을 크게 높일 수 있다.
이럴때는 background-image!
이미지가 콘텐츠의 일부가 아닌 경우
텍스트 요소의 이미지 대체를 하는 경우
page
인쇄시 기본적으로 배경 이미지를 포함하고 싶지 않을 경우css sprites 같이 다운로드 시간을 개선해야 하는 경우
css sprites 같이 이미지의 일부만 표시해야 하는 경우
전체 창을 채우도록 배경 이미지를 늘리는 경우(
background-image
+background-size: cover
)
script 태그를 본문의 마지막에 넣는 이유
HTML
을 읽는 과정 중간에 스크립트를 만나면, 스크립트 로드와 실행을 위해 중단점이 생기고 그만큼 화면에 표시되는 것이 지연되게 된다. 또한 HTML
파싱이 끝나고 DOM
트리가 생기기 전에 자바스크립트가 실행되어 DOM
조작을 할 경우 에러가 발생할 수 있다.
여기에는 3가지 대안이 있다.
기존에 해왔듯이 본문의 맨 마지막에 스크립트 태그를 작성한다. (이 방법은 HTML이 현저하게 긴 경우에는 눈에 띄게 지연될 수도 있다.)
script
태그에async
속성을 추가한다. (스크립트 태그를 중간에 만나도HTML
파싱이 중단되지 않고 스크립트 로드와HTML
파싱이 함께 비동기적으로 동시에 실행된다. 그리고 스크립트가 로도되고 실행되는 시점에만HTML
파싱을 막고 실행이 끝나면HTML
파싱이 재개된다.)script
태그에defer
속성을 추가한다. (스크립트 태그를 중간에 만나도HTML
파싱이 중단되지 않고 스크립트 로드와HTML
파싱이 함께 비동기적으로 동시에 실행된다. 그리고HTML
파싱이 모두 끝난 후에 스크립트가 실행된다.)
script defer
defer
의 경우 상대적 순서를 유지한다는 점도 추가로 있다. 브라우저는 페이지에서 스크립트를 검색하고 병렬로 다운로드하여 성능을 향상시킨다. 여러 스크립트가 있으며defer
를 사용했다면 뒤에 스크립트가 먼저 로드되더라도 내가 사용한 순서에 따라 스크립트가 실행된다.따라서 스크립트간 의존성이 있는 경우
defer
를 사용하면 더 좋다.defer
는 외부 스크립트를 위한 속성으로,src
속성이 있는 스크립트 태그에서는 무시된다.
script async
완전히 독립적인 스크립트 일때 주로 사용한다.
작성 순서
에 따라 실행되던defer
와 달리,async
는로드 순서
에 따라 스크립트가 실행된다.async
는 외부 스크립트를 위한 속성으로,src
속성이 있는 스크립트 태그에서는 무시된다. (defer
와 동일)e.g. Google Analytics, 카운터, 광고
파일을 업로드 하고 싶다면?
<input type="file" />
요소를 추가하고, 여러 파일을 업로드 하고 싶다면multiple
속성을 추가한다.<form method="post">
태그에enctype
속성을multipart/form-data
로 설정해야 한다.(기본값:application/x-www-form-urlencoded
)
Last updated