<span> 대신 아이콘에 <i> 태그를 사용해야합니까? [닫은]


572

Facebook의 출처를 살펴본 결과 <i>태그를 사용하여 아이콘을 표시합니다.

또한 오늘 저는 트위터의 부트 스트랩을 조사했습니다. 또한 <i>태그를 사용 하여 아이콘을 표시합니다.

그러나,

로부터 HTML5 사양 :

I 요소는 대체 음성 또는 분위기로 텍스트 범위를 나타내거나 분류 학적 명칭, 기술 용어, 다른 언어의 관용구, 생각, 선박 이름 또는 기타와 같은 일반적인 문장과 상쇄됩니다. 전형적인 활자체 표현이 이탤릭체 인 산문.

<i>태그를 사용하여 아이콘을 표시 하는 이유는 무엇 입니까?

나쁜 습관이 아닙니까?

아니면 여기에 뭔가 빠졌습니까?

span아이콘을 표시 하는 데 사용 하고 있으며 지금까지는 효과가있는 것 같습니다.

최신 정보:

부트 스트랩 3은 이제 span아이콘을 사용 합니다. 공식 문서


5
예 : 아래의 답장 화살표는 트위터에서 트윗합니다 : <i class="sm-reply"></i>.
kay-SE는 사악하다

2
왜 사용해서는 안 <span>됩니까?
Jashwant

6
의미와 접근성을 위해 img 태그는 항상 대체 텍스트가있는 아이콘에 사용해야합니다.
17시 23 분

12
@nroose 이것에 대한 나의 취지는 아이콘에 사용 된 이미지가 컨텐츠의 일부가 아니라 페이지 스타일 (예를 들어, 소에 대한 wikipedia 페이지의 소 그림)과는 다르다는 것입니다. 따라서 이미지는 img 태그의 이미지가 아닌 CSS로 정의해야합니다.
CJStuart

6
HTML5의 의미 론적 결정이 "의견 기반"이라고 생각하지는 않습니다.
Aaron

답변:


597

<i>태그를 사용하여 아이콘을 표시 하는 이유는 무엇 입니까?

이 때문에:

  • 짧은
  • 나는 아이콘을 의미합니다 (HTML은 아니지만)

나쁜 습관이 아닙니까?

끔찍한 연습. 시맨틱보다 성능의 승리입니다.


87
트위터의 부트 스트랩을 배우는 첫날이며 그들이 모범 사례를 따르지 않는 것이 기분이 좋지 않습니다.
Jashwant

25
어떤 사람들은 더 나아가서 <tt>= 툴팁과 같은 다른 요소를 잘못 사용 하기도합니다. "HTML 요소의 의미 론적 오용에 대하여"
Christoph

18
이 웹 사이트는 매일 수백만 페이지를 봅니다. 클라이언트가이 방법으로 페이지를 요청할 때마다 100 바이트의 데이터를 저장하면 상당한 양의 대역폭이 절약됩니다.
Dalmas

62
100 바이트를 저장하려면 16 개의 아이콘을 포함하고 압축을 활성화하지 않아야합니다 .
Quentin

7
의 사용과 합자 사용하여 i아이콘을 표시하는 태그를 의미합니다. 실제로 소재 아이콘 안내서에i 합자가 포함 된 태그를 사용하는 것이 좋습니다 .
Aust

269

나는 조금 늦게 여기에 뛰어 들고 있지만, 자신을 숙고 할 때이 페이지를 발견했다. 물론 페이스 북이나 트위터가 어떻게 그것을 정당화했는지는 모르겠지만, 여기에 가치있는 것에 대한 내 생각 과정이 있습니다.

결국, 나는이 관행이 의미가없는 것이 아니라고 결론을 내 렸습니다 (단어입니까?). 사실, "i는 아이콘입니다"라는 부족함과 좋은 연관성 외에도, 단순한 <img>태그가 실용적이지 않을 때 실제로 아이콘에 대한 가장 의미있는 선택이라고 생각합니다 .

