레이블이 html인 게시물을 표시합니다. 모든 게시물 표시
레이블이 html인 게시물을 표시합니다. 모든 게시물 표시
2020년 4월 1일 수요일

a와 button을 용도에 맞게 사용하기

출처 : unsplash.com

오랜만에 개발 관련 글을 쓴다. 아주 기초적인 부분인데 놓치고 있던 부분이 있어서 기록으로 남겨둔다. 코딩하는 습관은 한번 익숙해지면 고치기가 어렵다. 나는 여러가지 안 좋은 습관을 가지고 있다.

그 중 제발 좀 고치자 싶어서 노력하는 부분이 하나 있다. 바로 링크가 아닌 곳에서 <a>태그의 사용을 지양하는 것이다.

앵커 태그


WWW의 근간을 이루는 기술 중 하나는 HTML이다. HTML이라는 이름에도 들어 있듯이 HTML문서는 '하이퍼텍스트' 문서다. 하이퍼텍스트의 근간은 하이퍼 링크이며 이 하이퍼링크를 위해 존재하는 것이, 기본적으로 <a>태그이다.

<a>태그는 'href' 요소와 결합하여 하이퍼링크를 만든다.

따라서, <a> 태그는 페이지 간의 이동을 위해 링크를 생성할 때만 사용해야 한다. 기본중에 기본인데 과거에는 <a>태그에 href="#"을 넣거나, javascript:; 와 같은 것으로 페이지 링크와 스크립트 호출을 막아놓고, 동적 UI를 만들 때 버튼 기능으로 많이 사용했다. 이것이 시간이 흐르고 손에 굳어버리니 계속 이 방법을 고수했다. 이는 의미에 맞지 않는 매우 잘못된 마크업 사용법이므로 하이퍼링크 생성 이외에 페이지 내의 동적 UI 작성을 할 때는 <a> 태그의 사용을 지양하자.

버튼 태그


2000년대 중반부터 AJAX 기법이 널리 확산되었다. 그리고 나중에는 모바일 시대가 열리면서 SPA 앱 개발 방식도 널리 사용되었다. 웹페이지나 모바일 페이지는 심플하면서도 복잡해졌다. 어떤 인터렉션이 있기전에는 심플해졌고, 거기서 무언가 인터렉션이 발생하면 점점 복잡한 속살을 드러낸다.

지금의 웹페이지나 모바일웹 사이트들은 페이지 이동을 하지 않은 상태에서 수 많은 동작과 인터렉션을 요한다. 이런 페이지 내 기능들을 사용할 때 <a>태그 대신 <button> 태그를 사용하는 것이 조금 더 논리에 맞지 않을까 생각한다.

버튼 태그는 기본적으로 <input> 요소로 구현이 가능하다. 이 경우에는 form의 submit이나 reset 기능도 사용이 가능하다.

다만, <a>태그 대용으로 사용할 경우에는 이렇게 사용하지 말고 <button>..</button>으로 독립적 마크업을 사용하자. 이렇게 사용하면 버튼 안에는 이미지를 비롯해서 <span>등 다른 요소를 넣어서 조금 더 디테일한 스타일링도 가능하다.

W3C 링크


앵커 태그 명세 : https://www.w3.org/MarkUp/1995-archive/Elements/A.html
버튼 태그 명세 : https://www.w3.org/TR/2011/WD-html5-20110525/the-button-element.html#the-button-element

2020년 4월 1일
송종식


2013년 3월 2일 토요일

왜 웹표준인가?

'쏭군'이라는 닉네임으로 2007년도에 썼던 글 입니다. 웹표준이나 웹접근성에 대한 관심이 서서히 생겨나고 있던 시절이었습니다. 워낙 시간이 오래 흘러서 업데이트 되어야 할 부분도 많고, 개략적인 내용만 다룬 글 이지만 지금 현재까지도 많은 분들께 도움이 되리라 생각되는 글이라 특별히 이 블로그에 백업해 둡니다. 고맙게도 당시에 수백개의 댓글이 달리고 업계 종사자분들이 여기저기 퍼가기 하면서 업계에서는 꽤 많이 읽힌 베스트리딩 글 이었습니다. 누적 조회수는 5만회가 넘었었습니다.

여러분 가게에 물건 구경하겠다는 손님을 그냥 내쫓겠습니까?
손님이 시각장애인이라는 이유로 물건을 팔지 않겠습니까?

웹표준을 지키지 않으면 알게 모르게 놓치는 것들이 많습니다!

웹표준? 웹접근성? 그게 뭐길래?


