컴퓨터는 잘못이 없다..

[CSS]부트스트랩 Grid System 사용하기 - 반응형 칼럼 사용하기 본문

공부/CSS

[CSS]부트스트랩 Grid System 사용하기 - 반응형 칼럼 사용하기

도토리까꿍v 2020. 11. 12. 18:56
Contents 접기

[반응형 칼럼]            

-총 화면을 12칸으로 나누어 조절하므로 col 맨 뒤에 붙는 숫자는 1~12까지 있음

 

-화면크기는 총 5개로 구분 

화면 크기  Extra Small
<576px
Small
>=576px
Medium
>=768
Large
>=992
Extra Large
>=1200px

 

col-1~12 / 모든 영역에 대해 적용

            (화면크기가 아무리 커도(Extra Large이상) 아무리 작아도(Extra small이하) 지정 수만큼 차지)

           

col-sm-1 ~ 12 / 화면크기가 small 이상일 때 1~12칸 중 지정숫자만큼 차지

            (화면 크기가 small 아래로 내려가면 col-sm뒤에 붙는 지정 수와 상관없이 폭100%를 차지함)

           

col-md-1 ~ 12 / 화면크기가 medium 이상일 때 1~12칸 중 지정숫자만큼 차지

            (화면 크기가 medium 아래로 내려가면 col-md뒤에 붙는 지정 수와 상관없이 폭100%를 차지함)

            

col-lg-1 ~12 / 화면크기가 large 이상일 때 1~12칸 중 지정숫자만큼 차지

            (화면 크기가 large 아래로 내려가면 col-lg뒤에 붙는 지정 수와 상관없이 폭100%를 차지함)

            

col-xl-1 ~ 12 / 화면크기가 xl이상일 때 1~12칸 중 지정숫자만큼 차지

            (화면 크기가 extra large 아래로 내려가면 col-xl뒤에 붙는 지정 수와 상관없이 폭100%를 차지함)

 

 

[영역 보며 코드 해석해보기]

.col-sm-*

해석1 : device 크기 small~extra large에서는 12칸중 *칸 차지한다.

해석2 : device 크기 small 아래로는 12칸중 12칸 차지한다.(100% 차지)

 

.col-md-*

해석1 : device 크기 medium~extra large에서는 12칸중 *칸 차지한다.

해석2 : device 크기 medium 아래로는 12칸중 12칸 차지한다.(100% 차지)

 

.col-lg-*

해석1 : device 크기 large~extra large에서는 12칸중 *칸 차지한다.

해석2 : device 크기 large 아래로는 12칸중 12칸 차지한다.(100% 차지)

 

.col-xl-*

해석1 : device 크기 extra large 이후로는 12칸중 *칸 차지한다.

해석2 : device 크기 extra large 아래로는 12칸중 12칸 차지한다.(100% 차지)

 

[CSS코드 뜯어보기]

           실제 css 코드를 뜯어보면 어떻게 생겼을까?

            @media(min-value:576px){ 

            /*조건부로 작용하는 css, 화면 크기에 따라서 존재할 수도 있고 아닐 수도 있다.*/

            /*min-vlaue:576px를 만족해야지만 아래 코드가 실행된다.*/

                col-sm-6{

                    max-width : 50%

                }

            }

 

            

            @media(min-value:768px){ 

            /*조건부로 작용하는 css, 화면 크기에 따라서 존재할수도 있고 아닐 수도 있다.*/

            /*min-vlaue:786px를 만족해야지만 아래 코드가 실행된다.*/

                col-md-6{

                    max-width : 50%

                }

            }

 

 

[col클래스를 여러 개 적용했을 때 생기는 문제점]            

            <div class="col-sm-6 col-md-3"></div>의 

            경우에 800px이면 2가지 다 존재하는 데 이렇게 

            겹치는 경우가 생기면 무엇을 따라갈까? css파일 상 가장 최근에 정의한 것을 따라감!

            위의 경우엔 col-md-3을 따라간다. (css파일 보면 sm -> xl 로 정의되어있음)

 

           

            위의 개념 이해했는 지 퀴즈

 

            <div class="col-12 col-sm-8 col-md-4 col-lg-2 col-xl-1">

 

            device width에 따라 적용되는 폭 크기

            500px => (12/12)*100%

            600px => (8/12)*100%

            800px => (4/12)*100%

            100px => (2/12)*100%

            300px => (1/12)*100%

            