1. 사용법은 사양과 일치합니다.

W3이 주로 염두에두고 있던 것은 아니지만 공식 사양 <i>은 아이콘을 쉽게 수용 할 수 있는 것 같습니다 . 결국, 답장 화살표 기호는 다른 방식으로 "답장"이라고 말합니다. 독자에게 생소 할 수있는 기술 용어를 나타내며 일반적으로 이탤릭체로 표시됩니다. ( "이것은 트위터에서 우리가 답장 화살표 라고 부릅니다 .") 또 다른 언어 인 상징적 언어의 용어입니다.

트위터가 화살표 기호 대신에 <i>shout out</i>또는 <i>[Japanese character for reply]</i>영어 페이지를 사용하는 경우 사양과 일치합니다. 그럼 왜 안돼 <i>[reply arrow]</i>? (내가 접근 할 수있는 것이 아니라 HTML 의미론을 엄격히 말하고 있습니다.)

내가 볼 수있는 한, 아이콘 사용법에 의해 명시 적으로 위반 된 사양의 유일한 부분은 "텍스트 범위"문구 (태그에 텍스트가 포함되지 않은 경우)입니다. 분명하다 <i>태그는 주로 텍스트를 의미하지만 태그의 전반적인 의도에 비해 아주 작은 세부 사항입니다. 이 태그의 중요한 질문은 포함하는 컨텐츠 형식이 아니라 해당 컨텐츠의 의미에 대한 것입니다.

"텍스트"와 "아이콘"사이의 줄이 웹 사이트에 거의 없을 수 있다고 생각할 때 특히 그렇습니다. 텍스트는 아이콘과 비슷하거나 (일본어 예제와 같이) 아이콘은 텍스트와 유사하거나 ( "제출"이라고 표시된 jpg 버튼 또는 캡션이있는 고양이 사진과 같이) 텍스트가 다음과 같이 대체되거나 향상 될 수 있습니다. CSS를 통한 이미지. 텍스트, 이미지-누가 신경 쓰나요? 모든 내용입니다. 장애가있는 사람, 장애가있는 브라우저, 검색 엔진 스파이더 및 다양한 종류의 기타 컴퓨터가 모두 그 의미를 이해할 수있는 한, 우리는 그 일을 해냈습니다.

따라서 스펙 작성자가이를 명확하게하기 위해 생각하거나 선택하지 않았다는 사실은 우리의 손이 태그의 정신과 일치하고 의미있는 일을하는 것을 묶어서는 안됩니다. <a>태그는 원래 다른 곳에서 사용을 할 수 있지만, 지금은 라이트 박스를 팝업 수도 예정되었다. 대박 이지요? 사양을 따라 잡기 전에 클릭시 라이트 박스를 팝업하는 방법을 알아 낸 사람은 현재 정의와 완전히 일치하지 않더라도 <a>태그가 아닌 태그를 사용해야합니다. <span>여전히 태그의 정신과 일치합니다 ( "여기를 클릭하면 문제가 발생합니다"). 와 같은 거래 <i>- 당신이 그 안에 넣어 일의 어떤 유형, 그러나 창조적으로 당신이 그것을 사용,

2. <i>태그 아이콘 요소에 의미 적 의미를 추가합니다 .

아이콘 클래스 자체를 수행하는 대체 옵션은 <span>입니다. 물론 의미 상 의미가 없습니다. 기계가 <span>무엇을 포함하는지 물으면 기계가 말합니다. "저는 몰라요. 무엇이든 될 수 있습니다." 그러나 <i>태그는 "저는 평소와 다른 방식으로 말하거나 익숙하지 않은 용어를 포함하고 있습니다."라고 말합니다. "아이콘 포함"과 동일하지는 않지만 아이콘보다 훨씬 더 가깝 <span>습니다.

