⇒ 모든 Selector 내 Property가 적용된다.
.author{
font-style: italic;
font-size: 18px;
}
#author-text{
font-size: 20px;
}
p,li{
font-family: sans-serif;
color: #444444;
font-size: 22px;
}
⇒같은 우선 순위의 selector들로만 구성될 때 같은 property에 대해서는 마지막에 있는 selector가 적용된다.
⇒ id나 class 이름이 똑같아도 상관 없다.
<footer id="copyright" class="copyright text">
<p id="copyright">Copyright © 2027 by The Code Magazine.</p>
</footer>
#copyright{color: red;}
.copyright{color: blue;}
.text{color: yellow;}
footer p{color: green;}
⇒ id selector의 우선순위가 가장 높으므로 빨간색으로 표시된다.
⇒ VSC에서 selector에 마우스를 hover하면 selector specificty를 볼 수 있다.
⇒ 개발자 도구에서 #copyright 의 color를 체크 해제하면
그 다음 우선순위인 yellow가 된다.
.text의 color를 해제하면 blue가,
.copyright의 color를 해제하면 green이 된다.
#copyright{color: red;}
.copyright{color: blue;}
.text{color: yellow;}
footer p{color: green !important;}
⇒ important keyword !가 다른 모든 selector보다 더 높은 우선순위로 만들어주기 때문에 초록색으로 표시된다.
⇒ 이는 보통 사용하지 않는 키워드이다.
💡 CSS 작성 팁Selector를 최대한 간단하게 작성한다.
하나의 Element에 너무 많은 중첩이나 id, class를 추가하지 않는다.
important keyword같은 해킹을 일반적으로는 사용하지 않는다.
상속이란 부모 요소에게서 값을 물려받는 속성이다.
body
는 보통 모든 요소들의 부모 요소이므로 이를 활용할 수 있다.
자식 요소에서의 속성은 부모 요소에서의 같은 속성보다 우세하기(override) 때문에 자식 요소의 속성이 나타난다. 상속된 속성의 우선순위가 가장 낮다고 할 수도 있다.
그러나 body
요소의 모든 속성이 자식 요소에 상속되는 것은 아니다.
일반적으로 CSS 속성은 부모 요소에서 자식 요소로 상속되지만, 몇 가지 속성은 상속되지 않거나, 상속되지만 일부 제한이 있을 수 있다. 이는 속성의 특성에 따라 다르다.
CSS에서는 명시적으로 inherit
값을 사용하여 특정 속성을 상속하도록 지정할 수 있다. 그러나 기본적으로 대부분의 속성은 상속되지 않거나 명시적으로 상속을 설정하지 않는 한 상속되지 않는다.
예를 들어, 보통 text와 관련된 color
, font-size
, font-family
와 같은 일부 속성은 일반적으로 상속된다. 이 경우, body
요소에 적용된 속성이 자식 요소에 상속되어 자식 요소에서도 동일한 스타일이 적용될 수 있다.
하지만 width
, height
, margin
, padding
과 같은 박스 모델 속성은 일반적으로 상속되지 않는다. 이러한 속성은 각 요소에 개별적으로 적용되며, 부모 요소의 속성과는 독립적으로 계산된다.
따라서 모든 CSS 속성이 자동으로 body
요소의 자식 요소에 상속되지는 않는다. 각 속성은 상속 여부를 속성 자체의 특성과 명시적인 상속 설정에 따라 결정된다.
*{
border-top: 10px solid #1098ad;
}
박스 모델은 웹페이지의 요소들이 어떻게 표시될지 정한다. width와 height를 가진다. 박스 모델의 (background-color 들을 적용하는 부분이면 padding)
→ background-color 등을 적용하고 싶으면 padding, 요소 간의 간격을 주고 싶으면 margin을 사용하면 된다.
padding: 20px; /* 네 면에 20px의 패딩 */
/* shorthand */
padding: 10px 40px; /* 상하 좌우 */
padding: 10px 40px 20px 30px; /* 상 우 하 좌 (시계방향) */
list에 margin을 넣을 때 보통 마지막 항목에는 공간이 없어야 한다. list item들 간 공간은 원하지만 item의 끝에 공간을 넣는 건 원치 않기 때문이다. 이 때 아래와 같이 할 수 있다.
li{
font-size: 20px;
margin-bottom: 10px;
}
li:last-child{
margin-bottom: 0; /* 0은 unit을 입력하지 않아도 된다. */
}
element에 margin과 padding을 스타일링 하기 전에 글로벌 초기화를 해주어야 한다.
새 프로젝트를 할 때마다 해주어야 할 과정이다.
*{
margin: 0;
padding: 0;
}
global reset을 해주면 ul이나 ol에 대해서 왼쪽 공간이 사라져서 bullet-point나 숫자가 보이지 않는다. 이 때 padding-left나 margin-left를 주면 된다.
💡 수직적인 공간을 주고 싶을 때 margin-top이나 margin-bottom 둘 중 하나만 사용하는 것이 추천된다. 둘을 섞어 사용하는 것은 비추천. (개인적인 선호로 margin-bottom을 사용하는 것을 추천함)같은 공간을 차지하는 margin이 2개일 때 둘 중 하나만 페이지에 보인다. 보통 둘 중 더 큰 쪽이 보인다.
p와 h3이 위아래에 위치하고 있다.
❗ p에 margin-bottom을 15px로 주고, h3에 margin-top을 40px로 줬을 때 p와 h3 간의 간격은 55px이 아닌 40px이 된다<p>You can learn more at MDN Web Docs</p>
<h3>Why should you learn HTML?</h3>
p{
margin-bottom: 15px;
}
h3{
margin-bottom: 20px;
margin-top: 40px;
}
<header class="post-header">
<img
src="img/post-img.jpg"
alt="HTML code on a screen"
width="500"
height="200"
class="post-img"
/>
</header>
.post-img{
width: 100%;
height: auto;
}
보통 %는 부모 요소 컨테이너의 너비의 %를 말한다.
여기서 post-header의 너비가 웹페이지의 가로 길이라서 post-img의 width를 100%로 했을 때 웹페이지의 크기를 따라간다.
이는 스크린의 크기가 변하는 반응형 웹에서 중요한 개념이다.
<body>
<div class="container">
...
...
...
</div>
</body>
.container{
width: 700px;
margin-left: auto;
margin-right: auto;
}
⇒ margin 왼쪽 오른쪽 값이 똑같아지고, 이는 반응형 웹에서 중요하다.
CSS에는 다양한 유형의 박스가 있다.
대부분의 요소는 좌우 공간을 전부 차지고 있다. — block-level box, block-level element
몇몇 요소는 콘텐츠가 있는 공간만 차지한다. — inline box, inline element
display: block
, display: inline
를 이용해 박스를 바꿀 수 있다.nav a:link{
background-color: orangered;
}
nav a:link{
background-color: orangered;
margin: 20px;
}
nav a:link{
background-color: orangered;
padding: 20px;
}
padding의 경우, 상하에도 잘 적용된 것처럼 보일 수 있으나 이는 오직 element 내부에서만 그렇게 보일 뿐이다.
block 요소였다면 element끼리 수평을 있을 수 없고, 상하로 20px씩 내려갔을 것이다.
display: inline-block
외부에서는 inline box처럼 작동하지만 내부에서는 block 수준의 요소처럼 작동하는 box이다.
즉, inline box 컨텐츠를 위해 필요한 공간만을 차지하는 block box인 것이다. 그래서 줄 바꿈을 일으키지 않는다.
하지만 여전히 margin과 padding을 사용할 수 있다.
→ inline과 block의 장점만을 결합한 것.
nav a:link{
background-color: orangered;
margin: 20px;
padding: 20px;
display: inline-block;
}
위에서 List Item과 마찬가지로 여러 항목에 margin을 넣을 때 보통 마지막 항목에 공간이 없어야 한다. 여기서는 오른쪽에 margin을 준다고 했을 때, 마지막 요소에서는 오른쪽 margin을 아래와 같이 없앨 수 있다.
nav a:link{
background-color: orangered;
margin-top: 10px;
margin-right: 20px;
display: inline-block;
}
nav a:link:last-child{
margin-right: 0;
}
💡 보통의 경우 디폴트 box type을 사용하지만, 필요한 경우 우리가 임의로 block, inline, inline-block 등으로 바꿔 사용할 수 있다.