가상 요소 - by. UXKM
요약 설명의사(가상) 요소(pseudo-elements)는 HTML 요소에는 없는 가상의 요소를 CSS로 제어합니다.
CSS1과 CSS2에서는 의사 클래스와 의사 요소를 나타낼 때 하나의 콜론(:)으로 함께 표기하였습니다.
하지만 CSS3에서는 의사 클래스의 표현과 의사 요소의 표현을 구분하기로 합니다.
따라서 CSS3에서는 의사 클래스는 하나의 콜론(:)을, 의사 요소에는 두 개의 콜론(::)을 사용하고 있습니다.
선택자에 오직 가상 요소 하나만 쓸 수 있습니다.CSS3는 의사 클래스 와 의사 요소를 구별하기 위해 두 개의 콜론(::)이 있는 표기법을 도입했습니다.
콜론(::) 두 개의 인식 못하는 하위브라우저를 위해 콜론(:)하나를 사용해도 현재는 가능합니다.
의사(가상) 클래스(pseudo-class)는 콜론(:) 하나 사용
의사(가상) 요소(pseudo-elements)는 콜론(::) 두 개 사용
대표적인 의사요소로는 다음과 같은 요소들이 있습니다.
::first-letter (:first-letter)
::first-line (:first-line)
::before (:before)
::after (:after)
::selection
브라우저별 콜론(:) 하나, 콜론(::) 두 개 사용여부
- Internet Explorer 8.0 = :pseudo-element
- Internet Explorer 9.0 = :pseudo-element, ::pseudo-element
- Firefox (Gecko) 1.0 (1.0) = :pseudo-element
- Firefox (Gecko) 1.0 (1.5) = :pseudo-element, ::pseudo-element
- Opera 4.0 = :pseudo-element
- Opera 7.0 = :pseudo-element, ::pseudo-element
- Safari (WebKit) 1.0 (85) = :pseudo-element, ::pseudo-element
::first-line (:first-line)
CSS level 1
이 의사 요소는 텍스트의 첫 라인만을 선택합니다.
단, 블록(block) 타입의 요소에만 사용할 수 있습니다.
이 의사 요소를 통해 사용할 수 있는 속성은 다음과 같습니다.
-
모든 글꼴 관련 속성
font, font-kerning, font-style, font-variant, font-variant-numeric, font-variant-position, font-variant-east-asian, font-variant-caps, font-variant-alternates, font-variant-ligatures, font-synthesis, font-feature-settings, font-language-override, font-weight, font-size, font-size-adjust, font-stretch, font-family
-
모든 배경 관련 속성
background-color, background-clip, background-image, background-origin, background-position, background-repeat, background-size, background-attachment, background-blend-mode
- color 속성
-
text 관련 속성
bword-spacing, bletter-spacing, btext-decoration, btext-transform, bline-height, btext-shadow, btext-decoration, btext-decoration-color, btext-decoration-line, btext-decoration-style, bvertical-align
::first-line (:first-line) 예제
::before (:before) / ::after (:after)
CSS level 2
::before (:before)
의사 요소는 특정 요소의 내용(content) 부분 바로 앞에 다른 요소를 삽입할 때 사용합니다.
::after (:after)
의사 요소는 특정 요소의 내용(content) 부분 바로 뒤에 다른 요소를 삽입할 때 사용합니다.
특수 문자 사용 시 이 요소는 HTML이 아닌 CSS로 요소를 사용하는거라 콘텐츠 값에 마크 업 엔티티를 사용할 수 없습니다.
특수 문자를 사용해야하고 문자 그대로 CSS 콘텐츠 문자열에 입력 할 수 없는 경우,
백 슬래시(\)와 16 진 유니 코드 값으로 구성되는 유니 코드 이스케이프 시퀀스를 사용해야 합니다.(백 슬래시+코드)
::before
와 ::after
요소는 content
속성을 사용해야만 콘텐츠를 삽입할 수 있습니다.
content
속성은 의사 요소의 내용을 정의합니다. 또한 의사 요소는 content
속성이 설정되어 있지 않으면 표시되지 않습니다.
content
속성은 기본적으로 인라인 요소로 표현되지만 display: block
을 선언하여 일반적인 블록 요소로 사용할 수 있습니다.
content 속성 사용 방법은 다음과 같이 사용할 수 있습니다.
-
normal
기본값으로 아무것도 표시하지 않습니다. (none과 같습니다)
::before{content:normal}
/::after{content:normal}
-
none
none 내용에 아무것도 표시하지 않습니다.
::before{content:""}
/::before{content:""}
-
문자(String)
텍스트 내용. 일반 텍스트와 유니 코드 문자를 삽입 할 수 있습니다.
쌍따옴표("")또는 홀따옴표('') 안에 삽입해야 합니다.
-
url(주소)
외부 자원(이미지, 음악, 비디오 등)을 생성 합니다.
-
counter
counter는 HTML문서에 쓰지 않고도, CSS로 숫자를 생성하면서 자동으로 번호를 매기는 역할을 합니다.
counter-increment, counter-reset 속성과 함께 사용합니다.
counter-increment , counter-reset 속성과 사용 방법은 CSS 카운터 에서 자세히 설명합니다.
CSS counter를 사용하려면 먼저 counter-reset 속성(초깃값 0)을 사용하여 초기화 해야합니다.
동일한 속성으로 값을 특정 값으로 바꿀 수도 있습니다.
초기화 된 counter의 값은 counter-increment에 따라 증가하거나 감소합니다.
counter의 이름으로 "none", "inherit", "initial"은 사용불가합니다. 이런 이름을 사용하면 선언은 무시됩니다.counter와 counters가 있으며 문법은 다음과 같음 counters는 숫자를 좀더 세부적으로 지정합니다.(예. 1.1)
-
5.1. counter(name, style)
name만 쓸 경우 기본값 decimal(십진수) 적용함.
style은 선택적임, style은 list-style-type과 동일한 값임, 즉 아래 중에서 선택
list-style-type 속성
(disc, circle, square, decimal, decimal-leading-zero, lower-roman, upper-roman, lower-greek, lower-latin, upper-latin, armenian, georgian, lower-alpha, upper-alpha, or none
)사용 예)
h1::before{content:counter(name, upper-roman);}
-
5.2. counters(name, string, style)
name, string 값은 필수 (기본값 decimal)
string은 마침표(.)처럼 앞 뒤를 분리하기 위한 용도로 사용
style은 선택적임
사용 예)
h1::before {content: counters(name, ".", upper-roman);}
-
5.1. counter(name, style)
-
attr(속성값)
선택자의 속성을 생성합니다.
-
open-quote
여는 인용부호를 생성합니다.
-
close-quote
닫는 인용부호를 생성합니다.
-
no-open-quote
여는 인용부호를 없앱니다. (open-quote를 취소하기 위해 사용 됩니다.)
-
no-close-quote
닫는 인용부호를 생성합니다.
-
initial
기본값으로 설정합니다.
-
inherit
부모 요소 속성값을 상속합니다.
::before (:before) / ::after (:after) 예제
::selection
요약 설명::selection CSS 선택기 레벨 3의 초안에 있지만 후보 권장 사항 단계에서 (특히 중첩 된 요소로) 지정되지 않았으며, 상호 운용성이 달성되지 않았기 때문에 (W3C 스타일 메일 링리스트의 토론을 기반으로) 후보 추천 단계에서 제거되었습니다.
Pseudo-Elements Level 4 로 반환되었습니다.
CSS level 3
이 의사 요소는 해당 요소에서 사용자가 선택한 부분만을 선택할 때 사용합니다.
마우스 드래그 등으로 선택한 텍스트 선택합니다.
::selection
요소는 항상 이중 콜론 (::)으로 시작합니다.
파이어폭스 브라우저에서는 ::-moz-selection 와 같이 접두사를 붙여 사용합니다.
::selection은 다음과 같은 특정 CSS 속성 만 사용할 수 있습니다.
::before (:before) / ::after (:after) 예제
::placeholder
CSS level 3
::placeholder
선택자는 항상 이중 콜론 (::)으로 시작합니다.
HTML5에서 새로 나온 속성(attribute)으로 input
요소나 textarea
요소에 안내문(알맞은 힌트를 제공)을 넣을 수 있습니다.
CSS에서 placeholder 속성 사용은 ::placeholder
선택자로 선택하여 꾸밀 수 있습니다.
다만, 브라우저별로 해당 요소에 포커스가 될때 작동하는 방식에서 차이점이 발생합니다.
브라우저 호환성을 위해 사용하는 방법에는 다음과 같이 사용할 수 있습니다.
-
지원 못 하는 브라우저들이 있어서 접두사를 붙여서 같이 사용합니다.
-
파이어폭스의 경우 같은 색을 입력하면 투명도가 증가하여 색이 흐리게 나옵니다.
파이어폭스는 CSS 투명도를 조절하는 속성인 opacity 값을 조절하면 됩니다. -
마이크로소프트 Edge는 placeholer 색 변경이 적용 안됩니다.
선택자 지정시 -ms-input이라는 명령어를 추가해주면 됩니다. -
익스플로러는 엣지에 삽입한 선택자로는 placeholder 색 변경이 되지 않습니다.
명령어는 똑같지만 앞에 콜론 : 개수를 1개로 변경해줍니다.