웹표준을 지킨다 , 웹접근성을 높인다는 말은 무엇이고.
웹표준을 지키면 뭐가 좋길래 사람들이 웹표준, 웹표준 할까요?
똑같은 데이터를 가지고 있는 웹사이트가 있습니다.


웹표준을 지키면 검색엔진 노출이 됩니다. 반면 그렇지 않으면 검색엔진 노출도 힘들어 집니다. 또한, 웹표준을 지키지 않으면 어렵사리 찾아온 고객을 내쫓는 경우도 발생합니다.

웹표준을 지키면 브라우저나, 장치, 기기에 관련없이 조금더 많은 사람에게 정보전달을 있습니다. 또한 검색엔진 유입량도 늘어납니다. 웹표준을 지키지 않으면, 우리 웹사이트에서 가지고 있는 정보가 모두에게 전달될 없습니다. 제한된 일부 사람들에게만 전달될 뿐이지요. 이것은 매우 비효율적 입니다. 똑같은 데이터를 가지고 있는데 웹표준을 지원하고 안하고는 웹사이트의 정보를 더욱 많은 사람에게 전달할 있고 못하고의 차이를 가져옵니다. 이외에 웹표준을 지키면 다양한 장점이 있습니다. 장점들을 소개해 드리겠습니다.

크로스브라우징


혹시 익스플로러에 최적화하여 사이트를 제작하셨습니까? 파이어폭스나, 사파리, 오페라 다른 브라우저에서 웹사이트 레이아웃이 문제없이 출력되며, 문제없이 작동되는지 확인해보셨나요? 웹표준을 지킨 웹사이트는 일단 크로스브라우징을 가능하게 해줍니다. 내가 만든 웹사이트를 방문하는 방문객이 익스플로러를 사용하든, 파이어폭스를 사용하던, 사파리나 오페라 등의 특이한 브라우저를 사용하든 한결같은 모습을 보여줍니다. 아래의 그림을 보시면 이해가 쉽게 되시리라 생각됩니다.


물론 익스플로러의 점유율에 비하면, 아직은 보잘것 없는 파이어폭스나 사파리등의 점유율 입니다. 그렇지만, 명이라도 방문객을 유치하기 위해서라면 웹표준은 반드시 지켜야겠지요.

데이터와 디자인의 분리?!


말은 처음 웹표준을 접하는 분들께는 언뜻 이해하기 어려운 개념일 있습니다. 하나의 웹페이지를 흔히 우리가 다루는 A4 용지의 문서처럼 하나의 문서라고 가정합시다. 그렇다면 해당 웹페이지는 디자인을 배제하고 기본적으로 문서의 형태를 띄고 있어야 합니다. 기본적인 문서의 형태를 띄면서 데이터를 가지고 있는 것이 HTML 입니다. 그리고 HTML 페이지를 다양하고 보기좋게 디자인 해주는 역할을 하는 것이 바로 CSS입니다.


CSS Zen garden 웹사이트 입니다. HTML 문서를 보세요 제목부터 작은 제목그리고 단락별로 들어가는 내용까지... HTML 문서의 구조화가  되어있지요? HTML 파일에는  하나도 안대고, CSS  교체하여 전혀 색다른 느낌의 웹사이트 디자인을 만들  있습니다잊지마세요. HTML 문서!(데이터) CSS 디자인 속성 저장!

모바일 기기를 위한 웹표준


CSS 지원되지 않는 모바일 기기에서 여러분의 웹사이트는 접속을 원하는 이용자에게 정보전달을 제대로 하고 있나요? HTML데이터와 CSS디자인을 완벽하게 분리하여 웹표준에 따라 작성된 웹페이지는 CSS 지원되지 않는 모바일 기기에서도 원하는 정보를 완벽하게 전달할 있습니다. (, 와이브로나 휴대폰 전용 서비스로 개발된 웹페이지 제외)


CSS 지원되지 않는 모바일기기에서 접속해도 충분히 원하는 정보를 얻을 있도록 데이터와 디자인이 분리되어 있는 '다음'메인페이지의 경우(우측 핸드폰 사진은 합성한 것입니다)


데이터와 디자인의 분리가 되지 않은 사이트는 모바일 기기가 아예 웹페이지를 해석하지 못하기도 합니다. 또한 CSS없이 사이트를 읽어들이면 아래 사진처럼 사이트가 폭격을 맞은냥 깨져서 출력됩니다. 사이트 이용이 전혀 불가능하게 됩니다. 조사결과 웹표준을 지키는 컴퓨터학원 홈페이지는 한군데도 없었고, 홈페이지 제작업체들도 웹표준을 거의 지키지 않고 있었습니다. 명색이 홈페이지로 돈벌어 먹고 사는 사람들이 말입니다. ( 사진은 합성된 이미지 입니다)

