calc()함수를 이용하면 css 속성의 값으로 계산식을 지정할 수 있다.
width: calc(100%-200px)
은 100%에서 200px만큼 뺀 값을 계산하여 너비에 할당width: calc(80vw-100px)
둘 중 작은(큰) 값을 반환한다.
width: min(50vw, 500px)
이라면 화면이 커지고 작아짐에 따라서 50vw와 500px 중 작은 값을 너비로 취한다.
참고 https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
기본적으로 어떤 요소가 맨 위에 있거나 맨 아리에 있을지를 결정한다. 요소들에 z-index가 설정되지 않아도 stacking order에 의해 요소들의 위치가 결정된다. 규칙에 의하며 마크업에서 나중에 오는 요소는 앞에 오는 요소의 위에 있다. 특정 요소의 렌더링 순서는 자신의 z-index 속성 값에 영향을 받는다. 요소들이 가지는 특별한 속성으로 인해 쌓임 맥락이 생성되기 때문이다.
element의 위치를 설정하려면 position이 static이 아닌 relative, absolute와 같은 값을 가지고 있어야 한다.
opacity, transform과 같은 css 속성들을 설정하면 element가 새로운 stacking context에 배치된다. 이럴 땐, 위에 배치하고 싶은 요소에도 position 속성과 더 높은 z-index값을 설정하여 해결할 수 있다.
자식의 z-index값은 부모의 z-index의 값에 의해서 제한된다. 자식의 z-index 값은 형제들의 z-index와 비교하여 쌓이는 순서를 결정한다.
출처 mdn
https://codepen.io/bbozzay/pen/vaPPmw
1. 이걸 비슷하게 만들어 보는 실습을 하였다. 그렇지만 코드는 참고하지 않고 만들어 전혀 다르게 작성되었다.
section-board 부모 안에 16개의 board-item을 담고, grid로 배치해주었다.
밑에 그림자를 ::after로 만들어서 표현했다. 그리고 board-item:hover했을 때, 위로 살짝 올라가도록 transform 속성을 주었다.
그런데 hover했을 때, 의도치 않게 그림자가 더 위로 올라오는 현상이 생겼다. 이는 위에서 설명 했듯이, transform 속성 때문에 z-index가 무시되었기 때문이다. 그런데, 그림자는 가상요소로서 board-item 의 자식이기때문에, 위의 해결방법으로 해결할 수 없었다. 그래서 다른 속성을 이용해서 구현하였다.
translate 대신 board-item:hover에 top, left 속성을 주었다. 그 후에 .board-item:hover::after 에 기존의 top, left 값에 hover될 때 올라가는 만큼 다시 내려주어서 움직이지 않는 것처럼 보이게 하였다.
input checkbox와 label을 이용해서 board-item을 눌렀을 때 색깔이 변하도록 하였다.
<style>
/* 첫번째 자식인 p의 bg를 바꾸는 것.*/
/* 직계 부모를 보고, 거기서 몇 번째 자식인 p 이렇게 확인해야함 */
/* 첫번째 자식인 p가 없어서 색이 안 바뀌는 것 */
p:first-child {
background-color: coral;
}
p:nth-child(2) {
background: #000;
}
</style>
</head>
<body>
<div>
<span>첫번쨰</span>
<p>p의 첫번째</p>
<p>p의 두번째</p>
<p>p의 세번째</p>
</div>
</body>
소소해 보이지만 꼭 알아두어야 하는 팁들을 많이 얻은 하루이다. 🙂
오 라디오로 활용까지하셨네요 👍