아핫뉴스실시간 인기검색어
아핫뉴스 화산 이미지
아하

생활

생활꿀팁

안녕하세요33
안녕하세요33

html css고수분들 이박스 두개 가상선택자로

어떻게 붙히나요?

그리고 가상선택자로 박스두개를 위아래로 붙이고 디스플레이 none후에 마우스 오버하면 디스플레이 블럭하면 보이게 되는건가요?

1개의 답변이 있어요!
  • Mignon
    Mignon

    안녕하세요.

    질문하신 가상선택자(::before, ::after) 를 이용해서 박스 두 개를 만들고, 마우스 오버 시 나타나게 하는 방법은 충분히 가능합니다. 핵심은 부모 요소 하나만 두고, 그 안에서 가상요소 두 개를 상·하단에 배치하는 겁니다.

    아래 예시를 보시면 바로 감이 오실 거예요.

    <div class="box"></div>

    .box {

    position: relative;

    width: 200px;

    height: 100px;

    background: #ccc;

    }

    /* 위 박스 (::before) */

    .box::before,

    .box::after {

    content: "";

    position: absolute;

    left: 0;

    width: 100%;

    height: 50px;

    background: skyblue;

    display: none; /* 처음엔 안보이게 */

    }

    /* 위 박스 */

    .box::before {

    top: -55px; /* 본체 위쪽 */

    }

    /* 아래 박스 */

    .box::after {

    bottom: -55px; /* 본체 아래쪽 */

    }

    /* 마우스 올렸을 때 가상박스 보이게 */

    .box:hover::before,

    .box:hover::after {

    display: block;

    }

    # 설명

    1. .box 하나만 있고, 그 안에서 ::before, ::after로 위/아래 박스 2개를 만듭니다.

    2. display: none → block으로 토글하면 마우스 오버 시 나타납니다.

    3. position: absolute로 위·아래에 자유롭게 붙일 수 있습니다.

    4. 만약 transition 효과를 주면 자연스럽게 등장시킬 수도 있어요.

    예를 들어 조금 더 자연스럽게 하려면 이런식으로 구현합니다.

    .box::before,

    .box::after {

    opacity: 0;

    transition: opacity 0.3s;

    }

    .box:hover::before,

    .box:hover::after {

    opacity: 1;

    }

    이런 식으로 하면 hover 시 두 박스가 서서히 나타나는 효과도 줄 수 있습니다.

    단, 구조상 반드시 부모 요소는 position: relative; 를 주셔야 가상요소가 정상적으로 배치됩니다.