CSS

[CSS] 간단한 네비게이션바 만들기 (4) 가상 요소 이용하기

출근침대 2020. 8. 13. 18:32
    <body>
        <ul>
            <li>
                <strong>A</strong>
                <figure>
                    <img src="rabbit.jpg " alt="a에 대한 사진">
                    <figcaption>A는 첫 번째 알파벳</figcation>
                </figure>
            </li>
            <li>
                <strong>B</strong>
                <figure>
                    <img src="rabbit.jpg " alt="b에 대한 사진">
                    <figcaption>B는 두 번째 알파벳</figcation>
                </figure>
            </li>
            <li>
                <strong>C</strong>
                <figure>
                    <img src="rabbit.jpg " alt="c에 대한 사진">
                    <figcaption>C는 세 번째 알파벳</figcation>
                </figure>
            </li>
        </ul>
    </body>

 

@charset="utf-8";
/*tag reset*/
body, ul, li, figure {padding:0; margin:0;}
ul {list-style: none;}

ul {width: 260px; margin: 30px auto; padding: 20px; border: 2px solid black;}
ul li {margin-top: 20px; background:ORANGE;}
ul li:first-child {margin-top: 0px;}

ul li strong, ul li figure figcaption {float: left; width: 140px;}
ul li strong {text-indent: 10px; font-size: 1.3em; background: greenyellow;}
ul li figure img {float: right; padding: 4px; border: 1px solid black;}
ul li figure figcaption {background: green; color: white;}
ul li:after {content: ""; clear: both; display: block;}

 

- 처음에 figure 하위 요소에 float를 각각 주게 되면 자식 요소를 잃은 부모요소가

제대로 자신의 높이를 인식하지 못해 주황색 영역이 제대로 요소를 감싸지 못하고 짧아지게 된다.

 

- 이러한 문제를 해결 하기 위해서

부모 안에 눈에 보이지 않는 가상 요소를 생성하여 clear:both를 하면 된다. 

 

여기서 알아둬야 할 몇가지 포인트들을 살펴보자. 

 

 

 

1. inline요소를 float으로 만들면 크기를 인식할 수 있다.

따라서 원래라면 인라인 요소라 크기 조절을 할 수 없었던 strong태그에 width값을 설정할 수 있었다.

float은 content의 크기만큼 작아져서 설정한 방향으로 들어가는 것이기 때문에

block의 속성을 획득하는 것이다.

 

 

 

2. 가상 요소 만들기

주의할 점은 가상 요소는 content속성을 필수로 한다.

그러나 속성값을 적게 된다면 그 내용이 바깥에 보이게 되므로

인용부호만 남겨두고 그 안은 비워둬야 한다.

 

ul li:after {content: ""; clear: both; display: block;}

 

그리고 이러한 가상요소는 display가 따로 정해지지 않았기 때문에

display block으로 설정해준다.

: clear: both는 그 요소가 block일 때 제대로 적용되기 때문이다.

 

- :before

부모의 첫번째 자식 생성

- :after

부모의 마지막 자식 생성

 

 

*가상 요소에 들어가는 클론 

css3.0은 ie9이상부터 적용된다.

따라서 ie8브라우저까지는 더블클론을 인식하지 못한다.

: 따라서 선생님은 싱글클론을 웹에,

더블클론은 모바일에 적용하는 경우가 많다고 하심.

 

 

 

3. 텍스트는 한줄에 쓰여지고자 하는 성질이 있다.

따라서 strong과 figcaption에 width값을 줬듯이

부모요소에 따로 너비를 지정해주지 않으면

원하는 폭 이상으로 너비가 넘어가게 되어 레이아웃이 틀어지게 된다.

처음에 텍스트를 품고 있는 부모 요소의 가로폭을 원하는만큼 정확히 정해주는 것이 좋다.

 

 

 

 

 

그 밖에 알게된 이론들은 다음과 같다.

 

- 이미지는 inline요소지만 규격이 있기 때문에

크기를 잘 인식할 수 있는 요소이다.

그래서 padding, margin등을 적용할 수 있다.

 

 

- text-indent: 문자를 들여쓰는 것, 내어쓰려면 음수값을 쓴다.

block요소 안에서(ex). strong에 float속성적용되어 block특징갖게 된 상황), 

왼쪽 정렬일 경우에만 쓸 수 있다.

br태그를 만나면 그 뒤의 문자는 들여쓰기가 되지 않는다.

 

 

- line-height: 텍스트 위아래 여백을 포함한 간격이다. (드래그할 때 생기는 파란 영역)

배수, 퍼센트, 정확한 크기를 지정해줄 수 있다.

배수로 정해줄 때는 뒤에 단위를 붙이지 않는다.

0또한 마찬가지다.

 

 

-동일한 태그에 중복되는 스타일을 적용하면 우선순위에 따라 적용이 된다.

개발자 도구에서 우선순위에서 밀린 속성은 취소선이 그어지고 적용되지 않는다.

그렇다면 우선순위(특별성)는 어떻게 계산할까?

 

+#아이디의 갯수 * 100

 

+.클래스, 가상 클래스의 갯수 * 10 

 

+일반태그, 가상 요소, 가상 자식요소 (::before, ::after)의 갯수 * 1 

 

를 계산하여 더 큰 숫자가 나오는 선택자가 더 우선적으로 적용된다.

특별성이 똑같은 태그가 있다면

늦게 서술한 것이 더 우선으로 적용된다.

 

 

*우선순위를 높이는 방법

- 부모요소를 앞에 써준다.

- !important를 사용한다. (남발하면 안됨)

 

 

- ;의 의미

: ~에 해당하는 내용은 끝났다.

따라서 속성값 닫기 전에 !important를 쓰고 ;로 닫아준다.

 

 

 

 

출처

더보기

- 2020 국비교육과정 공부내용

'CSS' 카테고리의 다른 글

[CSS] CSS방법론 - BEM (Block Element Modifier)  (0) 2023.12.25
[CSS] overflow  (0) 2020.08.15
[CSS] 글꼴  (0) 2020.08.12
[CSS] 간단한 네비게이션바 만들기 (3) display: inline-block이용하기  (0) 2020.08.12
[CSS] BOX모델  (0) 2020.08.12