3. 결국에는 일반적인 사용법이 적합합니다.

위의 것 외에도 기계 판독기 (검색 엔진, 스크린 리더 등)가 Facebook, Twitter 및 기타 웹 사이트 <i>가 아이콘 태그를 사용한다는 것을 언제든지 고려할 수 있다는 점을 고려할 가치가 있습니다 . 필요한 수단을 통해 코드에서 의미를 추출하는 것만 큼 스펙에 신경 쓰지 않습니다. 그래서 그들은 일반적인 사용법에 대한이 지식을 사용하여 단순히 "여기에 아이콘이있을 수 있습니다"라는 것을 기록하거나 의미에 대한 힌트를 얻기 위해 CSS를 살펴 보거나 누가 무엇을 알고 있는지와 같은 고급 작업을 수행 할 수 있습니다. 따라서 <i>웹 사이트 에서 for 아이콘 을 사용하도록 선택 하면 사양보다 더 많은 의미를 제공 할 수 있습니다.

또한이 사용법이 널리 퍼지면 향후 사양에 포함될 것입니다. 그럼 당신은 대체 당신의 코드를 통해 갈 것 <span>으로들 <i>의 '! 따라서 사양의 방향 인 것, 특히 현재 사양과 명확하게 충돌하지 않는 경우에 대해 이해하는 것이 좋습니다. 일반적인 사용법은 다른 방식보다 언어 규칙을 지시하는 경향이 있습니다. 당신이 충분히 나이가 들었다면, "웹 사이트"가 그 단어가 새로운 것이었을 때의 공식적인 철자 였다는 것을 기억하십니까? 사전은 공간이 있어야하고 웹은 대문자 여야한다고 주장했습니다. 그 의미 론적 이유가있었습니다. 그러나 일반적인 사용법은 "어쨌든 어리석은 일입니다. 더 간결하고보기 좋기 때문에 '웹 사이트'를 사용하고 있습니다." 그리고 오래지 않아

4. 계속해서 사용하겠습니다.

그래서, <i>우리는 쉽게 연관 "내가" "아이콘"으로, 때문에 인간에 더 많은 의미를 제공하기 때문에 사양의 기계에 의미를 더 제공 하고 그것은 단지 하나의 문자가 길다. 승리! 그리고 <i>태그 안에 또는 태그 바로 옆에 동등한 텍스트를 포함 시키면 (트위터처럼), 화면 판독기는 응답 할 위치를 이해하고, CSS가로드되지 않으면 링크를 사용할 수 있으며, 인간 판독기는 시력과 알맞은 브라우저에는 예쁜 아이콘이 표시됩니다. 이 모든 것을 염두에두고 단점이 보이지 않습니다.


33
그러나 학대없이 이미이를 수행하는 방법이 있습니다 <i>: 버튼이나 링크를 포함한 모든 텍스트 요소를 사용하고 배경 그래픽과 일부 패딩을 사용하여 아이콘을 추가하는 것과 같은 방법으로 아이콘을 추가하십시오 <i>. HTML <a ...>Reply</a>은 시맨틱 처럼 보일 것이며 , 스타일이 지정된 페이지에는 아이콘이 추가로 표시됩니다. 아이콘이 유일한 기본 요소 인 경우 아이콘 이어야합니다 <img src="..." alt="Reply">.
deceze

36
@Holly, 당신은 그것을 완전히 다른면으로 가져 갔지만 죄송합니다. 당신이 말한 모든 줄에 동의하지 않습니다.
Jashwant

11
공허함 (아이콘조차도)은 텍스트 가 아니며 텍스트는 사양에 구체적으로 쓰여진 것입니다.
Ry-

