예시
/* 기본 글꼴 크기 */
html {
font-size: 16px;
}
/* 작은 화면 (모바일) */
@media (max-width: 600px) {
html {
font-size: 14px;
}
}
/* 중간 화면 (태블릿) */
@media (min-width: 601px) and (max-width: 1024px) {
html {
font-size: 15px;
}
}
/* 큰 화면 (데스크탑) */
@media (min-width: 1025px) {
html {
font-size: 16px;
}
}
장점
1. 화면 크기가 변해도 요소들이 뷰포트를 기준으로 크기를 조정하기 때문에 일관된 레이아웃을 유지할 수 있다.
2. 전체화면을 차지하는 요소를 쉽게 설정할 수 있다. (로딩 컴포넌트)
3. 고정된 픽셀이 아닌 비율을 사용하여 레이아웃을 설정할 수 있다.
** vw, vh는 스크롤바의 크기를 포함하기 때문에 이를 고려해야 한다.
디자인 레이아웃에 따라 달라진다.
개인적으로는 3개로 나눠서 작업.
<div style="width: 100px; height:100px; border:2px red solid;" />
<html>
<div id="example" />
</html>
<style lang="css">
#example{
width:100px;
height:100px;
border:2px red solid;
}
</style>
<html>
<div class="example" />
</html>
<style lang="css">
.example{
width:100px;
height:100px;
border:2px red solid;
}
</style>
[]
input[type="text"]{
color: red;
}
.example:hover{
width:200px;
transition: all 1s;
}
div{
color: red;
}
-가상 요소 선택자
.example:before{
content:'';
display: block;
width:100px;
height:100px;
background: red;
}
* {
color: #000;
}
// 후손 선택자 => ul 요소의 모든 li 적용
ul li {
color: #000;
}
// 자식 선택자 => ul요소의 첫번째 li만 적용
ul > li {
color: #fff;
}
<html>
<div /> // color: #fff 적용됨
<p>a</p> // color: #fff 적용됨
<p>b</p> // color: #bcbcbc 적용됨
<p>c</p> // color: #bcbcbc 적용됨
</html>
<style>
// 인접 형제 선택자 => div, div 요소 이후 첫 p 태그만 적용
div + p {
color: #fff;
}
// 형제 선택자 => div, div 요소 이후 모든 p 태그만 적용
div ~ p {
color: #bcbcbc;
}
</style>
!important
모든 우선순위 규칙을 무시하고 최우선으로 적용된다.
$primary-color: #3498db;
body{
color: #primary-color;
}
2.중첩
<html>
<div>
<ul>
<li></li>
<li></li>
</ul>
</div>
</html>
<style lang="scss">
div {
ul {
li {
color: red;
}
}
}
</style>
_
를 붙여 파일로 만든다.// _variables.scss
$primary-color: #3498db;
// main.scss
@import 'variables';
body {
color: $primary-color;
}
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
}
.box {
@include border-radius(10px);
}
.button {
padding: 10px 20px;
border: none;
background-color: #3498db;
}
.primary-button {
@extend .button;
color: white;
}
.container {
width: 100% - 20px;
}
.box {
width: (100% / 3) - 10px;
}
브라우저 렌더링 프로세스
1. HTML 파싱 : 브라우저는 HTML문서를 파싱하며 DOM(Document Object Model)트리 생성
2. CSS 파싱: CSS파일 로드하고 파싱하며 CSSOM (CSS Object Model)트리 생성
3. Dom + CSSOM 합성: DOM과 CSSOM을 결합하여 렌더 트리 생성
4. 페인트: 요소들을 화면에 그린다.
Javascript 렌더링
1. HTML파싱 중 스크립트 태그 발견
Javascript가 DOM을 조작할 수 있기 때문에 브라우저가 Javascript 실행 후 DOM의 최신 상태를 유지하기 위함.