# 8-MediaQuery

By
코알라코딩
In 

# 목차

  • 1. 개요
  • 2. ex
    • 2.1. map 작성
    • 2.2. map-get 작성
    • 2.3. 사용

# 1. 개요

# 2. ex

실행화면

  1. 아래와 같은 경로에 파일을 생성한다.
root/
	├─basic.html
	└─scss/
		└─mixin/
			└── _media.scss
  1. style.scss 파일을 열고 _media.scss를 임포트 한다.
style.scss
@charset "utf-8";
//base
@import 'base/base';
//mixin
@import 'mixin/mixin';
@import 'mixin/extend';
@import 'mixin/media';
@import 'mixin/theme';
//layout
@import 'layout/layout';
@import 'layout/gallery';
  1. _media.scss를 열고 화면 크기를 변수로 작성한다.
mixin/_media.scss
$mobile: 568px;
$tablet: 768px;
$desktop: 992px;

# 2.1. map 작성

  1. map 을 적용하기 위해 화면중단점을 변수로 작성한다.
mixin/_media.scss
$breakpoints: (
	'sm': (
		min-width: $mobile,
	),
	'md': (
		min-width: $tablet,
	),
	'lg': (
		min-width: $desktop,
	),
);

Review

  1. $breakpoints 변수를 선언하고 'sm', 'md', 'lg'의 키를 정의한다.
  2. 각 키는 하위맵을 가진다.
  3. 각 하위의 맵에 'min-width' 키를 정의한다
  4. 'min-width' 키에 값으로 미리 정의 한 $mobile, $tablet, $desktop 변수를 할당하여 각각의 화면 크기를 지정한다.

# 2.2. map-get 작성

mixin/_media.scss
@mixin responsive($size) {
	$query: map-get($breakpoints, $size);
	$min-width: map-get($query, min-width);
	@media (min-width: #{$min-width}) {
		@content;
	}
}

Review

  1. mixin responsive 는 매개변수 $size 를 받는다
  2. 지역변수 query 를 선언한다.
    • map-get 함수에 인수로 변수$breakpoints변수에서 $size 변수값과 일치하는 키를 찾아 $query 에 할당한다
    • 결과적으로 $query 에는 $breakpoints 변수의 키 $size 에서 검색된 값이 할당된다.
    • 예를 들어 'sm' 이라는 값을 전달받으면 $breakpoints 의 키 중 sm 의 값이 할당되며 그 값은 min-width: $mobile 가 된다.
  3. $min-width 변수는 2번의 $query 변수의 min-width 키에 해당하는 값을 할당한다.
    • $min-width 에는 min-width: $mobile 의 값인 $mobile 이 할당된다.
  4. @media 쿼리를 생성한다 이때 화면 중단점의 값은 변수 $min-width를 할당한다.
  5. @content 은 믹스인 사용 시 믹스인에 전달되는 스타일을 포함시킨다.

# 2.3. 사용

  1. layout/_layout.scss를 열고 작성한다.
layout/_layout.scss
main {
	@extend %padding;
	section {
		background-color: yellow;
		@include responsive('sm') {
			background-color: pink; //568~
		}
		@include responsive('md') {
			background-color: blue; //768~
		}

		@include responsive('lg') {
			background-color: red; //768~
		}
	}
}