컴퓨터는 잘못이 없다..
[CSS]부트스트랩 Grid System 사용하기 - 반응형 칼럼 사용하기 본문
[반응형 칼럼]
-총 화면을 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>
'공부 > CSS' 카테고리의 다른 글
[CSS]부트스트랩 css파일에서 사용가능한 class 확인해보기 (0) | 2020.11.13 |
---|---|
[CSS]Bootstrap Grid System사용하기 (0) | 2020.11.12 |
[CSS]반응형 레이아웃, container class로 화면크기에 따른 폭넓이 조절하기 (0) | 2020.11.12 |