::before/::after/::marker로 넣은 CSS 생성 텍스트·아이콘도 접근 가능한 이름(accName) 계산에 참여한다. 의미 전달용이면 스크린리더가 뭐라고 읽을지 통제해야 하고, 장식용이면 읽히지 않도록 해야 한다.content:에 슬래시(/) 뒤에 대체 텍스트(alt) 를 적는다. 의미가 있으면 설명을, 장식이면 빈 문자열 ""을 넣어 발화/노출 제어를 한다.브라우저의 Accessible Name and Description Computation 1.2 알고리즘에는 “Name From Generated Content” 단계가 있다. 여기서 ::before/::after(또는 ::marker)의 텍스트 콘텐츠를 누적 텍스트에 포함시킨다. 그래서 아래 링크는 실제 accName이 "CSS Generated Content specification ↗"가 된다.
<a href="..." target="_blank" class="external">CSS Generated Content specification</a>
a.external::after { content: " \2197"; } /* ↗ */
문제는 스크린리더가 이 유니코드 화살표를 “North East Arrow” 같이 기본 대체문구로 읽는다는 점이다. 우리가 의도한 “새 창에서 열림” 의미와 거리가 있다. (유니코드/이모지의 기본 레이블은 리더마다/플랫폼마다 조금 다름)
content:의 슬래시(/) 대체 텍스트스펙(CSS Generated Content Level 3)은 content 뒤에 / "대체 텍스트" 를 허용한다. “시각 매체용(이미지/기호) 콘텐츠에 대해 음성 출력 등 비시각 매체 대체 텍스트를 지정”하는 용도다. 제공되면 음성 출력에서 이 텍스트를 우선 사용해야 한다.
a.external::after {
content: " \2197" / "Opens in a New Window";
}
→ accName은 “텍스트 + Opens in a New Window”가 되고, 의도가 정확히 전달된다.utm_source=chatgpt.com)
.disclosure-widget::before {
content: url("data:image/svg+xml,...") / "";
}
→ 접근성 트리에서 발화 제외 효과. 장식용 텍스트 이펙트, 아이콘 반복 등에 필수.
요점: CSS 생성물은 기본적으로 accName에 섞인다. 장식이면
/ ""로 무음화, 의미가 있으면 설명 텍스트를 넣어라.
/ "…", / <counter>를 포함한 대체 텍스트 문법이 문서화되어 있고, 2025-08 기준 문서도 이를 명시한다.::before/::after/::marker 텍스트를 포함하도록 규정.url() 이미지에 alt 미지정 → 기본적으로 접근성 트리 제외./ 문법을 지원하지 않는 옛 브라우저에서는 해당 선언이 전체 무효가 된다. 필요하면 앞에 폴백 선언을 두고, 그 다음 줄에 슬래시 문법을 배치한다. (오늘날 IE 등 레거시 지원이 아니면 대개 불필요)<img>는 alt가 대신 노출되는 경우가 많지만, CSS 이미지의 alt는 화면에 표시되지 않는다(예외: Safari iOS, 또는 macOS에서 VoiceOver ON 시 사각 플레이스홀더에 alt 표시). attr("data-alt") 같은 기법이 도움이 될 수 있으나, 자동 번역을 요구한다면 CSS 접근은 부적합.<img alt="">)./ ""로 무음화./ "설명"을 함께 넣고, 지원/발화 편차를 감안해 대체 수단(시각 라벨, HTML 보강)을 둔다.1) 외부 링크 화살표(의미 전달)
a.external::after { content: " \2197" / "Opens in a new window"; }
→ accName: 링크 텍스트 + Opens in a new window (의도 정확).
2) 토글 화살표(장식)
button.disclosure::before { content: url("chevron.svg") / ""; }
→ 장식이므로 발화 제외.
3) 텍스트 이펙트(중복 방지)
.hero::after { content: attr(data-text) / ""; } /* 시각 중복 텍스트 무음화 */
→ 시각 효과만 남기고 스크린리더 중복 낭독 제거.
4) 폴백(아주 구형 브라우저 필요 시)
a.external::after { content: " \2197"; } /* 폴백 */
a.external::after { content: " \2197" / "Opens…"; } /* 최신 */
지원하지 않는 UA는 첫 줄만 적용, 최신은 두 번째 줄이 우선.
<img alt>/텍스트로 처리.content: … / ""./ 문법 규정. W3Ccontent 문법에 대체 텍스트 문서화(2025-08 갱신). developer.mozilla.org::before/::after/::marker의 텍스트 포함 규정. W3C/ "", 의미는 / "설명". W3C+1원문 - CSS to speech: alternative text for CSS-generated content