이전에 만들었던 index.html 페이지를 반응형으로 만들고자 한다.
스마트폰에서 동작하는 것처럼 보이기 위해
최상위 wrapper 박스를 만들어서 최대너비를 줬다.
<div class='wrap'> ... </div>
.wrap { max-width: 500px; margin: auto; }
home-bar와 내용 사이즈가 어긋났다.
home-bar는 position : fixed
이기때문에 엘리먼트간의 부모-자식 관계가 끊긴 상태다. 그래서 width : 100%
해봤자 부모너비가 되는게 아니라 body의 너비가 계산된다.
fixed 이지만, 너비는 부모박스의 너비만큼 (심지어 반응형으로) 계산하고 싶다.
.wrap { ... position: relative; }
.home-bar { ... width: 500px; max-width: 100%; }
max-width : 100%
설정고정 크기일땐 쉽다
width : ★px; height : ★px;
근데 이게 반응형으로 하려면 애매해진다.
width : 40%; height : 40%;
를 해보면 각각 다르게 설정되는걸 볼 수 있다. 너비와 높이의 기준이 되는 길이가 다르기 때문이다.
해결방법으로는
width : 40%; height : 0%; padding-bottom : 40%;
로 하면 된다.
단, 이렇게하면 이 엘리먼트 안의 요소들이 패딩으로 인해 배치가 틀어진다. position으로 새롭게 레이아웃을 짜던가 다른방법으로 해결해야 한다.
저 빨간 동그라미 위치 (오른쪽, 밑 기준으로 20px씩 고정된 자리) 에 놓는 방법이 없다. 단순 픽셀계산해서 할 순 있지만 화면 크기가 변경되는순간 어긋나버린다.
해결방법을 고민하던 중에 mdn문서를 보니 아래와 같은 글귀를 발견하였다.
단, 요소의 조상 중 하나가 transform, perspective, filter 속성 중 어느 하나라도 none이 아니라면 (CSS Transforms 명세 참조) 뷰포트 대신 그 조상을 컨테이닝 블록으로 삼습니다.
부모 컨테이너가 transform 속성을 가지면 그 박스를 기준으로 변경할 수 있다고 한다.
그래서 home-bar 요소 안에 edit요소 (편집 동그라미 요소)를 넣고 home-bar에 아무효과가 없는 transform : scale(1)
을 설정하니
해결이 되었다.