17
사양에 구체적으로 쓰여진 것은 잭을 의미합니다. 당신은 그것을 알고 다른 사람들은 그것을 알고 있습니다. 가이드입니다. 더 이상 없습니다. IE가 사양에 관심이 있다고 생각하십니까? 점점 나아지고 있습니다. 모든 단일 브라우저가 사양을 완벽하게 유지하려고 노력하고 있다고 생각하십니까? 지구상의 모든 사람들이 <code> 탐색, 머리글, 바닥 글, 섹션, 옆으로, ... n </ code>을 올바르게 사용하고 있다고 생각하십니까? 아니. <code> <div class = "sidebar"> </ code>를 대체하는 페이지가 나옵니다. 사람들이 계속 사용하는 방식은 앞으로 "의미"를 정의하는 것입니다.
o_O

17
큰 논쟁, 당신이 저를 설득했다고 생각합니다. 특히 설득력있는 # 3은 "일반적인 사용법이 올바른 것"입니다. 공통 언어와 마찬가지로 모든 사람이 그런 식으로 단어를 사용하기 시작하면 이것이 표준 사용법이됩니다. HTML 사양은 한동안 진화 한 문서였으며,이를 독단적으로 준수하는 것은 어리석은 일입니다. 제 생각에는 공통의 협약을 따르는 것이 더 지속 가능한 길입니다. 또한 <i> 요소는이 시점에서 사용되지 않지만 새롭고 의미 적으로 풍부한 삶을 제공하는 데 기분이 좋습니다! 의심 할 여지없이이 사용법으로 스펙이 어떻게 발전 할 지 궁금합니다.
논리 아티스트

59

쿠엔틴의 대답은 분명히 i 태그를 사용하여 아이콘을 정의해서는 안됩니다.

그러나 홀리는 그 span자체로는 의미가 없으며 태그 i대신 에 찬성 투표했다 span.

img시맨틱하고 alt태그 가 포함 된 것으로 사용하도록 제안한 사람은 거의 없습니다 . 그러나 img비어있는 경우에도 src서버에 요청을 보내 므로 사용하지 않아야 합니다. 여기를 읽으십시오

올바른 방법은

<span class="icon-fb" role="img" aria-label="facebook"></span>

이렇게 하면 alt태그 가없는 문제가 해결 span되고 시각 장애가있는 사용자가 액세스 할 수 있습니다. 의미적이고 태그를 오용하지 않습니다 (해킹).


6
@GeorgeMauer, 모든 자존심있는 HTML / 웹 디자이너는 alt 태그에 관심을 갖습니다. 사양은 이유가 있습니다. 건물의 경사로와 같이 대체, 제목 및 aria 태그는 이유가 있습니다.
osiris

3
@osiris는 이제 사양을 항상 변경합니다. 나는 따르는 것이 좋다는 것에 동의하지만, 당신은 근본적인 의도를 고려해야합니다. 말하자면, 나는 그것을 읽은 이후로 스크린 리더 / 이미지 누락 / 툴팁뿐만 아니라 당신에게 동의합니다. 실제로 내가 알지 못했던 의미가 있습니다. MDN : "이 속성을 생략하면 이미지가 컨텐츠의 핵심 부분이지만 해당 텍스트를 사용할 수 없습니다.이 속성을 빈 문자열로 설정하면이 이미지가 컨텐츠의 핵심 부분이 아님을 나타냅니다. 비 시각적 브라우저 렌더링에서 생략하십시오. "
George Mauer

3
부수적으로, 나는 아이콘의 올바른 아리아 역할이 표현 이라고 생각합니다 . img 아님 .
Sylvain Leroux 2016 년

2
@SylvainLeroux, 아이콘이 텍스트와 함께 버튼에 사용되면 역할이 프레젠테이션이라고 생각합니다. 그러나 버튼 (텍스트 없음)에서 아이콘 만 사용하면 그 역할이 img입니다.
Jashwant