[예제코드]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Step01_gridsystem2.html</title>
    <!--부트 스트랩에서 css폴더 다운로드 받은 후 작업폴더에 넣어놓고 나서 bootstrp css 로딩하기-->
    <link rel="stylesheet" href="./css/bootstrap.css"/>
    <style>
        .row>div{
            border: 1px dashed black;
        }

        .container{
            border : 1px solid red;
        }

        .row img{
            /*부모컨테이너를 넘지 않도록 조절*/
            max-width: 100%;
        }

        #one{
            background-color: cornflowerblue;
        }

        #two{
            background-color :cornsilk
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>반응형 칼럼 테스트</h1>
        <div class="row">
            <!--총 12칸-->
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            <div id="one" class="col-1">.col-1</div>
            
        </div>
        <!--총 12칸을 넘어가면 아래로 흘러 내려간다.-->
        <div class="row">
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
            <div id="two" class="col-1">.col-1</div>
        </div>

        <div class="row">
            <div class="col-md-6 col-sm-3">누가먼저 적용될까유</div>
            <!--제일 큰 화면이면 두 영역에 다 속함 -> 나중에 정의된 col-md-6가 적용된다.-->
        </div>

        <div class="row">
            <!--sm~xl까지 모든 영역에 대해서 container의 50% -->
            <div class="col-6">.col-6</div>
        </div>
        <div class="row">
            <div class="col-sm-6">.col-sm-6</div>
        </div>
        <div class="row">
            <div class="col-md-6">.col-md-6</div>
        </div>
        <div class="row">
            <div class="col-lg-6">.col-lg-6</div>
        </div>
        <div class="row">
            <div class="col-xl-6">.col-xl-6</div>
        </div>
        <div class="row">
            <div class="col-md-6"><img src="images/image1.png"></div>
            <div class="col-md-6"><img src="images/image2.png"></div>
        </div>
        <h1>이미지 4장</h1><!--폭 100% 다 차지하고 싶다면 row안으로 안넣어도 된다.-->
        <div class="row"><!--하나의 row를 4개의 컬럼으로 구성함-->
            <!--medium device크기에서는 크기를 6 차지, large device크기에서는 크기를 3차지-->
            <div class="col-md-6 col-lg-3"><img src="images/image1.png"></div>
            <div class="col-md-6 col-lg-3"><img src="images/image2.png"></div>
            <div class="col-md-6 col-lg-3"><img src="images/image3.png"></div>
            <div class="col-md-6 col-lg-3"><img src="images/image4.png"></div>
        </div>

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

 

[실행결과]

 

[예제코드 설명]

 

1. 가장 큰 화면일 땐 모두에 해당하는 영역이므로 12칸 중 6칸(50%를 차지한다.)

그러다 화면폭이 작아지며 device 크기가 extra large보다 작아지면 .col-xl-6는 폭 100%를 차지한다.

 

2.  아래와 같이 여러 클래스를 적용했는데 가장 큰 화면은 col-md와 col-sm 영역 둘다 존재함

그렇다면 아래와 같은 예제에서는 가장 큰 화면에서 6칸을 차지할까? 3칸을 차지할까?

-> 6칸을 차지한다!

-> css파일상 가장 최근에 정의된 것을 따라감!

-> 실제로 sm~xl 순서로 정의되어 있다.

        <div class="row">
            <div class="col-md-6 col-sm-3">누가먼저 적용될까유</div>
            <!--제일 큰 화면이면 두 영역에 다 속함 -> 나중에 정의된 col-md-6가 적용된다.-->
        </div>

 

 

3. 아래와 같이 폭 100%를 차지하고 싶다면?

row요소 밖에 block요소를 사용해 주면 된다.

<h1>이미지 4장</h1><!--폭 100% 다 차지하고 싶다면 row안으로 안넣어도 된다.-->
        <div class="row"><!--하나의 row를 4개의 컬럼으로 구성함-->
            <!--medium device크기에서는 크기를 6 차지, large device크기에서는 크기를 3차지-->
            <div class="col-md-6 col-lg-3"><img src="images/image1.png"></div>
            <div class="col-md-6 col-lg-3"><img src="images/image2.png"></div>
            <div class="col-md-6 col-lg-3"><img src="images/image3.png"></div>
            <div class="col-md-6 col-lg-3"><img src="images/image4.png"></div>
        </div>
Comments