오늘 한 것
margin 병합 현상
- margin은 외부 여백을 뜻한다.
- margin 병합 현상은 block 속성을 가진 요소들이 상하로 쌓일 때, 마주보는 부분의 margin이 병합되는 현상을 뜻한다.
- margin은 마주보는 블록 중 margin 값이 큰 블록의 margin만 적용되는 속성을 갖고있다.
- 예를 들어 A 블록의
margin-bottom: 20px;
B 블록의margin-top: 10px;
일 때 두 블록 사이는 20px + 10px로 30px 이어야하지만 실제로는 20px만 적용된다. - 이는 부모와 자식 요소 간의 margin에도 영향을 미친다.
- margin 병합 현상은 원래 블록 요소가 상하로 쌓일 때, 간격을 일정하게 유지하기 위해 생긴 기능이지만 가끔 이런 현상으로 불편을 겪을 때도 있다.
margin 병합 현상 해제
- flex 속성을 부여하면 margin 병합 현상이 발생하지 않는다.
- 자식 요소에
inline-block
속성을 부여하면 발생하지 않는다. - 부모요소에
overflow:hidden
을 설정하면 발생하지 않는다. 이는overflow
에 의해 BFC를 부모요소가 생성하기 때문이다.
background: linear-gradient
1 | background: #ccc linear-gradient(#ccc, #eee); |
- 위와 같이
linear-gradient
속성값을 통해 배경 이미지를 지정하지만 그 앞에 fallback을 위해 배경 색상인#ccc
를 또 붙여놨다. - 그 이유는 브라우저마다 배경 이미지의
linear-gradient
속성값을 지원하지 않거나 배경 이미지를 불러오지 못 하는 경우가 있는데, 이때 앞에 미리 붙여둔 배경 색상이 기본색상으로 지정되어 브라우저 호환성 문제를 부분적으로 해결할 수 있다.
Tab UI
- 탭 인덱스를 만들 때는
<ul role=”tablist”>
다음과 같이role="tablist
속성을 통해 만들 수 있다. <li tabindex=”0”>
tabindex
를 통해 탭 포커스 가능하게 만들어주지만 논리적인 흐름을 방해하기 때문에 좋지 못 하다.
1 | <!--그렇기 때문에 아래와 같이 aria=controls 속성값을 이용한다.--> |
기타
- block 상자에 inline 상자가 배치될 때 배치 위치가 block 상자의 상단이기 때문에 하단에 gap이 발생한다.
- 마크업 시 공간을 분리하고 세분화할 때는 암묵적 보다는 명시적으로 알려줄 필요가 있다. 예를 들어 form 안에서
label
태그로input
태그를 묶는 암묵적 방식 보다는 따로 분리하는 것이 더 낫다. 또한label
태그로input
태그를 묶을 시 디자인 이슈도 존재한다.
1 | /*암묵적*/ |
<input required>
필수 입력 서식이라는 뜻이다. 값을 입력하지 않으면form
으로 전송되지 않는다.border-bottom: 0;
와border-bottom-color: transparent;
는 모두 동일하게 border의 밑변을 없앨 때 사용한다. 하지만 전자는 border의 굵기를 아예 없애버리는 반면 후자는 border의 밑변이 존재하지만 색상이 투명색이라 보이지 않을 뿐이다.line height
로 인해 옆 이미지와 높이가 평행하지 않을 때는 margin을 음수값을 줘서 맞출 수 있다.
오늘 느낀 것
margin 병합은 처음 의도는 편기함을 위한 기능이었을 텐데 지금은 나를 괴롭힌다..
마크업은 쉽지만 CSS가 어렵다.. CSS는 할만하지만 마크업은 모르겠다.. 사실 둘 다 어렵다. 언제쯤 익숙해질까?
포기하지말자 어렵고 이해 안되고 힘들더라도 일단 끝까지 해보자 분명 어느 순간 이해를 꿰뚫는 날이 올테니!
새로 시작하는 한주도 ‘즐코’하자!!