2
그것은 접근 할 수 없습니다! 스크린 리더로 테스트 했습니까?! 기본적으로 액세스 가능한 솔루션 <img alt="...">을 대체 <span role="img">하면 모든 것이 악화됩니다. aria-label초점을 맞출 수없는 SPAN 에는 사용하지 마십시오 . 항상 예상대로 작동하지는 않습니다. role무엇을하고 있는지 모른다면 사용하지 마십시오 . ARIA를 과도하게 사용하면 모든 사람이 모든 것을 악화시킵니다. 제품에 액세스 할 수없고 코드를 읽고 유지하기가 더 어려워집니다. 그리고 SEO는 어떻습니까? ARIA는 현명하게 잘하지만, 사용하다 - accessibility-developer-guide.com/knowledge/aria/bad-practices
흐르 보예 Golcic

12

내 추측 : 트위터는 레거시 브라우저를 지원해야한다는 것을 알기 때문에 그렇지 않으면 :before/를 사용합니다.:after pseudo-elements를 .

레거시 브라우저는 내가 언급 한 의사 요소를 지원하지 않으므로 아이콘에 실제 HTML 요소를 사용해야하며 아이콘에는 '독점적'태그가 없으므로 그냥 <i> 모든 브라우저는 지원합니다. 그 태그.

그들은 분명히 <span>당신처럼 (완전히 괜찮은 것처럼)을 사용할 수 있었지만 아마도 위에서 언급 한 이유와 Quentin이 언급 한 이유 때문에 Bootstrap이<i> 태그를 .

스타일링을 위해 여분의 마크 업을 사용하는 것은 나쁜 습관입니다. 이것이 의사 요소입니다. 가 발명되어 콘텐츠와 스타일을 분리 .하지만 레거시 브라우저를 지원해야하는 경우가 종종 있습니다. 소지품.

추신. 아이콘이 'i'로 시작 하고 <i>태그 가 있다는 사실 은 우연의 일치입니다.


3
실제로, 내부 코드를 보면 I는 이전 요소입니다.
DCdaz

12

나는 다른 사람들의 대답에 완전히 다른 접근법을 취합니다. 특히 표준 HTML 어휘 태그 정의와 관련하여 표준과 규칙이 깨질 수 있다고 말하면서 내 솔루션의 접두사를 주장하고 논쟁을 제기합니다.

자체 목적이있는 사용자 정의 요소를 작성하는 것을 막을 수있는 것은 없습니다.

최신 브라우저와 IE 6+ (w / w)도 다음과 같은 기능을 지원할 수 있습니다.

<icon class="plus">

또는

<icon-add>

태그를 정규화해야합니다.

 icon { display:block; margin:0; padding:0; border:0; ... }

IE9 또는 이전 버전을 지원해야하는 경우 shim을 사용하십시오 (아래 게시물 참조).

이 StackOverflow 게시물을 확인하십시오.

HTML5에서 자신의 HTML 태그를 만드는 방법이 있습니까

더 나아가서 Google의 Angular 지시문과 새로운 Polymer 프로젝트는 맞춤 HTML 태그의 개념을 사용합니다.


2
그런 다음 W3C 유효성 검사기로 이동하여 들어가면 <!doctype html> <html lang="en"> <head> <title>Hello</title> </head> <body> <icon></icon> </body> </html>단일 오류가 발생합니다.Error: Element icon not allowed as child of element body in this context.
Digital Ninja

6

나는 Joomla 템플릿을 최근에 작업 <i>하고 있었고 태그를 사용하고 있기 때문에 W3C에 실패한 템플릿을 계속 사용했기 때문에 이것이 매우 나쁘다고 생각 했습니다. 원래 사용은 무언가를 기울임 꼴로 사용 했기 때문에 더 이상 CSS를 통해 이루어졌습니다 더 이상 HTML이 아닙니다.

템플릿을 보았을 때 모든 <i>태그를 다음 과 같이 변경했기 때문에 실제로 나쁜 연습 을합니다.<span style="font-style:italic"> 대신 대신 한 다음 전체 템플릿이 왜 이상하게 보 였는지 궁금해 .

