Programming/CSS

[CSS] overflow, visibility, display

Isaac S. Lee 2023. 9. 26. 09:51

🍁오버플로우 (overflow)


박스에 담을 수 있는 내용을 초과하면 초과한 내용이 박스를 빠져나간다. 하지만 height: auto; 값을 주면 그만큼 박스가 커지기 때문에 내용이 빠져나가지 않는다.

만약 박스 크기를 유지하면서 내용을 보이지 않게 하거나 보이게 하고 싶다면 overflow를 사용하면 된다.

 

<style>
    #box {
        border: 1px solid black;
        width: 200px;
        height: 200px;
        /* overflow: visible; */
        /* overflow: hidden; */
        /* overflow: scroll; */
        overflow: auto;
    }
</style>

visible은 오버플로우가 발생하면 넘치는 대로 두고, hidden은 오버플로우가 발생한 부분을 안 보이게 한다.

scroll은 오버플로우가 발생하지 않아도 scroll 바를 만들고, auto는 오버플로우가 발생하지 않으면 scroll바를 만들지 않는다.

 

overflow x, y

overflow-x: ;
overflor-y: ;

오버플로우는 x와 y에 따라 속성을 다르게 줄 수 있다.

 

🍁가시성 (visibility)


가시성은 요소를 화면에 보이게 할지, 보이지 않게 할지를 결정하는 것이다.

 

#cat1 {
    visibility: hidden;
}

첫 번째 고양이의 visibility를 hidden으로 설정하자 보이지 않는다. 그런데 고양이가 있던 자리는 그대로 남아있다.

즉, 눈에만 보이지 않을 뿐 요소의 원래 영역은 그대로 유지된다.

 

hover 기능 활용

#cat1:hover {
    visibility: hidden;
}

마우스를 올려뒀을 때 고양이를 보이지 않게 하려고 hover를 쓰는 것은 부자연스럽다.

고양이가 나타나고 사라지는 것을 반복하며 깜박이기 때문이다.

 

첫 번째 고양이 위에 마우스를 올려두면 반응

#cat1:hover + #cat2 {
    visibility: hidden;
}
#cat1:hover ~ img {
    visibility: hidden;
}

다른 고양이에게 마우스를 올려뒀을 때 형제 선택자를 사용한다면 자연스럽게 두 번째 고양이를 안 보이게 할 수 있다.

 

부모 상자 위에 마우스를 올려두면 반응

<body>
    <div id="box">
        <img src="../asset/images/catty02.png" id="cat1">
        <img src="../asset/images/catty04.png" id="cat2">
        <img src="../asset/images/catty05.png" id="cat3">
    </div>
</body>
<style>
    #box {
        border: 10px solid black;
        padding: 30px;
    }

    #box:hover > img {
        visibility: hidden;
    }
</style>

부모 선택자를 이용하여 박스 위에  마우스를 올려뒀을 때 모든 고양이들을 보이지 않게 할 수 있다.

 

🍁디스플레이 (display)


디스플레이는 가장 많은 출력 속성을 가지고 있는 기능 중에 하나이다.

display 속성은 HTML 요소가 브라우저에서 보여지는 방법, 즉 레이아웃에 대해 결정한다.

 

가로로 정렬된 메뉴 만들기

블럭 태그와 인라인 태그 성질 변환

<body>
    <h1>블럭 태그</h1>
    <div id="box1box">상자1</div>
    <div id="box2box">상자2</div>
    <div id="box3box">상자3</div>

    <h1>인라인 태그</h1>
    <a href="#"><link1 class="link">링크1</link1></a>
    <a href="#"><link2 class="link">링크2</link2></a>
    <a href="#"><link3 class="link">링크3</link3></a>
</body>
<style>
    .box {
        border: 1px solid black;
        display: inline;
    }

    .link {
        border:1px solid black;
        display: block;
        width: 100px;
        height: 100px;
    }
</style>

  • 블럭 태그 -> 인라인 태그
  • 인라인 태그 -> 블럭 태그

display를 inline 또는 block으로 설정하면 블럭 태그를 인라인 태그로 만들 수 있고, 또한 반대로 인라인 태그를 블럭 태그로 취급할 수 있다.

위 코드에서는 블럭 태그가 인라인 태그로 성질이 바뀌었기 때문에 원래 블럭 태그인 링크 박스의 width와 height를 지정해 줄 수 있게 되었다.

 

<ul>과 <li> 태그의 공간

<body>
    <ul>
        <li>메뉴</li>
        <li>메뉴</li>
        <li>메뉴</li>
        <li>메뉴</li>
        <li>메뉴</li>
    </ul>
</body>
<style>
    ul {
        border: 1px solid red;
    }

    li {
        border: 1px solid blue;
    }
</style>
ul {
    border: 1px solid red;
    padding: 0;
}

먼저 <ul>태그와 <li> 태그의 공간을 확인해 보도록 하자.

아닛😮 그런데 <li> 태그의 왼쪽에 여백이 있다! 이건 누구의 것일까?

이 여백은 빨간색 상자(ul)가 가지고 있는 안쪽 여백이다.

<ul> 태그의 padding을 0으로 설정하자 여백이 사라졌다. 

 

inline-block

<ul id="menu">
    <li>메뉴</li>
    <li>메뉴</li>
    <li>메뉴</li>
    <li>메뉴</li>
    <li>메뉴</li>
</ul>
#menu li {
    display: inline-block;
    width: 15%;
}

<li> 태그의 display를 inline으로 설정하자 불릿이 사라지고, 가로로 나열이 된다.

이때 크기를 지정하려면 inline-block으로 설정하면 된다. 이는 inline 성질을 갖고 있으면서 inline처럼 크기를 지정할 수 있는 display이다.

 

hover 속성 부여

#menu li {
    display: inline-block;
    width: 15%;
    background-color: #CCC;
    text-align: center;
    padding: 10px;
}

#menu li:hover {
    background-color: #333;
    color: white;
}

hover 속성을 부여하여 마우스를 올려뒀을 때 메뉴의 색이 변하게 했다.

우리가 사용하는 많은 웹 페이지의 메뉴와 버튼이 이런 방법으로 만들어진다.