시각장애인을 위한 스크린리더기의 지원


웹은 평등합니다. 웹은 사람을 차별하지 않습니다. 하지만 언제부턴가 우리나라는 많은 디자이너/개발자분들께서 의미를 담은 웹페이지는 신경을 쓰고 있지 않습니다. 사이트는 테이블로 통자이미지를 덕지덕지 붙여서 보여주기에만 급급한 경우가 많고, 필요없는 플래시 U.I. 남발하여 웹페이지의 의미를 알아볼 없게 만들고 있습니다. 앞을 못보는 시각장애인을 위한 사이트를 고려해보셨습니까? 웹표준을 지키면 시각장애를 가진 분들도 웹사이트를 편안하게 이용할 있게 해줄 있습니다. 그래서 웹접근성도 한층 높아집니다.


계속 강조하는 것이지만, HTML 문서를 코딩할 때는 의미에 맞는 코딩을 해야합니다.
예를 들어서, 강조하고 싶은 문장이 있는데, 해당 부분을 <b> 태그로 감싸면 글씨만 굵어질 , 브라우저나 스크린리더기는 해당 문장을 중요문장으로 취급하지 않습니다. 웹표준에 맞는 태그는 <b>태그가 아니라 <strong>입니다. 이처럼 웹표준에 부합하는 태그들이 있습니다. 숙지하시어 사용하시기를 권장합니다.

사이트 디자인 관리 시간 단축


데이터와 디자인의 분리. , HTML 페이지는 말그대로 문서상태이고, CSS 통해서 웹페이지를 디자인 합니다. 그러면, CSS 여러개 만들었을 경우, CSS 파일의 경로를 변경하는 만으로 새로운 디자인으로 사이트를 리뉴얼 있습니다. 또한 기존에는 사이트에 이미지나 스타일 하나만 변경하더라도 페이지마다 바꿔주어야 하는 번거로움이 있었습니다. 하지만 HTML CSS 분리는 이런 작업시간까지 단축시켜 주었습니다. CSS에서 코드 줄만 수정해주면, 수백~수천페이지의 디자인이 한꺼번에 변경이 가능하게 되었습니다. 이것은 추가적으로 웹사이트 관리 비용절감의 효과도 가져옵니다.

디자인을 수정해야하는 페이지가 12500페이지라면 여러분의 선택은?

검색결과 상단에 노출되고 싶으세요? 그럼 웹표준을 지키세요!
실제로 똑같이 그래픽 처리가 두개의 웹사이트가 있다고 가정합시다. 하나의 사이트는 데이터와 디자인 분리를 하지 않고 많은 사이트이고, 다른 하나는 데이터와 디자인을 완벽하게 분리하여, 웹페이지의 내용과 의미를 정확하게 담고 있습니다. 겉보기는 똑같지만 속은 완전히 다른 사이트이지요. 쪽은 페이지의 의미를 정확하게 담고 있고, 한쪽은 페이지의 의미가 해석불분명하니까요

이것은 검색결과에 상당한 영향을 미칩니다. SEO에서 웹표준은 많은 부분을 차지합니다.

검색엔진의 검색결과 상단에 노출되기 위해서 메타태그나 title 태그의 활용, 본문에서 주력 단어의 빈도수 노출 많은 부분이 널리 알려져서 활용되고 있습니다. 그렇지만 아직까지, 웹표준을 지키면 검색엔진의 검색결과 상단에 컨텐츠가 노출된다는 사실은 그다지 많이 알려져 있지 않습니다.

대표적으로 H1, H2, H3 ... 제목 태그인 h 태그의 SEO 막강합니다.


블로그 제목은 '쏭군은 열정 드리머' 입니다만, CSS 이용하여 MONOEYES라는 블로그 제목으로 이미지 치환 해두어 텍스트는 감추어 두었습니다. 보이지만 않을뿐 문서의 대제목은 '쏭군은 열정 드리머'라는 속성을 항상 가지고 있는 것입니다. 구글에서 검색한 결과 최상단에 H1 태그가 검색되어 출력됩니다.


포스팅 제목의 경우 검색엔진에서 검색되는 빈도가 많아야 하는 중요한 부분인 만큼, 문서 대제목인 H1 다음으로 H2 주었습니다. H1 보다 중요도는 떨어지지만, 단락의 대제목으로서 검색엔진 검색결과에서 만족스러운 노출을 보여줍니다. 위의 사진은 CSS 제거했을 , 포스트 제목이고, '디올 어딕트'라는 디올의 제품을 구글에서 검색했을 , 가장 상단에 쏭군의 블로그가 노출되는 것을 보실 있습니다. 문서 구조화를 위해서도 헤드라인 태그는 반드시 사용해야 하며 정확한 구조화 구성하시길 바랍니다.

