Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

기초공사 (html,css,javascript)

flex 본문

css/flex-shrink grow

flex

에스프레소라떼 2023. 9. 30. 12:12

// 좀더 정확히 알고싶어서 해본 예제

parent: 100%
paerent:400px

 

 

parent:400px로 두니 변화를 알수없으니 100%로 두었따.

 

예시를 보자.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flex</title>
    <style>
        .parent {
            width: 400px; 
            /* width:100%; */
            display: flex;
            /* border: 1px solid */
            background-color:grey;
        }

        .parent div {
            width: 100px;
            height: 50px;
            background: #ebebeb;
            border: 1px solid #ccc;
            padding: 10px;
            box-sizing: border-box;
            text-transform: uppercase;
        }  

        .grow {
           flex-grow:1;
           background:salmon;
        }

         .shrink div {
            width: 200px; 
        } 

        .parent .basis {
            flex-basis:180px;
            /*flex-basis:50%;*/
        }

        .parent .box1 {
            background-color:yellow;
        }
        .parent .box2 {
            background-color:salmon;
        }
        .parent .box3 {
            background-color:green;
            /* flex-shrink:2; */
            flex: 0 2 50%;
            /* 부모너비의 50%에서 두배로줄어든다. */
        }


    </style>
</head>

<body>
    <h1>flex</h1>
    <h2>flex-grow</h2>
    <div class="parent">
        <div>box1</div>
        <div>box2</div>
        <div class="grow">box3</div>
    </div>


    <h2>flex-shrink</h2>
    <div class="parent shrink">
        <div class="box1">box1</div>
        <div class="box2">box2</div>
        <div class="box3">box3</div>
    </div>


    <h2>flex-basis</h2>
    <div class="parent">
        <div>box1</div>
        <div>box2</div>
        <div class="basis">box3</div>
    </div>


    <h2>flex</h2>
    <div class="parent all">
        <div>box1</div>
        <div>box2</div>
        <div>box3</div>
    </div>
</body>

</html>
</body>
</html>

예시를 보자.

flexl-shrink는 기본값이 1이다.

설정을 안해줘도 화면사이즈가 줄어들면 각각 조금씩 축소 되어있다.

1:1:1이 된다.

 

부모너비가 400px이고 shrink는 200px씩 3개이므로 200px가 넘친다.

그 200px에 대해서 3등분하니 66.66px가 된다.

그래서 각 box1은 200px이니 200px - 66.66px 를 빼서 133.33px가 된다.

 

여기에서 box3을 flex-shrink:2로 두고싶다면??

1:1:2가되므로 box1과 box2는  4분의 1이 되고

box은 4분의 2가 된다. 

box1,2는 200px에서 4분의 1(50px이다.)을 빼면 150px가되고.

box3은 200px에서 4분의 2이브로(100px)를 빼면 100px가 된다.

 

// 다른예제를 보자.

<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>

   <style>
      .container {
         background-color: powderblue;
         height: 200px;
         display: flex;

      }

      .item {
         background-color: tomato;
         color: #fff;
         border: 1px solid #fff;
         /* 균등하게 나눠갖는다. 
         flex-grow: 1;*/

         /* 어떠한 여백도 없고. */
         /* flex-grow: 0; */
      }

      .item:nth-child(1) {}

      .item:nth-child(2) {
         /*flex-basis: 200px;*/
         /*위에 item이 0이고 flex-grow를 100을 주든..여백을 얘가 다 갖는다..
         2만이 여백을 갖겠다고 했는데 이게 100이다. 혼자 다 갖는다.*/
         /* flex-grow: 100; */


         flex-basis: 50%;
         flex-grow: 1;
         flex-shrink: 0;
                 
         /*
         flex-basis가 있어야 flex-shrink가 적용된다.
         */

      }
   </style>

</head>

<body>
   <div class="container">
      <div class="item">1</div>
      <div class="item">2</div>
      <div class="item">3</div>
      <div class="item">4</div>
      <div class="item">5</div>
   </div>
</body>

</html>

 

이번엔 flex-basis:0과 flex-basis:100%차이를 보면.

 

 

flex-basis:0

  • flex: 1 2 0%;는 같은 방식으로 동작하지만 초기 크기(flex-basis)가 부모 컨테이너의 너비의 0%로 설정됩니다. 즉, 해당 아이템의 시작점(초기 크기)가 없다고 볼 수 있습니다.

flex-basis:100%

  • flex: 1 2 100%;는 flex 아이템이 남는 공간을 채우기 위해 확장되고(flex-grow: 1), 화면 크기가 줄어들 때 그 비율에 따라 줄어들도록(flex-shrink: 2) 설정하며, 초기 크기(flex-basis)를 부모 컨테이너의 너비의 100%로 설정하는 것을 의미합니다.

아래예제1. flexl-basis:100%일때.

2. flex-basis:0%일때

 

위의 예제를 기본으로 간단한 예제를 만들어보자.

box들을 1:1:2의 비율로 만들어보고 / hover이에는 2배로늘어나게 해보자.

//

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        .parent {
            /* width:400px;
            width:100%; */
            height:200px;

            display:flex;
            
            background-color:gray;
        }

        .box1 {
            background-color:bisque;

            /* flex:1 1 0%; */
            flex:1;
        }
        .box2 {
            background-color:blueviolet;

             /* flex:1 1 0%; */
             flex:1;
        }
        .box3{
            background-color:salmon;

			/*
            flex: 2 1 0%;
            */

             /* flex:1 1 0%; */
             flex:1;

             transition:0.5s;
        }
        .box3:hover {
            flex:2 1 0%;
        }

    </style>

</head>
<body>
    <!-- box1.2.3을 1:1:2 비율로 만들어보자. -->

    <h1>flex-grow</h1>
    <div class="parent">
        <div class="box1"></div>
        <div class="box2"></div>
        <div class="box3"></div>

    </div>

</body>
</html>

'css > flex-shrink grow' 카테고리의 다른 글

flex-ex-생활코딩에서 연습  (0) 2023.09.16