IT 공부

[ CSS ] 마우스 hover시에 tip 메세지 보여주기

JONGI-N CHOI 2022. 8. 18. 12:01

아이콘에 마우스를 가져다대면, tip 말풍선을 보여주는 UI를 자주 볼 수 있습니다. 

 

위의 사진과같은 기능은 CSS만으로도 구현이 가능합니다. 

 

 

HTML

<div id="radio_container">
    <div class="tip">
        <p>
           원하는 tip 메세지
        </p>
    </div>
</div>


CSS

.container {
    position: relative;
}

.tip{
    position: absolute;
    top: 8px;
    left: 55px;

    font-size: 14px;
    line-height: 26px;
    text-align: center;

    background-color: #b3dfe6;
    border-radius: 50%;
    width: 24px;
    height: 24px;
    cursor: default;
}

.tip:before{
    content:'?';
    font-weight: bold;
    color:#fff;
}

.tip:hover p{
    visibility: visible;
    opacity: 1;
}

.tip p{
    opacity: 0;
    visibility: hidden;

    color: #fff;
    font-size: 13px;
    line-height: 1.4;
    text-align: left;

    background-color: #0064b7;
    width: 400px;
    padding: 20px;
    border-radius: 3px;
    box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2), -1px -1px 3px rgba(0, 0, 0, 0.2);

    position: absolute;
    right: -370px;

    transition: visibility 0s, opacity 0.5s linear;
}

.tip p:before{
    position: absolute;
    content: '';
    width:0;
    height: 0;
    border:6px solid transparent;
    border-bottom-color:#0064b7;
    left:10px;
    top: -12px;
}

 

"?" 아이콘을 만들기

.tip {
    ...
    background-color: #b3dfe6;
    border-radius: 50%;
    width: 24px;
    height: 24px;
}

.tip:before{
    content:'?';
    font-weight: bold;
    color:#fff;
}

background 와 border-radius를 통해서, width와 height가 24px인 동그란 원을 만듦

 

before를 이용해서, 흰색의 두꺼운 폰트를 가진 "?" 컨텐츠를 가진 가상 요소를 생성

 

 

hover 이벤트 

.tip:hover p{
    visibility: visible;
    opacity: 1;
}

.tip p{
    opacity: 0;
    visibility: hidden;

    ...

    transition: visibility 0s, opacity 0.5s linear;
}

visibility 속성과 opacity를 이용해, tip 메세지인 p태그를 마우스 hover시에만 보이도록 지정

 

visibility속성은 문서의 레이아웃을 변경하지 않고, 요소를 보이거나 숨기도록 합니다. 

 

 

말풍선 UI 만들기 

.tip p{
    ...
    
    color: #fff;
    font-size: 13px;
    line-height: 1.4;
    text-align: left;

    background-color: #0064b7;
    width: 400px;
    padding: 20px;
    border-radius: 3px;
    box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);

    ...
}

.tip p:before{
    position: absolute;
    content: '';
    width:0;
    height: 0;
    border:6px solid transparent;
    border-bottom-color:#0064b7;
    left:10px;
    top: -12px;
}

기본 틀이되는 p 태그를 만들고, 삼각형의 모양의 가상요소를 만들어서 p태그 위에 붙히게 되면, 말풍선 모양이 만들어집니다. 

 

border: 6px solid transparent; 를 통해서 12px x 12px의 투명한 요소가 만들어집니다. 

 

border-bottom-color를 이용하게 되면, 바텀 border에 대해서만, 컬러를 지정할 수 있습니다. 

border:15px solid transparent;
border-bottom-color:#64c1ff;
border-top-color:red;
border-left-color:gold;
border-right-color:black;

border-bottom-color를 더 자세히 확인해보기 위해서, 볼더 15px을 가지는 투명 요소를 만들고, top/ right/ bottom/ lef에 대해서 각기 다른 색을 주면 아래의 사진과 같은 모양이 나옵니다. 

따라서, 바텀의 부분의 색을 tip 메세지의 배경과 같은 색으로 만들고, 위에 배치하게 되면 자연스러운 말풍선 모양이 만들어지게 됩니다.