이것이 <i>이런 식으로 태그 를 사용하는 것이 나쁜 생각 인 주된 이유입니다. 나중에 누가 작업을 볼 것인지 알지 못하고 실제로하려고하는 것은 텍스트를 표시하지 않고 텍스트를 기울임 꼴로한다고 가정합니다. 상. 방금 웹 사이트에 아이콘을 넣고 다음 코드로 수행했습니다.

<img class="icon" src="electricity.jpg" alt="Electricity" title="Electricity">

그런 식으로 나는 한 클래스에 모든 아이콘을 가지고 있으므로 모든 변경 사항이 모든 아이콘에 영향을 미칩니다 (예 : 더 크거나 작게 원하거나 둥근 테두리 등). alt 텍스트는 화면 판독기에 사람에게 무엇을 말할 수있는 기회를 제공합니다 아이콘은 "이탤릭체로 된 텍스트, 이탤릭체 끝"(스크린 리더가 화면을 읽는 방법을 정확히 알지 못하지만 그와 비슷한 것 같음)을 얻지 못하고 제목은 사용자에게 마우스를 놓을 수있는 기회를 제공합니다. 이미지를 파악할 수없는 경우 아이콘이 무엇인지 알려주는 툴팁을 얻습니다. 사용하는 것보다 훨씬 좋으며 <i>W3C 표준을 통과합니다.


7
<i>더 이상 사용되지 않습니다.
user2867288

3
글꼴 아이콘에는 "img"태그가 작동하지 않습니다. 내 말은 그렇지만 브라우저는 구문 분석 할 때마다 사이트에 요청을 보냅니다.
Navin

1
대신 <span style="font-style:italic" />새로운 대안을 사용했을 수도 있습니다.<strong />
ewino

@ewino 나는 당신이 단어를 강조하기위한 의미 론적 대체 인 <em> </ em>을 의미한다고 생각합니다 (이탤릭체를 적용하기보다는)
amklose

당신은 실제로 정확합니다 :-)
ewino

2

또한 링크 <a>태그 안에 절대 위치가 지정된 아이콘을 배치하려고 할 때 유용하다는 것을 알았습니다 .

<img>태그 에 대해 먼저 생각 했지만 링크 내의 해당 태그의 기본 스타일에는 일반적으로 테두리 스타일 및 / 또는 그림자 효과가 있습니다. 또한 <img>"src"속성을 정의하지 않고 태그 를 사용하는 것이 좋지만 배경 이미지 스타일 시트 선언을 사용하여 이미지가 고스트 및 드래그되지 않습니다.

이 시점 에서 <span>or 와 같은 태그를 생각하고 있습니다.이 <i>경우 <i>이러한 유형의 아이콘만큼 의미가 있습니다.

대체로 직관적이라는 것의 이점은이 태그가 아이콘으로 작동하도록 최소한의 스타일 시트 조정이 필요하다는 것입니다.


Ok 이것이 나쁜 습관이라고 생각하는 이유입니다. 역사적으로 <B>는 볼드체이고 <I>는 이탤릭체였습니다. <i>를 사용했다면 빈 이탤릭 태그를 작성하십시오. 이것들은 <strong> 및 <em>으로 대체되었으므로 고대 브라우저를 위해 빈 기울임 꼴 태그가있는 페이지를 표시하고 싶지 않을 것입니다. TEXT라고 말하세요. 따라서 글꼴 크기를 0으로 만들고 아이콘도 가질 수 있으므로 <span>이 더 나은 선택입니다.
user1712691

1
@ user1712691 일반적인 신화 이며 각각 <b><i>로 대체되었습니다 . 그러나 진실은, 그리고 사용되지되지 않으며, 새로운 의미 론적 의미를 가지고있다. 자세한 내용 은 공식 사양 을 참조하십시오. <strong><em><b><i>
chharvey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.