하고자 했던 것 :
프로젝트의 html과 css레이아웃을 짜던 중,
상단에 배치한 header와 좌측에 배치한 aside 태그에 각각 메뉴를 넣고 position을 fixed로 지정하였고,
해당 공간을 제외한 나머지 공간에 contents들을 위치 시켜 고정된 메뉴들과 내용들이 동시에 잘 보이도록 하고싶었다.
문제상황 :
고정된 상단과 좌측의 메뉴들이 아래로 위치하게 되어 hover효과가 나타나지 않았다.
그러나 z-index를 사용하려고 했더니 header와 aside는 fixed로 포지션이 static하였기 때문에
z-index는 반영되지 않는다고 했다.
App.jsx
function App() {
return (
<>
<Layout />
<Routes>
<Route path="/" element={<Home />} />
</Routes>
</>
);
}
고치기 전 Layout.jsx
const Layout = () => {
return (
<>
<header className="fixed head">
<Util />
</header>
<aside className="aside fixed">
<div className="aside__logo-wrapper">
<Logo />
</div>
<div className="nav__wrapper">
<Nav />
<UtilNav />
</div>
</aside>
</>
);
};
Home.jsx
const Home = () => {
return (
<section className="contents">
<article className="slider">
<Slider />
</article>
</section>
);
};
문제 발생 이유 :
Layout과 Home 컴포넌트는 형제 태그였고,
Home 컴포넌트의 최상위 태그
.contents의 포지션은 relative였다.
Layout의 header와 aside태그의 포지션은 fixed였다.
fixed된 Layout컴포넌트의 header와 aside에 z-index를 높여주면 상단에 위치할 것이라고 생각했지만
어쩐 일인지 static값에는 z-index가 주어지질 않았다.
(그런데 현재 다시 해보니 되었다! 나중에 밝혀봐야겠다...)
문제 해결
z-index가 동작하지않는 이유 4가지 (그리고 고치는 방법)
이 글은 https://coder-coder.com/z-index-isnt-working/의 번역글입니다. 오타 및 오역 제보 기쁘게 받도록 하겠습니다.
erwinousy.medium.com
위의 글을 읽고 난뒤
position값이 relative인 .contents의 위로
position값이 fixed인 .head와 .aside를 놓으려면
z-index를 높여주면 된다고 했으므로,
Layout컴포넌트의 최상단을 감싸는 div태그 layout__wrapper클래스를 추가해주고,
position relative, z-index를 높여주어 포지션을 최상위에 위치하도록 하여 주었다.
그랬더니 fixed된 메뉴들의 hover효과는 모두 정상작동 되었다.
const Layout = () => {
return (
<div className="layout__wrapper"> //해당 태그와 클래스 추가
<header className="fixed head">
<Util />
</header>
<aside className="aside fixed">
<div className="aside__logo-wrapper">
<Logo />
</div>
<div className="nav__wrapper">
<Nav />
<UtilNav />
</div>
</aside>
</div> //추가
);
};
//추가된 클래스
.layout {
&__wrapper {
position: relative;
z-index: 100;
}
}
위에서 말했던 대로 .head와 .aside에 z-index를 각각 높여주니 최상단으로 정상 작동되었으나,
해당 우선순위를 div태그에 준 layout__wrapper클래스로 따로 관리해주는 것이
추후 우선순위를 여타 태그들과 조정할 때에도 편리할 것 같아
해당방법으로 그대로 반영하였다 !!
'공부기록 > CSS' 카테고리의 다른 글
[tailwind] utility클래스의 우선순위 적용문제 (0) | 2024.03.01 |
---|---|
object-fit이 적용 안될때 (0) | 2023.11.21 |
[CSS module] REACT 부모 컴포넌트에서 props로 className 전달해주기 (0) | 2023.01.17 |
display : inline-block 요소의 특성 정리 (0) | 2022.08.11 |
[position, margin] 배치와 가운데 정렬을 함께 해야하는 경우 (0) | 2022.07.19 |