HTML Basic 3
Links, Images, Favicon, Tables, Lists, Block, Inline
12. HTML Links 👩💻
1. Hyperlinks
사용자의 클릭에 의해 page
를 이동시킨다.
Syntax
<a href="[Address]">
[Text | HTML element]
</a>
1 ) Hyperlinks with A Text
<a href="https://sbpark88.github.io">This link is my blog</a>
2 ) Hyperlinks with An Element
Links
는 단순 텍스트 뿐 아니라 HTML element
와 사용하는 것이 가능하다.
<a href="https://sbpark88.github.io">
<img src="/assets/images/banners/home.jpeg" alt="My Blog Main Image" style="width:300px">
</a>
3 ) Link to an Email Address
href
attribute 의 주소를 mailto:[E-mail Address]
로 작성하면, 해당 이메일 주소로 새 메일을 보내도록 메일 앱
을 연다.
<a href="mailto:someone@example.com">Send email</a>
Button
elements 에 JavaScript
를 이용해 Link
elements 의 기능을 구현할 수 있다.
See the Pen Link to an Email Address by SB Park (@sbpark88) on CodePen.
‘CSS’ 를 이용한 버튼 모양의 ‘Links’ 와 비교해보자.
2. Link target
attribute
- _self : 기본값으로 현재
document
와 동일한window/tab
에서 연다. - _blank : 새
window
또는 새tab
에서 연다. - _parent :
nested frame
구조에서 하나 위 frame, 즉,parent frame
에서 연다. - _top :
nested frame
구조에서 최상위 frame, 즉,_parent
를 여러 번 해 최상위docuemnt
에서_self
로 여는window
의full body
로 연다. 것과 같다.
See the Pen HTML Target by SB Park (@sbpark88) on CodePen.
(CodePen
구조상 _self
는 작동하지 않으며, 위 embed
의 _parent
는 이 페이지가 아니라 CodePen
Pens
의 페이지다.)
3. Link Titles
title
attribute 는 Link
elements 와 자주 사용되어 마우스 오버 시 툴팁으로 추가적인 정보를 제공한다.
<a href="https://sbpark88.github.io" title="Go to My Blog Main Page">This link is my blog</a>
<a href="https://sbpark88.github.io" title="Go to My Blog Main Page">
<img src="/assets/images/banners/home.jpeg" alt="My Blog Main Image" style="width:300px">
</a>
4. Link with CSS
1 ) Default Hyperlinks
HTML Links
는 기본적으로 기방문
, 미방문
, 클릭 상태
를 다르게 표현한다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
- link(미방문) : 밑줄 & 파란색
- visited(기방문) : 밑줄 & 보라색
- active(클릭) : 밑줄 & 빨간색
2 ) Hyperlinks with CSS
물론, CSS
를 이용해 사용자화 할 수 있다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
- link(미방문) : 밑줄 X & 녹색 & 배경 X
- visited(기방문) : 밑줄 X & 분홍색 & 배경 X
- hover(마우스오버) : 밑줄 O & 빨간색 & 배경 X
- active(클릭) : 밑줄 O & 노란색 & 배경 X
Button
elements 를 사용하지 않고 CSS
를 이용해 Link
elements 를 Button
elements 처럼 보이게 할 수 있다.
사용자가 볼 때는 Link
elements 로 구현한 버튼과 Button
elements 로 구현한 버튼에 차이는 없겠지만 Link
elements 를
이용하면 HTML
문서를 분석할 때 화면의 버튼이 페이지 이동을 위한 것임을 좀 더 명확히 할 수 있다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
‘button’ 태그를 이용한 ‘Hyperlinks’ 구현 과 비교해보자.
5. Link Bookmarks
Link
elements 는 URL
을 이용해 페이지를 이동하는 것 뿐 아니라, id
attribute 를 인식해 페이지 내 해당 id
와
일치하는 HTML
element 로 이동시킨다.
Syntax
<!-- Other page -->
<a href="[URL][#ID]"></a>
<!-- Same page -->
<a href="[#ID]"></a>
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
13. HTML Images 👩💻
1. HTML Images Syntax
- src : 이미지 파일 위치
- alt : 이미지 파일이 없을 경우 대체할 텍스트로, 시각 장애인이 사용하는
스크린 리더
프로그램은 물론SEO
에도 사용되므로 생략하지 않는 것이 좋다. - width : 이미지 너비(pixel), width 와 height 를 attributes 로 설정하는 방법은 권장되지 않는다.
CSS
를 이용하는 것이 권장된다. - height : 이미지 높이(pixel), width 와 height 를 attributes 로 설정하는 방법은 권장되지 않는다.
CSS
를 이용하는 것이 권장된다.
<img>
태그는 웹 페이지에 이미지를embed
하기 위해 사용된다. 하지만 기술적으로는 실제로 이미지를 페이지에 삽입하는 것이 아니라, 참조된 이미지(referenced image)를 위한 공간을 생성하고 유지한다.<img>
태그는<br>
태그나<hr>
태그와 마찬가지로Empty Elements
로 종료 태그가 없다.
<img src="/assets/images/banners/home.jpeg" alt="My Blog Main Image" style="width:300px">
2. Image Size
이미지의 크기를 지정하는 우선순위는 다음과 같다.
HTML attributes
< Internal/External CSS
< Inline CSS
See the Pen Link with Title by SB Park (@sbpark88) on CodePen.
따라서, HTML attributes 로 크기를 지정하면, Internal/External CSS
이 우선순위가 높아 설정값 일부를 덮어쓰게된다.
이미지 크기는 항상 지정해주는 것이 권장된다. 이미지를 크기를 미리 지정하지 않으면, 이미지가 로딩됨에 따라 페이지 레이아웃이 고정되지 않아 페이지가 로드되는 동안 레이아웃이 변경되며 화면이 깜빡일 수 있어 사용성이 떨어진다.
3. Image Floating
CSS
의 float
property 를 이용하면 element 를 글씨의 왼쪽 또는 오른쪽에 별도의 레이어로 띄운다.
정확한 CSS Properties
로 이야기하자면, display: inline-block;
속성이 된다(즉, float
을 사용하면
display: absolute;
와 동시에 사용될 수 없다).
- float: none; (default)
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
- float: left;
See the Pen Float left by SB Park (@sbpark88) on CodePen.
- float: right;
See the Pen Float right by SB Park (@sbpark88) on CodePen.
4. HTML Image Maps
1 ) Image Maps
이미지 위에 클릭 가능한 영역을 지도를 표시하듯 정의한다.
<img src="/assets/images/posts/2022-12-10-w3schools-html-part3/workplace.jpg" alt="Workplace" usemap="#workmap">
<map name="workmap">
<area shape="rect" coords="34,44,270,350" alt="Computer" href="https://www.w3schools.com/html/computer.htm">
<area shape="rect" coords="290,172,333,250" alt="Phone" href="https://www.w3schools.com/html/phone.htm">
<area shape="circle" coords="337,300,44" alt="Coffee" href="https://www.w3schools.com/html/coffee.htm">
</map>
아래 이미지의 랩탑
, 스마트폰
, 커피
는 각각 클릭 가능한 영역을 정의하고있다.
- img > usemap :
usemap
attribute 는#[map-name]
을 이용해 이미지 맵에 연결한다(# 을 붙여서 id 값일 것 같지만 name 이다).- map :
<map>
태그는 반드시name
attribute 를 가져야한다.- area :
<map>
태그의children
으로 1 ~ n 개로 정의하며, 각각의 클릭 가능한 영역을 정의한다.<area>
태그는shape
와coords
attributes 를 제외하면,<a>
태그와 동일하다.
2 ) Shape & Coords Attributes
클릭 가능한 영역의 모양을 정의하는 shape
는 다음 4 가지로 분류되며, shape
에 따라 coords
는 각각 다른 형태로 정의된다.
- default : 이미지 전체 영역
- rect : 사각형
- circle : 원
- poly : 다각형
- Shape=”rect”
shape
의 값이 rect
일 때, coords
는 (x, y) 좌표계를 이용해 (x1, y1) ~
(x2, y2) 로 클릭 가능한 영역을 정의한다.
From
To
Rectangular Shape
<area shape="rect" coords="34,44,270,350" alt="Computer" href="https://www.w3schools.com/html/computer.htm">
- Shape=”circle”
shape
의 값이 circle
일 때, coords
는 (x, y) 좌표계를 이용해 원의 중심과 반지름으로 클릭 가능한 영역을 정의한다.
Center
Radius
Circular Shape
<area shape="circle" coords="337,300,44" alt="Coffee" href="https://www.w3schools.com/html/coffee.htm">
- Shape=”poly”
포토샵 다각형 도구를 사용하듯 여러 점을 잡아 다각형을 포착한다.
All edges
Polygonal Shape
<area shape="poly"
coords="140,121,181,116,204,160,204,222,191,270,140,329,85,355,58,352,37,322,40,259,103,161,128,147"
alt="Bread"
href="https://www.w3schools.com/html/croissant.htm">
5. HTML Background Images
1 ) Background Image on a HTML Element
HTML
의 거의 모든 elements 는 Background Image
를 가질 수 있으며, Background Image
는 style
attribute 의
background-image
property 를 이용해 삽입한다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
물론, CSS
로 빼서 사용하는 것도 가능하다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
2 ) Background Image on a Page
<body>
element 에 추가하면 웹 페이지의 배경으로 사용할 수 있다.
See the Pen Background-Image on a Page by SB Park (@sbpark88) on CodePen.
3 ) Background Repeat
하지만 사진 크기가 작을 경우 화면이 반복된다. CSS
의 background-repeat
property 를 이용해 제어할 수 있다.
See the Pen Background-Image No-Repeat by SB Park (@sbpark88) on CodePen.
4 ) Background Cover
반복은 멈췄지만 사진이 화면을 채우지 못 한다. Background
관련된 몇 가지 CSS
properties 를 추가로 정의해주면 이를 제어할
수 있다.
- 원본 비율 유지
See the Pen Background Cover by SB Park (@sbpark88) on CodePen.
- 풀커버
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
6. HTML Picture Element
1 ) HTML Picture Element
picture
태그는 이미지를 하나의 블럭에 조건에 따라 전환시켜준다. 즉, 이미지를 위한 switch-case
와 같다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
화면 폭이 650 이상이면 음식 이미지, 화면 폭이 465 이상 ~ 650 미만이면 자동차 이미지, 그 외(source 미지원 또는 465 미만)는 소녀의 이미지를 보여준다.
picture
는 하나 또는 그 이상의source
태그를 자식으로 갖는다.source
태그의 조건은media
attribute 에 의해 정의되며, 그때 매칭할 사진은srcset
attribute 에 정의한다.img
태그는 반드시 포함되어야하는 태그로, 매칭되는 케이스가 없거나source
를 지원하지 않는 경우에default
로 사용된다.즉,
picture
태그 는switch
,source
태그는 각case
,media
attribute 는 조건,srcset
attribute 는 매칭 될 경우의 이미지,img
태그는default
에 해당한다.
picture
태그는 이미지를 조건에 따라 다르게 보여주지만HTML
태그에 여러 개를 뿌려 놓고display: none;
또는visibility: hidden;
처리를 하는 것이 아니다.CSS
태그를 제어하는 것이 아닌 브라우저의Web API
에 의해 제어된다. 따라서 이미지 전환이CSS
의 영향으로부터 자유롭다.
2 ) When to use the Picture Element
- 화면 크기에 따라 구별 : 화면이 작을 경우 굳이 큰 이미지가 필요하지 않다. 따라서 작은 화면에는 작은 이미지를 제공해 대역폭을 절약할 수 있다. 또한, 이미지에 텍스트가 포함된 경우 작은 화면에서 보여주기 어려운 경우 작은 화면에 맞춘 별도의 이미지를 만들어 화면 크기에 맞는 이미지를 제공할 수 있다.
- 포맷 미지원 문제 해결 : 브라우저에 따라 지원되는 이미지 포맷이 다르다. 보통
jpeg
,png
같은 것들은 문제가 되지 않지만, 일부 브라우저가 지원하지 못 하는 이미지 포맷일 가능성이 있는 경우,picutre
태그를 이용해 여러 이미지를 제공하면, 브라우저는 인식 가능한 첫 번째 이미지를 사용한다.
14. HTML Favicon 👩💻
favicon
은 브라우저의 탭에 해당 웹 페이지를 나타낼 수 있는 작은 이미지다. 일반적으로 웹 서버의 root
또는 별도의 이미지
디렉토리를 만들고 이미지 디렉토리의 root
에 저장하며, 이름은 favicon.ico
를 사용한다.
favicon
의 위치나 이름, 확장자는 고정된 것이 아니다. 실제로 이 블로그가 사용하는favicon
의 위치와 이름은 다음과 같다.
assets/images/favicon/greendreamtree.png
브라우저의 favicon
포맷 지원 현황
Browser | ICO | PNG | GIF | JPEG | SVG |
---|---|---|---|---|---|
Edge | Yes | Yes | Yes | Yes | Yes |
Chrome | Yes | Yes | Yes | Yes | Yes |
Firefox | Yes | Yes | Yes | Yes | Yes |
Opera | Yes | Yes | Yes | Yes | Yes |
Safari | Yes | Yes | Yes | Yes | Yes |
15. HTML Tables 👩💻
1. HTML Tables
Tables Generator - HTML 을 이용하면 좋다.
table
태그는 tr
태그로 이루어지고, tr
태그는 다시 th
태그 또는 td
태그로 이루어진다.
- table : 테이블 블럭을 정의
- tr : 테이블 row 를 정의
- th : 테이블 header cell 을 정의
- td : 테이블 cell 을 정의
즉, 테이블은 row 가 기본 구조이며, th, td 어떤 셀을 어느 위치에 생성하냐에 따라 가로 테이블이 될 수도 있고, 세로 테이블이 될 수도 있다.
위 4개의 태그가 테이블을 구성하는 가장 기본적인 태그이고, 추가적으로 다음 태그를 사용할 수 있다.
- caption : 테이블 설명을 정의
- colgroup : 아래
col
태그를 children 으로 갖는 태그로col
태그를 하나의 그룹으로 묶는다. - col : 테이블의 column 에 특정 스타일을 적용한다.
- thead : 테이블의 header 콘텐츠를 그룹화 한다.
- tbody : 테이블의 body 콘텐츠를 그룹화 한다.
- tfoot : 테이블의 foot 콘텐츠를 그룹화 한다.
- caption
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
- thead, tbody, tfoot
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
2. Table Borders
1 ) Table Borders and Collapsing
테이블의 border
는 전체 테이블을 구성하는 table
태그와 각 셀을 구성하는 th
, td
태그에 적용한다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
Margin 은 Collapsing
이 기본값이지만 (Margin Collapsing)
Table Borders
는 중복을 피하기 위해 명시적으로 border-collapse: collpased;
스타일을 주어 Collapsing
을 해줘야한다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
2 ) border-style
property
border-style
property 는 주로 사용되는 solid
외에도 다양한 값을 가질 수 있다.
dotted
dashed
solid
double
groove
ridge
inset
outset
none
hidden
3 ) border-radius
property
border-radius
property 를 이용하면 border 를 둥글게 표현할 수 있다.
See the Pen Table with Rounded Borders by SB Park (@sbpark88) on CodePen.
3. Table Sizes
CSS
의 width
와 height
properties 를 이용해 테이블의 전체 크기 및 각 row, column 의 크기를 조절할 수 있다.
See the Pen Table width and height by SB Park (@sbpark88) on CodePen.
4. Table Headers
th
, td
태그는 셀을 생성하는 태그로 horizontal 이든 vertical 이든 header
로 생성하기를 원하는 셀에
td
태그 대신 th
태그를 사용하면 된다.
See the Pen Table Headers by SB Park (@sbpark88) on CodePen.
위 시간표의 Weekday
, Weekend
, Mon
~ Sun
, Morning
, Afternoon
, Evening
은 th
태그에 의해
생성된 header cell
이다.
추가로 위 시간표는 thead
, tbody
, tfoot
으로 나뉘어있다.
5. Padding & Spacing
1 ) Cell padding
글씨가 테이블 border 에 딱 달라붙지 않도록 셀에 padding 을 주기를 원한다면, th
, td
태그에 padding
을 준다.
See the Pen Table Padding by SB Park (@sbpark88) on CodePen.
2 ) Cell margin
셀에 margin 을 주고 싶을 경우, th
, td
태그에 적용한 margin
을 주는 것이 아니라 table
태그에
border-spacing
을 준다.
See the Pen Table border-spacing by SB Park (@sbpark88) on CodePen.
6. Colspan & Rowspan
테이블 셀을 합치고 싶을 경우, th
, td
태그에 colspan
, rowspan
attribute 를 사용한다.
- colspan : column 을 합친다.
- rowspan : row 를 합친다.
예제는 4. Table Headers 를 참고한다.
7. Table Styling
1 ) Zebra Stripes
tr:nth-child(even) {
background-color: #D6EEEE;
}
2 ) Vertical Zebra Stripes
td:nth-child(even), th:nth-child(even) {
background-color: #D6EEEE;
}
3 ) Combine Vertical and Horizontal Zebra Stripes
tr:nth-child(even) {
background-color: rgba(150, 212, 212, 0.4);
}
th:nth-child(even),td:nth-child(even) {
background-color: rgba(150, 212, 212, 0.4);
}
4 ) Horizontal Dividers
tr {
border-bottom: 1px solid #ddd;
}
5 ) Hoverable Table
:hober
셀렉터를 이용해 마우스 오버시 하이라이트를 줄 수 있다.
tr:hover {background-color: #D6EEEE;}
See the Pen Hoverable Table by SB Park (@sbpark88) on CodePen.
8. Table Colgroup
1 ) Colgroup Syntax
colgroup
태그는 col
태그와 함께 테이블의 column 에 특정 스타일을 적용하며, colgroup
의 위치는 다음과 같다.
<table>
<caption></caption>
<colgroup>
<col>
<col>
</colgroup>
<thead></thead>
<tbod></tbod>
<tfoot></tfoot>
</table>
See the Pen Table Colgroup and Col by SB Park (@sbpark88) on CodePen.
2 ) Prefer CSS to Colgroup
하지만 colgroup
과 col
은 제한된 CSS
(width, visibility, background, border)만 지원하며,
우선순위가 CSS
에 비해 낮으므로 CSS
를 사용하는 것이 더 좋다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
:nth-col
은CSS pseudo-class
로 아직experimental
로 지원되는 브라우저가 없으므로nth-child
를 사용한다.
16. HTML Lists 👩💻
HTML 은 Unordered Lists
, Ordered Lists
, Description Lists
를 사용할 수 있다.
1. Unordered Lists
1 ) Unordered Lists Syntax
<ul>
<li></li>
<li></li>
</ul>
ul
태그는 list-style-type
을 style property 로 갖는다.
- disc : default, bullet
●
으로 표현된다. - circle : 속이 빈 bullet 과 같다.
○
으로 표현된다. - square :
■
로 표현된다. - none : 아무런 표시도 하지 않는다.
See the Pen Unordered Lists by SB Park (@sbpark88) on CodePen.
2 ) Nested Unordered Lists
See the Pen Nested Unordered Lists by SB Park (@sbpark88) on CodePen.
3 ) Horizontal Unordered Lists with CSS
CSS
를 이용하면 리스트의 방향을 세로에서 가로로 바꿀 수 있다.
See the Pen Untitled by SB Park (@sbpark88) on CodePen.
2. Ordered Lists
1 ) Ordered Lists Syntax
<ol>
<li></li>
<li></li>
</ol>
ol
태그는 type
attribute 를 갖는다.
- 1 : default, 숫자로 표현된다.
- A : 알파벳 대문자로 표현된다.
- a : 알파벨 소문자로 표현된다.
- I : 대문자 로마 숫자로 표현된다.
- i : 소문자 로마 숫자로 표현된다.
See the Pen Ordered Lists by SB Park (@sbpark88) on CodePen.
2 ) Control Ordered List Counting
See the Pen Control Ordered Lists Counting by SB Park (@sbpark88) on CodePen.
3 ) Nested Ordered Lists
See the Pen Nested Ordered Lists by SB Park (@sbpark88) on CodePen.
3. Description Lists
HTML Lists 는 ul
과 ol
외에도 dl
을 사용할 수 있다.
Syntax
<dl>
<dt></dt>
<dd></dd>
<dt></dt>
<dd></dd>
</dl>
- dl : description lists 를 정의한다.
- dt : description term 을 정의한다.
- dd : description term 을 설명한다(describe).
See the Pen Description Lists by SB Park (@sbpark88) on CodePen.
17. HTML Block & Inline 👩💻
모든 HTML Elements 는 CSS display
property 의 값으로 block
또는 inline
을 기본으로 갖는다.
1. Block-level Elements
- 가능하다면 항상 라인 하나를 차지한다(new line, full width).
- 브라우저는 자동으로 앞, 뒤에
margin
을 일부 추가한다.
대표적으로 p
, div
태그가 해당되며, 리스트는 다음과 같다.
2. Inline Elements
Inline Elements
는 대표적으로 span
태그가 해당되며, Block-level Elements
와 반대로 new line
을 생성하지 않으며,
width
역시 필요한 만큼만 사용한다.
리스트는 다음과 같다.
Reference
- “HTML Tutorial.” W3Schools. accessed Dec. 10, 2022, W3Schools-HTML.