DIV TABLE 논란은 문제의 본질이 아닙니다


많은 분들이 DIV=웹표준, TABLE=비표준이라는 인식을 가지고 계십니다. 문제는 DIV TABLE이냐가 아닙니다. DIV TABLE 모두 웹페이지를 작성하기 위한 '도구' 뿐이지, 자체가 '웹표준이냐 아니냐' 가늠하는 목적이 없습니다.
TABLE 데이터를 출력하기 위해 존재하지 레이아웃 짜라고 존재하는 것이 아닙니다
테이블은 말그대로 데이터들을 표형식으로 출력해야 필요성이 있을때만 사용합니다. 테이블로 레이아웃을 만들게 되면, 웹페이지의 로드 속도도 느리게 되고, 웹페이지를 수정할 곳이 생기면 자칫 페이지 전체를 뜯어내야하는 대공사가 발생될 있습니다.


TABLE 없는 DIV 장점


모듈화? 디자인을 하시는 분들께는 말이 어렵지요. 하지만 간단한 뜻입니다. 필요한 부분을 마음껏 떼어서 있게 웹사이트를 만들 있다고 생각하시면 됩니다. 예를 들어, 테이블로 웹사이트 레이아웃을 구성하면 로그인 박스 하나를 바꾸기 위해서 웹페이지의 다른 부분도 영향을 주거나, 웹페이지 전체를 뜯어내야 하는 경우가 대부분입니다. 그렇지만 DIV 작업을 하면 원하는 박스만 떼어서 디자인을 수정할 있고, 박스는 얼마든지 다른 페이지에 자유롭게 붙였다 뗐다 하면서 재활용이 가능합니다.

게다가 TABLE 레이아웃을 구성할때보다, 작업의 속도나 사이트 관리적인 측면에서 훨씬 이득을 있고, 페이지 로드도 테이블 레이아웃 보다 빠릅니다.

하지만 TABLE 필요한 곳은 테이블을 쓰세요


테이블을 이용해서 웹사이트의 레이아웃을 짜면 나쁜 입니다. 하지만 반드시 테이블이 들어가야 곳이 있습니다. 반드시 데이터형식을 표방식으로 보여주어야 하는 곳은 테이블을 쓰는편이 낫습니다.

테이블을 유용하게 활용하고 있는 올블로그와 네이버

만약 위의 프리미어리그 점수판을 표를 사용하지 않고 DIV LI 이용해서 표현했다고 가정합시다. 페이지의 CSS 지원되지 않을때 오히려 팀별로 득점이나 승점을 보기가 힘들어집니다. 이런 표형식의 데이터는 TABLE 사용하는 것이 더욱 웹표준에 부합합니다. 또한 CSS 깼을때도 점수표를 깔끔하게 출력할 있구요. 반드시 이런 데이터처리에만 TABLE 쓰시고 어지간하면 사용하지 않는 것을 권장드립니다. 더구나 TABLE 레이아웃을 짜는 비통한 일은 다시는 있어서는 되겠지요. 데이터를 표시하라고 하사한 TABLE 이거늘.. 그걸로 홈페이지 레이아웃을 만들면 원래 목적에도 어긋날 아니라 원통하기 까지 합니다.

스크립트 사용시


있으면 스크립트 사용을 자제하는 것이 좋습니다. 부득이 스크립트를 사용해야 하는 경우라면, 모든 브라우저에서 작동되는 스크립트를 사용하시고, 스크립트가 지원되지 않는 환경을 위해서 스크립트 없이도 웹사이트를 이용할 있도록 차선책을 미리 만들어 두시는 것을 권장합니다.

서버 부하를 덜어줌


디자인 정보를 CSS 저장함으로서, 관련 소스코드를 획기적으로 줄일 있습니다.
또한, CSS 캐싱되어 웹사이트에 최초 접속할 한번만 로드되므로, 서버 부하를 획기적으로 줄여줄 있고, 규모가 사이트라면 비용 절감 효과도 가져올 있습니다.

읽느라 고생 많으셨습니다. 글쓴이를 표기하신다면 문서를 상업적으로 이용하셔도 되고, 어디에나 퍼가셔도 됩니다. 웹표준을 처음 접하시는 분들께 도움이 되고자 작성한 문서인데. 조금이나마 도움이 되셨으면 좋겠습니다.

2007년 12월 20일
송종식 드림