미디어 쿼리(Media Query): 미디어 쿼리는 CSS3에 소개된 기능으로, 브라우저의 뷰포트 너비와 같은 조건에 따라 스타일을 적용할 수 있게 해주는 기능입니다. 따라서 브라우저 창의 크기에 따라 다른 스타일을 적용하거나, 특정 뷰포트 크기에서만 특정 CSS를 적용하는 등의 작업이 가능합니다. 예를 들어, 미디어 쿼리를 사용해서 브라우저 창의 너비가 600px 미만일 때는 배경색을 빨간색으로, 600px 이상일 때는 파란색으로 변경하는 CSS를 작성할 수 있습니다.
컨테이너 쿼리(Container Query): 컨테이너 쿼리는 아직 웹 표준으로 채택되지 않은 기능이지만, 미디어 쿼리가 뷰포트를 기준으로 스타일을 적용하는 반면, 컨테이너 쿼리는 특정 요소의 너비를 기준으로 스타일을 적용합니다. 따라서 부모 요소의 크기에 따라 자식 요소의 스타일을 변경하는 등의 작업이 가능합니다.
<p>ℹ️ Your browser does not support Container Queries <em>(or only supports an older syntax)</em>. To plug this hole, <ahref="https://www.npmjs.com/package/container-query-polyfill"target="_top">a polyfill</a> has been loaded.</p>
</div>
<divclass="animalcards">
<divclass="animalcard-wrapper">
<divclass="animalcard">
<divclass="animalcard__image">
<imgsrc="https://source.unsplash.com/PX_1j-M59I8"alt="Photo of a polar bear walking"width="1080"height="720" />
<ahref="https://unsplash.com/photos/PX_1j-M59I8"target="_blank">Polar bear walking</a> by <ahref="https://unsplash.com/@dtbosse"target="_blank">Daniel Bosse</a>
</div>
<divclass="animalcard__description">
<p>The polar bear <em>(Ursus maritimus)</em> is a hypercarnivorous bear whose native range lies largely within the Arctic Circle, encompassing the Arctic Ocean, its surrounding seas and surrounding land masses. It is the largest extant bear species, as well as the largest extant land carnivore.</p>
</div>
</div>
</div>
<divclass="animalcard-wrapper">
<divclass="animalcard">
<divclass="animalcard__image">
<imgsrc="https://source.unsplash.com/PX_1j-M59I8"alt="Photo of a polar bear walking"width="1080"height="720" />
<ahref="https://unsplash.com/photos/PX_1j-M59I8"target="_blank">Polar bear walking</a> by <ahref="https://unsplash.com/@dtbosse"target="_blank">Daniel Bosse</a>
</div>
<divclass="animalcard__description">
<p>The polar bear <em>(Ursus maritimus)</em> is a hypercarnivorous bear whose native range lies largely within the Arctic Circle, encompassing the Arctic Ocean, its surrounding seas and surrounding land masses. It is the largest extant bear species, as well as the largest extant land carnivore.</p>
</div>
</div>
</div>
<divclass="animalcard-wrapper">
<divclass="animalcard">
<divclass="animalcard__image">
<imgsrc="https://source.unsplash.com/PX_1j-M59I8"alt="Photo of a polar bear walking"width="1080"height="720" />
<ahref="https://unsplash.com/photos/PX_1j-M59I8">Polar bear walking</a> by <ahref="https://unsplash.com/@dtbosse">Daniel Bosse</a>
</div>
<divclass="animalcard__description">
<p>The polar bear <em>(Ursus maritimus)</em> is a hypercarnivorous bear whose native range lies largely within the Arctic Circle, encompassing the Arctic Ocean, its surrounding seas and surrounding land masses. It is the largest extant bear species, as well as the largest extant land carnivore.</p>
</div>
</div>
</div>
</div>
<p>Nam pulvinar congue condimentum. Pellentesque fringilla ante sed massa tincidunt feugiat. Nulla bibendum est eros, non malesuada dolor vehicula in. Morbi eu cursus arcu. Phasellus ultricies ornare lorem, non interdum orci condimentum eu. Donec condimentum condimentum ligula ut placerat. Vestibulum id neque condimentum, molestie nunc vel, suscipit turpis. Quisque orci velit, mattis et nibh non, tempor finibus erat. Nullam tristique, tortor non commodo cursus, magna turpis rhoncus leo, quis porta quam ante sed orci. Nunc vehicula imperdiet leo in vulputate. Quisque quis dolor orci.</p>
<p>Curabitur ultrices fringilla libero sit amet porta. Nulla rhoncus venenatis euismod. Praesent non interdum sem. Nunc in nibh tincidunt, faucibus sem at, finibus turpis. Nullam vel odio blandit, tincidunt urna et, luctus lectus. Vivamus porta sem vitae turpis interdum porta eu id ligula. Fusce non nisi fringilla, malesuada metus ut, imperdiet ligula. Nunc quis lorem nibh. Duis pharetra magna vestibulum metus convallis, id mollis ligula vulputate. Sed purus est, consectetur non suscipit sit amet, hendrerit at dolor. Maecenas feugiat, quam vel ullamcorper feugiat, sapien ipsum viverra justo, id cursus metus nisi quis enim.</p>
<h2>Aenean ac pellentesque ante</h2>
<divclass="animalcard-wrapper">
<divclass="animalcard">
<divclass="animalcard__image">
<imgsrc="https://source.unsplash.com/PX_1j-M59I8"alt="Photo of a polar bear walking"width="1080"height="720" />
<ahref="https://unsplash.com/photos/PX_1j-M59I8"target="_blank">Polar bear walking</a> by <ahref="https://unsplash.com/@dtbosse"target="_blank">Daniel Bosse</a>
</div>
<divclass="animalcard__description">
<p>The polar bear <em>(Ursus maritimus)</em> is a hypercarnivorous bear whose native range lies largely within the Arctic Circle, encompassing the Arctic Ocean, its surrounding seas and surrounding land masses. It is the largest extant bear species, as well as the largest extant land carnivore.</p>
</div>
</div>
</div>
<p>Nam pulvinar congue condimentum. Pellentesque fringilla ante sed massa tincidunt feugiat. Nulla bibendum est eros, non malesuada dolor vehicula in. Morbi eu cursus arcu. Phasellus ultricies ornare lorem, non interdum orci condimentum eu. Donec condimentum condimentum ligula ut placerat. Vestibulum id neque condimentum, molestie nunc vel, suscipit turpis. Quisque orci velit, mattis et nibh non, tempor finibus erat. Nullam tristique, tortor non commodo cursus, magna turpis rhoncus leo, quis porta quam ante sed orci. Nunc vehicula imperdiet leo in vulputate. Quisque quis dolor orci.</p>
<divclass="inset">
<divclass="animalcard-wrapper">
<divclass="animalcard">
<divclass="animalcard__image">
<imgsrc="https://source.unsplash.com/PX_1j-M59I8"alt="Photo of a polar bear walking"width="1080"height="720" />
<ahref="https://unsplash.com/photos/PX_1j-M59I8"target="_blank">Polar bear walking</a> by <ahref="https://unsplash.com/@dtbosse"target="_blank">Daniel Bosse</a>
</div>
<divclass="animalcard__description">
<p>The polar bear <em>(Ursus maritimus)</em> is a hypercarnivorous bear whose native range lies largely within the Arctic Circle, encompassing the Arctic Ocean, its surrounding seas and surrounding land masses. It is the largest extant bear species, as well as the largest extant land carnivore.</p>
</div>
</div>
</div>
</div>
<p>Curabitur ultrices fringilla libero sit amet porta. Nulla rhoncus venenatis euismod. Praesent non interdum sem. Nunc in nibh tincidunt, faucibus sem at, finibus turpis. Nullam vel odio blandit, tincidunt urna et, luctus lectus. Vivamus porta sem vitae turpis interdum porta eu id ligula. Fusce non nisi fringilla, malesuada metus ut, imperdiet ligula. Nunc quis lorem nibh. Duis pharetra magna vestibulum metus convallis, id mollis ligula vulputate. Sed purus est, consectetur non suscipit sit amet, hendrerit at dolor. Maecenas feugiat, quam vel ullamcorper feugiat, sapien ipsum viverra justo, id cursus metus nisi quis enim.</p>
<p>Duis nec nisi a eros dictum euismod nec non enim. Donec augue neque, aliquam id finibus a, volutpat ut ligula. Nam feugiat odio elit, ut molestie mi tempus vel. Etiam vitae velit eget massa scelerisque hendrerit cursus vel justo. Sed eget euismod lectus. Morbi tincidunt diam ac diam tempor molestie. Mauris eget lectus leo. Etiam id porta turpis.</p>
</main>
.animalcard {
align-content: start;
border: 1pxsolid#ccc;
background: rgba(0, 0, 0, 0.05);
}
.animalcard__image {
grid-area: image;
font-size: 0.5em;
font-style: italic;
text-align: center;
}
.animalcard__description {
grid-area: description;
font-size: 0.9em;
text-align: center;
}
.animalcard>*>:first-child {
margin-top: 0;
}
.animalcard>*>:last-child {
margin-bottom: 0;
}
/** Container Queries in Action: If enough space is available, place image next to description **/
.animalcard-wrapper {
container-type: inline-size;
}
.animalcard {
/* SMALL LAYOUT: Image stacked on top of Description */
display: grid;
grid-template: 'image''description' / 1fr;
gap: 1em;
padding: 1em;
}
@container (min-width: 480px) {
/* MEDIUM LAYOUT: Image next to Description (1fr each) */
.animalcard {
gap: 2em;
padding: 2em;
grid-template: 'image description' / 1fr1fr;
}
.animalcard__description {
text-align: left;
}
}
@container (min-width: 1120px) {
/* LARGE LAYOUT: Large Image next to Description */
.animalcard {
grid-template-columns: 2fr1fr;
}
}
/* Set of animalcards: Place nested elements next to eachother */