[Box_exercise.html]
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta title="Box-exercise">
<link type="text/css" rel="stylesheet" href="./Box_exercise.css">
</head>
<body>
<span class="box" id="box-1"></span>
<div class="box" id="box-2"></div>
</body>
</html>
[Box_exercise.css]
.box{
width : 100px;
height : 80px;
background-color: beige;
border : 5px solid black;
border-radius: 30px;
padding : 5px;
margin : 10px;
}
위와 같이 .html과 .css를 작성한 결과이다.
왜 이런 상황이 발생하는걸까?
[Inline-level과 Block-level의 특징 비교]
- Inline-level 요소는 다른 요소와 같은 줄을 공유하고, content의 너비만큼만 가로 폭을 차지한다.
- Inline-level 요소에는 width, height, margin-top, margin-bottom, padding 등의 속성을 적용할 수 없으며, 그 내부에 inline- level 요소를 포함할 수 없다.
- display 속성값이 inline인 요소는 inline-level 요소의 성질을 가지며, span, a, strong, img, br, input, select, textarea, button 등의 태그는 기본적으로 inline-level 요소이다.
- Block-level 요소는 다른 요소와 같은 줄을 공유하지 않으며, 화면의 가로 폭을 모두 차지하며 여러 block-level 요소들을 배치하면 수직 방향으로 배치된다.
- Block-level 요소에는 width, height, margin, padding 등의 속성을 적용할 수 있으며, 그 내부에 inline-level 요소를 포함할 수 있다.
- display 속성값을 block인 요소는 block-level 요소의 성질을 갖게 되며, div, h1~h6, p, ol, ul, li, hr, table, form 등의 태그는 기본적으로 block-level 요소이다.
위의 특성을 통해 알아보았을 때, <span>의 경우 기본적으로 inline-level 요소이므로
따라서 css로 해당 속성을 적용했다 한들, inline-level 요소이기에 disable되는 현상이 발생한 것이다.
반면, <div>의 경우 block-level 요소이므로 css로 적용한 스타일들이 정상적으로 적용될 수 있었다.
위와 같이 코드를 수정한 후 결과를 확인해보면 아래와 같이 정상적으로 css가 적용됨을 확인할 수 있다!
inline-level에는 width, height, margin-top, margin-bottom, padding 등의 요소를 지정할 수 없다.
display : inline-block;
: width, height 을 css가 아닌 html에서 적용시켜도 이러한 현상이 발생할까?
A. 하나의 요소는 여러 선택자에 의해 선택될 수 있으며, 이러한 선택자들에 의해 속성값의 충돌(conflict)이 일어날 수 있다.
이때 실제로 적용되는 속성값은 아래의 우선순위 규칙에 따라 우선순위가 가장 높은 선택자에 의해 적용되는 속성값이 적용된다.
1. 속성값의 뒤에 !important가 붙은 속성
2. HTML에서 style 속성을 사용하여 정의한 속성
3. ID > 클래스나 추상클래스의 이름> 태그 이름 선택자의 속성
4. 상위 요소에 의해 상속된 속성
우선순위가 같은 경우, 부모-자식의 관계가 많을수록 우선순위가 높고, 그 다음으로는 나중에 작성된 속성이 적용된다.