0039 클래스(class) 속성 사용해보기


바로 앞의 0038 클래스(class) 속성 포스팅에서 클래스(class) 속성에 대해서 알아보았으니 이제 이를 간단하게 사용해보자. 

    

다음은 같이 전 세계의 주요 여행지들 중에서 가고 싶은 곳을 추려 가나다순으로 나열해 놓은 0039_1.html

     

<!DOCTYPE html>

     

<html>

<head>

 <title>여행지들(가나다순)</title>

 <link rel="stylesheet" type="text/css" href="0039.css" />

</head>

<body>

 <ul>

   <li>경주</li>

   <li>광주</li>

   <li>교토</li>

   <li>뉴욕</li>

   <li>뉴저지</li>

   <li>도쿄</li>

   <li>런던</li>

   <li>몬트리올</li>

   <li>부산</li>

   <li>북경</li>

   <li>상해</li>

   <li>서울</li>

   <li>시카고</li>

   <li>아테네</li>

   <li>워싱턴</li>

   <li>오사카</li>

   <li>파리</li>

   <li>홍콩</li>

 </ul>

</body>

</html>


실행한 결과는 다음과 같다. 



여행지를 찾기 좋게 가나다순으로 나열해 놓았지만 조금 심심해 보인다. 만일 여행지를 고른다면 각 여행지가 도시인지 아니면 아름다운 자연과 전통적인 문화를 즐길 수 있는 시골인지에 따라 다를 것 같다. 

     

따라서 일단 도시"urban"시골"rural"로 나누어 나타내고 싶다. 그렇다면 이를 어떻게 HTML 요소에 반영할 수 있을까?

     

단순히 HTML로만 만든다고 한다면 중첩된 목록(nested list)을 이용하여 전체 여행지들을 도시"urban"시골"rural"로 나누어 다음과 같이 만들어 볼 수 있을 것이다. 0039_2(중첩된목록).html 참조



그런데 이렇게 분류해보니 조금 부족해 보인다. 일단, 가나다순으로 나열하겠다는 원칙이 무너진 것도 그렇고, 시골(rural)인 곳도 3군데 밖에 없어 좋은 분류가 아닌 것 같다. 차라리 원래의 가나다순으로 돌려놓고 각각의 여행지들 별로 특색을 표시해보는 것이 좋을 것 같다. 

     

바로 이런 경우에 필요한 것이 클래스(class) 속성이다. 전체 여행지들을 urban 클래스(class)rural 클래스(class)로 분류하여 다음과 같이 0039_3.html을 만들어 보자. 

     

<!DOCTYPE html>

     

<html>

<head>

 <title>여행지들(가나다순)</title>

 <link rel="stylesheet" type="text/css" href="0039.css" />

</head>

<body>

 <ul>

   <li class="rural">경주</li>

   <li class="urban">광주</li>

   <li class="rural">교토</li>

   <li class="urban">뉴욕</li>

   <li class="urban">뉴저지</li>

   <li class="urban">도쿄</li>

   <li class="urban">런던</li>

   <li class="urban">몬트리올</li>

   <li class="urban">부산</li>

   <li class="urban">북경</li>

   <li class="urban">상해</li>

   <li class="urban">서울</li>

   <li class="urban">시카고</li>

   <li class="urban">아테네</li>

   <li class="urban">워싱턴</li>

   <li class="rural">오사카</li>

   <li class="urban">파리</li>

   <li class="urban">홍콩</li>

 </ul>

</body>

</html>


아직, CSS를 만들지 않았으므로 바로 다음과 같이 0039.css 파일을 작성하여 0039_3.html 파일과 같은 디렉터리에 저장한다.

     

.urban { color: blue; }

.rural { color: green; }


CSS는 간단하게 도시(urban)파란색 글씨로, 시골(rural)녹색 글씨로 스타일을 적용해보았다. 

      

이제 실행해보면, 경주, 교토, 오사카의 글자색이 녹색(green)으로 바뀐 것을 확인할 수 있다. 



구별해놓고 보니 온통 파란색으로 여행지가 전부 도시(urban) 일색이다. 그렇다면 도시의 종류를 조금 나누어 보자. 도시 중에는 각국의 수도인 서울, 워싱턴 같은 곳들도 있고, 그저 번화한 도시인 곳들도 있다. 이번에는 각국의 수도에 경계선(boder)을 주어 다른 도시와 구별해보도록 하자. 

     

우선, 각국의 수도인 여행지는 "main" 클래스(class)에 속하도록 다음과 같이 0039_4.html 파일을 작성한다. CSS를 적용할 파일도 변경할 것이므로 <link /> 요소의 href 속성 "0039_1.css"로 수정한다. 


<!DOCTYPE html>

    

<html>

<head>

 <title>여행지들(가나다순)</title>

 <link rel="stylesheet" type="text/css" href="0039_1.css" />

</head>

<body>

 <ul>

   <li class="rural">경주</li>

   <li class="urban">광주</li>

   <li class="rural">교토</li>

   <li class="urban">뉴욕</li>

   <li class="urban">뉴저지</li>

   <li class="urban main">도쿄</li>

   <li class="urban main">런던</li>

   <li class="urban">몬트리올</li>

   <li class="urban">부산</li>

   <li class="urban main">북경</li>

   <li class="urban">상해</li>

   <li class="urban main">서울</li>

   <li class="urban">시카고</li>

   <li class="urban">아테네</li>

   <li class="urban main">워싱턴</li>

   <li class="rural">오사카</li>

   <li class="urban main">파리</li>

   <li class="urban">홍콩</li>

 </ul>

</body>

</html>


그리고 다음과 같이 0039_1.css 파일을 작성하여 0039_4.html 파일과 같은 디렉터리에 저장한다

    

.urban color: blue; }

.rural { color: green; }

.main { border: 2px solid red; }


실행 결과는 다음과 같다.


 


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0039 클래스(class) 속성 사용해보기.apkg







0038 클래스(class) 속성


이제 클래스(class)를 다루어보자. 

    


1. HTML에서 클래스(class)


클래스(class)요소(element)들을 특정 클래스(class)로 묶는 속성(attribute)이다. 

    

HTML에서 클래스(class) 속성(attribute)은 주로 동일한 클래스에 속한 요소들에게 동일한 스타일을 적용하는 용도로 사용된다. 

     

HTML 요소(element)에 클래스(class)를 부여하는 형식은 다음과 같다. 

     

<요소명 class="클래스명1 클래스명2 ...">


실제 사용례는 다음과 같다.

      

<hr class="answer" />

<p class="explaination">내용(content)</p>

<h3 class="urban country">내용(content)</h3>

<li class="urban metro main">내용(content)</li>


클래스(class) 속성아이디(id) 속성처럼 모든 요소에 부가될 수 있는 전역 속성(global attribute)이므로 <p><li><h2> 요소 등 서로 다른 요소들이 동일한 클래스로 묶일 수 있다

     

그런데 이렇게 요소들을 클래스로 묶다 보면 하나의 요소가 여러 클래스에 속할 때가 있기 마련이다. 그런 경우 해당 요소클래스는 여러 개의 클래스명속성값으로 갖는다. 이런 경우에는 순서에 상관없이 클래스명공백으로 띄어서 구분해주기만 하면 된다. 

    


2. CSS에서 클래스(class)


CSS에서 클래스(class)에 따라서 요소를 선택하려면 요소클래스점(.)으로 이어 다음과 같은 형식으로 클래스 선택자를 만들면 된다. 

     

요소명.클래스명 or .클래스명


클래스(class)에 속한 요소 중에서 특정 요소만 선택할 경우에는 요소명.클래스명 형식으로 선택하고, 특정 클래스에 속한 요소들을 모두 선택할 경우에는 앞의 요소명을 생략하여 .클래스명 형식으로 작성하면 된다. 

     

실제 사용례는 다음과 같다.

     

p.urban : urban클래스 p요소

h2.rural : rural클래스 h2요소

.rural : rural클래스 모든 요소

.urban : urban클래스 모든 요소

li.rural : rural클래스 li요소

li.urban : urban클래스 li요소


클래스(class) 속성(attribute)아이디(id) 속성과 마찬가지로 대소문자를 가리므로 선택자를 작성할 때는 대소문자를 정확하게 기입해주어야 한다. 

    


3. 클래스(class)아이디(id)의 차이


아이디(id)클래스(class)는 모두 HTML 요소(element)들을 구분하고 분류하여 특정하는 용도로 사용되는 속성들이지만 두 가지 큰 차이점이 있다는 점을 다시 한번 상기하도록 하자. 

     

첫 번째아이디(id)요소 1개만 고유하게 특정하지만 클래스(class)는 여러 요소들을 묶는다는 것이다.


두 번째요소는 단 한 개의 아이디(id)만 가지지만 여러 개의 클래스(class)를 가질 수 있다는 점이다. 



Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0038 클래스(class) 속성.apkg





0037 HTML 요소의 아이디(id) 속성CSS아이디(id) 선택


앞서, 요소 선택자(element selector)를 이용하여 CSS 규칙을 요소에 적용시켜 보았다. 하지만 이러한 요소 선택자는 해당 요소들을 가리지 않고 일괄적으로 모두 선택하는 문제가 있다. 

    

다음과 같이 0037_1.html 파일을 작성하여 실행해보자.

     

<!DOCTYPE html>

   

<html>

<head>

 <title>아이디 속성 선택자</title>

 <style>

  p

   color: blue;

   border: 3px solid gray;

  }

 </style>

</head>

<body>

 <p>1번 블록</p>

 <p>2번 블록</p>

 <p>3번 블록</p>

 <p>4번 블록</p>

</body>

</html>


이것을 실행하면 다음과 같이 나타난다. 



요소 선택자<p> 요소를 선택하여 스타일을 적용했기 때문에, 4개의 <p> 요소 모두 동일한 스타일의 적용을 받는다.

    


하지만 우리는 동일한 요소들에게 각각 서로 다른 스타일을 적용하고 싶다. 어떻게 해야 하나?

    

이때, 각각의 요소를 고유하게 만들어주는 아이디(id) 속성을 이용하면 된다. 

     

아이디(id) 속성에 대해서는 0019 HyperText 링크를 제공하는 앵커(anchor)의 a요소 01 사용법 및 href 속성에서 <a> 요소를 이용하여 특정 아이디(id)를 가진 요소로 이동할 수 있다는 내용으로 다룬바 있다. 

    

아이디(id) 속성(attribute)HTML 요소에 고유한 아이디(id)를 부여하는 속성이다. 따라서 그 속성상 당연히 하나의 웹페이지에서 각각의 아이디(id)는 중복되지 말고 고유해야 한다. 아이디(id)가 하나의 웹페이지에서 중복되면 웹 표준 위반이다. 

   

이러한 아이디(id) 속성을 이용하여 요소(element)가 고유해지면 CSS는 이 고유한 요소(element)를 선택하여 꾸미거나 필요한 작업을 수행할 수 있게 된다.

    

CSS에서는 특정 아이디(id)의 요소를 선택하기 위해서는 해쉬(#) 문자를 아이디(id) 속성값 앞에 붙여 해당 아이디(id)를 가진 요소를 선택하는 선택자를 만들 수 있다.

     

이제 다음과 같이 수정해서 0037_2.html보자. 

    

<!DOCTYPE html>

    

<html>

<head>

 <title>아이디 속성 선택자</title>

 <style>

  #first

   color: red;

   border: 3px solid red;

  }

  #second

   color: green;

   border: 3px solid green;

  }

  #third

   color: blue;

   border: 3px solid blue;

  }

  #fourth

   color: black;

   border: 3px solid black;

  }

 </style>

</head>

<body>

 <p id="first">1번 블록</p>

 <p id="second">2번 블록</p>

 <p id="third">3번 블록</p>

 <p id="fourth">4번 블록</p>

</body>

</html>


처음 작성한 0037.html 파일과 달리 각각의 <p> 블록에 아이디(id) 속성들이 주어졌고, 이러한 아이디(id)를 가진 요소를 선택하기 위하여 CSS에서는 #first, #second, #third, #fourth로 각각의 아이디(id) 속성을 가진 요소들에게 개별적으로 스타일을 적용하고 있다.

     

실행해보면 다음과 같이 동일했던 <p> 블록들이 각자 서로 다른 <p> 블록들로 나타난다.



아이디(id) 속성은 모든 HTML 요소에 사용할 수 있는 전역속성(global attribute)이다. 아이디(id)의 속성값최소 1개의 문자가 있어야 하며 스페이스나 탭 등의 공백(whitespace)은 허용되지 않는다이 때, 아이디(id)의 속성값은 대소문자를 가리므로 선택자를 작성할 때 주의해야 한다. 


2019. 1. 2일 아이디(id) 속성값에 대하여 다음과 같은 내용을 추가함. 

HTML 5 이후로 아이디(id) 속성값은 은 상기와 같은 규칙으로 바뀌었다고 W3C 튜토리얼에서 확인했으나 실제 아이디(id)를 숫자로 시작하거나 하이픈, 밑줄, 콜론, 마침표가 아닌 특수 문자를 쓸 경우 아이디(id) 속성이 작동하지 않는 것을 확인하고 아래와 같은 HTML 4.01 기준이 여전히 작동하고 있는 것을 확인함

아이디(id)의 속성값 항상 문자(A-Z, a-z)로 시작해서 그 뒤로 어떤 숫자(0-9), 하이픈(-), 밑줄(_), 콜론(:), 마침표(.)들이 올 수 있고 공백은 안된다. 숫자로 시작하는 실수가 많다.

    


다음은 아이디(id)의 속성값이 잘못 기입된 사례이다. 

    

id="" 최소 1개의 문자

id="fir st"  공백

id="fir!st" ← 느낌표(!)

id="1st" ← 숫자로 시작

id="Jack Daniel" ←공백


아이디(id)와 비슷한 것으로 클래스(class)가 있다. 아이디(id)는 오직 하나의 고유한(unique) 요소를 식별하기 위하여 부여하는 속성이라면 클래스는 다양한 요소들을 묶어서 특정한 클래스(class)로 만들기 위한 속성이다. 클래스(class)에 대해서는 다음에 알아보도록 하자.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0037 HTML 요소의 아이디(id) 속성과 CSS의 아이디(id) 선택.apkg



2019/01/02 1:19 AM 아이디(id) 속성값 작성 규칙 수정 및 Ankilog 파일 수정



0025 HTML style 속성(attribute) 및 배경색 설정


스타일링이라 함은 폰트, 크기, 테두리, 색깔 등을 이용하여 예쁘게 꾸미는 것을 말하고 HTML 문서를 스타일링 할 때는 CSS(Cascading Style Sheet)라는 별도의 언어체계를 이용한다.

    

이 때,  HTML개별 요소(element) 하나를 CSS를 이용하여 꾸미고 싶을 때에는 style 속성을 사용하면 된다.

   

HTMLstyle 속성은 다음과 같은 구문으로 사용된다. 

    

<태그명 style="속성:속성값;">


위 구문에서 속성CSS에서 사용하는 속성(property)이고, 속성값CSS에서 사용하고 있는 속성값(value)이다. 즉, style 속성은 개별 요소에 CSS를 적용하기 위한 속성인 것이다. 

    

따라서 이 style 속성을 다루면서 익히게 될 속성(property)속성값(value)은 모두 CSS에서도 그대로 사용할 수 있다.

    

또, 당연히 style은 모든 요소에 적용할 수 있는 전역 속성(global attribute)이다.

    

추후에 CSS를 공부하면서 상세하게 다룰 내용이지만 참고적으로 간단히 언급하면 CSS를 적용하는 것은 아래와 같이 세 가지 방법이 있는데 그 중 마지막 방법이 이 style 요소를 사용하는 방법이다.

    

하나는 <head> 요소 내부에 중첩된 <style> 요소에 CSS를 작성하는 것이다. 

둘은 <link> 요소를 이용하여 외부에서 CSS 파일을 불러 읽는 것이다.

마지막은 개별 요소에 style 속성을 부가하여 CSS를 이용하는 것이다.


보통 첫 번째와 두 번째 방법으로 CSS를 사용하지만 이러한 방법은 일괄적으로 HTML 페이지의 스타일을 설정하기 때문에 이에 대한 예외적인 스타일이 적용되어야할 요소(element)들은 개별 요소에 style 속성을 이용하여 CSS를 부여하기도 한다(이는 CSS 상속과 적용 범위의 문제이므로 나중에 다시 보도록 하자.).

    

앞서 0017 이미지를 보여주는 img 요소 02 대체할 문구 및 크기 결정에서 <img> 요소의 크기를 style 속성으로 결정하는 예문을 아래와 같이 다루면서 최근 style 속성을 사용하여 이미지의 크기를 결정하는 이유를 CSS 스타일 시트에서 일괄적으로 이미지의 크기를 조작할 때 그 적용을 피하기 위해서라고 언급한 바 있는데 이것이 바로 위와 같은 이유이다.

    

<img src="sun.jpg" style="width:100px;height:100px" alt="떠오르는 태양" />


위의 예문에서 style 속성으로 CSS 속성인 widthheight를 이용하고 있고 속성값으로 픽셀수(px)를 이용하고 있다. 



배경색(Background Color)


HTML 요소의 배경색을 결정하는 CSS 속성은 background-color 속성이다. 요소의 배경색을 이용하여 앞서 공부한 블록 요소인라인 요소의 차이점을 다시 한번 살펴보자.

       

background-color 속성은 다음과 같이 사용한다.

     

<태그명 style="background-color:색상이름;">


색상이름red, blue, purple, yellow, white, black, powderblue 등 영문의 색상이름이 그대로 적용되고 더 디테일한 색상을 다룰 때에는 색상의 일련번호로 집어넣을 수도 있다.


다음과 같이  0025.html 파일을 만들어 실행해보자.


<!DOCTYPE html>

    

<html>

<head><title>배경색</title></head>

<body style="background-color:black;">

<h1 style="background-color:red;">h1 요소</h1>

<p style="background-color:white;"

  p요소<br />

 <strong style="background-color:yellow;">중요한 텍스트</strong><br />

 <em style="background-color:purple;">강조 텍스트</em><br />

  a 요소 <a href="https://deliciouslearning.tistory.com/" style="background-color:blue;">책 씹어먹는 즐거움</a>

</p>

</body>

</html>


<body> 요소에 중첩된 각각의 요소에 전부 배경색을 다르게 설정해보았다. 그리고 실행해보면 다음과 같이 나타난다. 



블록 요소인라인 요소에 따라서 배경색이 다르게 설정되어 있는 것을 알 수 있다. 블록 요소는 해당 행의 가로폭을 전부 차지하는 요소이므로 실제 내용이 얼마 안되더라도 해당 행의 전체에 배경색이 칠해진다. 반면, 인라인 요소는 배경색이 꼭 필요한 부분으로 한정되는 것을 알 수 있다. 

    

CSS에서 사용하고 있는 다양한 속성과 속성값을 이 자리에서 전부 살펴보는 것은 적합하지 않은 것 같다. 우선 배경색만 살펴보고. 또, 다른 요소들을 다루면서 관련된 스타일 속성은 그때그때 알아보도록 하자.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0025 HTML style 속성(attribute) 및 배경색 설정.apkg





0021 HyperText 링크를 제공하는 앵커(anchor)의 <a>요소 03 target 속성


HyperText 링크를 클릭하면 목적지 주소(destination address)로 지정된 페이지나 페이지 내의 요소를 열게 된다. 이 때, 어떤 식으로 새로운 페이지를 창(window)에 띄울지 결정하고 싶을 수 있다. 이러한 내용을 선택할 수 있는 것이 target 속성이다. 

    

즉, 링크된 문서를 어디에 열지 결정하는 속성이 target 이다.

   

target은 속성값으로 다음의 5가지를 가진다. 

    

_blank : 링크된 문서를 새로운 창이나 탭에 연다.

     

_self : 링크된 문서를 링크가 있는 현재 창의 현재 프레임에 연다. target 속성을 별도로 지정하지 않으면 기본으로 이 속성값으로 지정된다.

     

_parent : 링크된 문서를 상위(부모) 프레임에 연다.

     

_top : 링크된 문서를 현재의 전체 창에 연다.

    

framename : 지정된 이름의 프레임에 링크된 문서를 연다.


다음의 그림을 보면 target의 속성값의 역할이 조금 명확해진다. 



프레임이라는 것은 웹 페이지 안에 웹 페이지를 넣을 수 있는 틀이다. 나중에 이것에 대해서 자세히 다루는 것으로 하고 이번에는 간단하게만 다루도록 하자.

    

위의 그림은 전체 웹 페이지가 Frame 1, Frame 2, Frame 3의 3개의 프레임으로 나누어지고 각각의 프레임에 별도의 웹 페이지가 표시되어 있는 것이다. Frame 1Frame 2는 별도의 프레임이고 Frame 3Frame 2 안에 들어있는 하위(자식) 프레임이다. 

    

웹 페이지가 이와 같이 짜여져 있는 상황에서 Frame 3에 위치한 링크가 target 속성에 따라서 어떻게 작동하는지 하나하나 살펴보자.

    

#1링크를 클릭하면 target의 속성값이 "_blank"이므로 새로운 (TAB)이나 (window)에 링크된 문서가 열린다.

    

#2링크를 클릭하면 target의 속성값이 "_self"이므로 현재 링크가 위치한 프레임인 Frame 3에서 링크된 문서가 열린다. 

    

#3링크를 클릭하면 target의 속성값이 "_parent"이므로 현재 링크가 위치한 Frame 3의 상위(부모) 프레임인 Frame 2에서 링크된 문서가 열린다. 

    

#4링크를 클릭하면 target의 속성값이 "_top"이므로 링크된 문서가 가장 상위의 프레임인 현재 창이나 탭(TAB)의 전체 화면으로 열린다. 

     

#5링크를 클릭하면 target의 속성값이 "framename"이므로 링크된 문서가 지정된 프레임에서 열린다.


마지막으로 전역 속성(global attribute) title 속성과 달리 target 속성은 <a> 요소에서만 사용되는 속성이다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0021 a요소 03 target 속성.apkg





0020 HyperText 링크를 제공하는 앵커(anchor)의 <a>요소 02 title 추가하기


3. <a> 요소의 title 속성


title 속성은 요소(element)에 대한 추가적인 정보를 보여주기 위하여 사용하는 속성이다.

    

요소(element)title 속성을 부여하면 해당 요소 위에 마우스 포인터를 위치시킬 때 작은 툴팁(tooltip)으로 title 속성에 부여한 문구가 나타난다. 

    

툴팁(tooltip)말풍선이라고도 불리는 그래픽 사용자 인터페이스 중 하나이다. 마우스 포인터라 불리는 커서로 특정 항목을 클릭하지 않고 가리키기만 하면 조그마한 상자가 나타나 보충 설명을 보여준다. 

   

다음과 같이 <a> 요소에 title 속성을 부여해 보자. 

    

<a href="https://deliciouslearning.tistory.com/" title="Ankilog를 제공">책 씹어먹는 즐거움</a>


그러면 아래와 같이 마우스 포인터를 링크에 올렸을 때, 우리가 작성한 title 속성의 문구가 툴팁으로 나오는 것을 확인할 수 있다.

    


위 예제는 0020.html 파일이다.

     

title 속성은 <a> 요소에만 부여되는 속성이 아니라 다른 모든 요소들에도 부여될 수 있는 속성이다. 이러한 속성을 전역 속성(global attribute)이라고 한다. 

    

앞에서 배운 id 속성 lang 속성도 전역 속성(global attribute)이다.

    

title 속성은 위의 <a> 요소에서 사용된 것처럼 아래의 형식(syntax)으로 사용된다. 

    

<요소명(element) title="text">


title 속성은 툴팁으로 간단한 문구를 보여주기 때문에 속성값으로 텍스트 형식을 갖는다.

     

title 속성은 <head> 요소의 <title> 요소가 아니다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0020 a요소 02 title 추가하기.apkg






0019 HyperText 링크를 제공하는 앵커(anchor)의 <a> 요소 01 사용법 및 href 속성



1. <a> 요소의 기본적인 사용법


HTML월드와이드웹(www)에서 웹페이지를 부호화하고 HyperText 링크를 제공하는 언어이다. 이때, HyperText 링크를 제공하는 요소가 바로 앵커(anchor)를 의미하는 <a> 요소이다.

   

<a> 요소는 링크를 눌렀을 때 다른 페이지가 열려야 하므로 기본적으로 열어야할 목적지 주소와 링크로 제시될 내용이 포함되어 다음과 같은 형식으로 작성한다.

    

<a href="URL 또는 상대경로">내용(링크를 제시할 이미지 요소나 텍스트)</a>

    

<a> 요소의 내용(contents)은 이미지 요소나 텍스트 형식으로 링크가 어디로 연결될지 보여주는 라벨의 역할을 수행한다. 라벨은 브라우저에서 클릭할 수 있다는 것을 나타내기 위해 밑줄이 처진 상태로 보이고 그 위에 마우스 커서를 올리면 커서가 작은 손 모양으로 바뀐다.



2. href 속성


href 속성은 hypertext reference의 줄임말로 링크가 연결될 목적지 주소(destination address)<a> 요소에 부여하는 필수적인 속성이다. 웹 브라우저는 바로 이 href의 속성값을 읽어 목적지의 문서를 연결한다. <a> 요소에 href 속성이 없으면 웹 표준 위반이다.

   

다음의 HTML 문서를 작성해서 0019.html로 만들고  sun.jpg파일을 같은 디렉터리에 놓고 실행해보자. 

   

<!DOCTYPE html>

   

<html lang="ko">

 <head><title>0019 a요소의 href 속성</title></head>

 <body>

  <h2 id="first">a요소의 href 속성으로 다양한 링크 걸기</h1>

  <p>

   URL로 링크걸기 : 

    <a href="https://deliciouslearning.tistory.com/">책 씹어먹는 즐거움</a>

   <br /><br />

   이미지에 링크걸기(아래 사진)

   <br /><br />

    <a href="https://deliciouslearning.tistory.com/"><img src="sun.jpg" /></a>

   <br /><br />

   로컬 링크를 상대경로로 링크 :

    <a href="sun.jpg">일출사진</a>

   <br /><br />

   특정 id를 가진 요소로 이동:

    <a href="#first">id가 "first"인 요소로 이동</a>

   <br />

   빈 링크: <a href="#">빈 링크</a>

  </p>

 </body>

</html>


다음은 sun.jpg 파일이다. 




0019.html 파일은 웹 브라우저에 다음과 같이 나타난다. 

    



href 속성으로 제시할 수 있는 목적지의 형식은 URL, 상대경로, id 이동이 있는데 이를 위의 예제 웹페이지는 전부 집어넣어 보았다. 하나하나 살펴보자. 


URL로 링크걸기 : 책 씹어먹는 즐거움

   

이 부분에 해당하는 HTML<p> 요소 내부에 다음과 같이 작성된 부분이다.

    

URL로 링크걸기 : <a href="https://deliciouslearning.tistory.com/">책 씹어먹는 즐거움</a>


가장 흔히 볼 수 있는 URL로 링크 걸기이다. 외부 사이트에 링크를 만들 경우에는 URL을 이용하여 링크한다. URL에 대해서는 0015 URL 간략하게 이해하고 연습하기를 참조하길 바란다.


② 이미지에 링크걸기

   

그 다음은 이미지에 링크를 건 경우이다. 태양 사진이 있고 이를 클릭하면 본 블로그로 이동한다. 이는 <a> 요소 내부에 <img /> 요소를 아래와 같이 중첩시켜 만들었다(0019.html 파일과 sun.jpg 파일이 같은 디렉터리에 있어야 한다.).

    

이미지에 링크걸기(아래 사진)<br />

<a href="https://deliciouslearning.tistory.com/"><img src="sun.jpg" /></a>


로컬 링크상대경로로 링크

    

이 부분에 해당하는 HTML<p> 요소 내부에 다음과 같이 작성된 부분이다.

    

로컬 링크를 상대경로로 링크 : <a href="sun.jpg">일출사진</a>


상대경로에 대해서는 앞의 0016 이미지를 보여주는 img 요소 01 사용법 및 src 속성의 하단부에 정리된 src 속성에서 상대경로 작성법과 동일하다.

   

클릭하면 서버 내에 웹페이지 파일과 같은 디렉터리에 있는 sun.jpg 파일을 브라우저로 열게 된다. 이렇게 같은 사이트 내에서 서버 내부의 파일로 연결하는 링크를 로컬 링크(local links)라고 한다. 

    

로컬 링크의 경우에는 다음과 같은 이유에서 href 속성의 속성값으로 URL이 아닌 상대경로를 사용하도록 권장된다. 

     

html 소스가 상대적으로 짧아 가독성이 좋다

웹 서버를 옮기거나 URL이 변경되어도 디렉터리 구조를 그대로 유지하면 내부의 링크가 여전히 유효


④ 특정 id를 가진 요소로 이동

    

이 부분에 해당하는 HTML<p> 요소 내부에 다음과 같이 작성된 부분이다.

    

특정 id를 가진 요소로 이동: <a href="#first">id가 "first"인 요소로 이동</a>


이를 클릭하면 제목(<h2>요소)으로 되어 있는 “a요소의 href 속성으로 다양한 링크 걸기”로 이동한다. 이는 다음과 같이 제목의 요소(<h2>요소)아이디(id) 속성 "first"가 부여되어 있기 때문이다. 즉, href 속성값으로 "#first"가 부여되어 있으면 같은 페이지에 있는 요소 중에 아이디(id)"first"인 요소로 이동한다. 

   

<h2 id="first">a요소의 href 속성으로 다양한 링크 걸기</h1>


아이디(id) 속성은 원하는 요소(element)를 다른 요소와 구별되어 그 자체로 고유하게 만드는 속성이다. 똑같은 <h1> 요소라고 해도 아이디(id)를 통해서 다른 <h1> 요소와 구별되는 것이다. 나중에는 이 아이디(id) 속성을 이용하여 CSS로 특정 id의 요소만 스타일링 하거나, Javascript로 특정 id의 요소만 조작하는 등으로 응용할 수 있어 가장 많이 사용되는 속성(attribute) 중에 하나이다.

    

HTML 웹페이지의 요소에 필요한 아이디(id) 속성을 부여하고 이제 <a> 요소의 href 속성에 "#아이디" 형태의 문자열을 속성값으로 부여하면 같은 페이지에 있는 해당 아이디(id)를 가진 요소로 바로 이동할 수 있다. 

    

아이디(id)로 이동은 같은 페이지 내부의 이동에만 사용되는 것은 아니다. 앞서 배운 URL 뒤에 "#아이디" 형태의 문자열을 붙이거나, 상대경로의 뒤에 "#아이디" 형태의 문자열을 붙여서 다른 페이지의 해당 아이디(id)를 속성으로 가진 요소로 바로 이동할 수 있다. 가령, 다음과 같다.

    

https://www.ankilog.com/index.html#ankimanual

0019.html#first


아이디(id) 속성은 거의 대부분의 요소에 부여할 수 있고, 하나의 웹페이지에서 아이디(id)는 중복되지 말고 고유해야 한다. 아이디(id) 속성이 단일 웹 페이지에서 중복되어 있는 것은 웹 표준에 어긋난다. 만일 id 속성이 단일 웹페이지에서 중복되어 있으면 가장 먼저 나오는 요소로 이동한다.

    

아이디(id) 속성은 대소문자를 가리므로 외부에서 특정 아이디(id)를 대상으로 조작할 경우 대소문자를 가려 아이디(id)를 지칭해주어야 한다.

    

아이디(id) 속성의 속성값은 항상 문자(A-Z, a-z)로 시작해야 하고 그 뒤는 어떤 문자나, 숫자(0-9), 하이픈, 밑줄, 콜론, 마침표들이 올 수 있고 최소 1개 이상의 문자로 이루어져야 하며 공백은 없어야 한다. 특히, 아이디(id) 속성값을 숫자로 시작하는 실수가 많다.(W3C 튜토리얼에서는 이와 같은 속성값의 규칙을 HTML5 이전의 제약이고 현재는 숫자로 시작하는 id도 가능하다고 언급하고 있지만 현재도 이 규칙이 크롬과 파이어폭스에 규칙이 유효하게 작동하는 것을 확인함)  ← 2019년 1월 2일 수정함

    

⑤ 빈 링크

    

빈 링크는 <a> 요소에 하이퍼링크 기능을 제거하고 사용하는 경우에 사용한다. 웹 표준<a> 요소에 반드시 href 속성을 요구하기 때문에 href의 속성값에 "#"을 입력하여 웹 표준을 준수하는 빈 링크를 만든다.

    

<a href="#">빈 링크</a>


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0019 a요소 01 사용법 및 href 속성.apkg


2019/01/02 am 1:27 본문 및 Ankilog 파일에 id 속성값으로 올 수 있는 문자들 문구 수정




0017 이미지를 보여주는 <img /> 요소 02 대체할 문구 및 크기 결정


3. 대체할 문구를 설정하는 alt 속성


alt 속성은 이미지를 대체하는 문구(alternate text)를 부여하기 위한 속성이다. 만약, 어떠한 이유로든지 웹페이지에 이미지를 표시되지 않으면 이 문구가 대신 화면에 나타난다.

    

alt 속성은 다음과 같이 작성한다. (간단한 예제 파일: img요소alt속성test.html)

    

<img src="images/sun.jpg" alt="떠오르는 태양"/>


이미지로 아름답게 꾸민 웹페이지가 항상 예쁘게 보이는 것은 아니다. 특히, 이미지를 사용할 경우 웹페이지의 용량이 커지기 때문에 느린 인터넷 속도, 열악한 디바이스 등으로 인하여 웹페이지를 제대로 볼 수 없을 때가 있다. 특히 시각장애인의 경우 스크린 리더기로 읽어 웹페이지를 보지 않고 듣는데 이미지로 꾸며진 웹사이트는 이러한 스크린 리더기에 장애로 작용한다. 

   

이러한 문제점 때문에 웹페이지에 이미지가 나타나지 않거나, 혹은 스크린 리더기로 이미지를 읽기 위하여 HTML5부터는 <img /> 요소에 alt 속성을 필수적으로 부여하도록 되었다.

    

sun.jpg 파일을 불러오지 못할 경우 아래와 같이 alt 속성으로 부여한 대체 문구가 나타나는 것을 볼 수 있다.

   



4. 이미지 크기 조절


이미지를 웹페이지에 집어넣으려면 이미지 크기를 조절하는 것이 필수적이다. 어떤 사진은 너무 크고 어떤 그림은 너무 작을 수 있기 때문이다. 

    

일단은 전통적으로 <img /> 요소에 widthheight 속성을 다음과 같이 부여해 크기를 조절해왔다.

     

<img src="sun.jpg" width="100" height="100" alt="떠오르는 태양"/>


이 때 widthheight 속성의 속성값은 항상 픽셀(px)의 수이다.

    

이미지의 크기를 특정하지 않으면 웹페이지 레이아웃이 제멋대로이고 이미지가 웹페이지에 로딩되면서 웹페이지가 요동치는 현상이 발생하게 되므로 되도록이면 항상 크기를 특정하도록 하자.

    

뒤에 언급하겠지만 브라우저는 HTML로 작성된 페이지를 먼저 보여주고 이미지는 그 크기에 따른 공간만 남겨놓고 뒤에 따로 이미지를 로딩하여 이미지를 보여주게 된다. 즉, 페이지의 레이아웃을 만들었다가 이미지를 받은 후 이를 다시 조정하는 것이다. 

    

따라서 크기가 결정된 이미지를 웹페이지에 집어넣으면, 브라우저는 이에 맞추어 페이지 레이아웃을 만들 수 있게 된다. 하지만 HTML에서 이미지 크기가 결정되지 않으면 브라우저는 페이지에서 이미지를 보여주기 전에 임의로 이미지의 크기를 결정하게 되고 실제 이미지가 페이지에 로딩되면서 그 크기의 변화로 웹페이지가 출렁거리게 되는 것이다.

    

최근에는 CSS 스타일을 적용하는 sytle 속성을 이용하여 다음과 같이 이미지의 크기를 조절할 수 있다.

    

<img src="sun.jpg" style="width:100px;height:100px" alt="떠오르는 태양"/>


최근에 <img /> 요소에 style 속성을 이용하여 이미지의 크기를 결정하는 까닭은 각각의 <img /> 요소에 style 속성으로 이미지의 크기를 규정해놓으면 추후에 배울 CSS의 스타일 시트에서 일괄적으로 이미지의 크기를 조작할 때 그 적용을 받지 않을 수 있기 때문이다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0017 이미지를 보여주는 img 요소 02.apkg





0016 이미지를 보여주는 <img /> 요소 01


1. <img /> 요소 사용법

    

HTML 페이지에 사진이나 그림 등의 이미지를 잘 사용하면 세련된 페이지를 만들 수 있다. 이런 경우 이미지를 집어넣기 위해서 사용하는 요소<img /> 요소다.

    

<img /> 요소는 이미지를 정의하는 빈요소로 보통 다음과 같은 형식으로 작성한다.

    

<img src="URL 또는 상대경로" width="픽셀수" height="픽셀수" alt="대체할 문구" />


<img /> 요소에서는 src, width, height, alt4가지 속성을 잘 알아두어야 한다. 



2. <img /> 요소의 src 속성


<img /> 요소는 내용(content)이 없이 이미지를 보여주는 것이므로 속성(attribute)을 이용하여 해당 이미지를 불러와야 한다. 이 때 필요한 것이 src 속성이다. 

    

src 속성은 이미지 파일의 위치를 명시한다. 파일의 위치는 상대적인 파일의 위치뿐만 아니라, URL을 넣을 수도 있다. 

    

사용하는 URL에 대해서는 0015 URL 간략하게 이해하고 연습하기 포스팅에서 간단하게 다루었으니 참조하기 바란다. 

    

아래는 src 속성에 속성값을 URL로 넣은 경우다.

    

<img src="http://www.ankilog.com/images/sun.jpg" />


여기서 주의할 점은 URL의 마지막은 파일명이 되고, 웹페이지의 디폴트 파일처럼 디폴트 이미지라는 것이 설정되지는 않기 때문에 파일명까지 정확하게 써야 한다는 점이다. 

    

웹에서 원하는 이미지를 보았을 때, 보통 아래와 같이 마우스 우클릭으로 이미지 주소 복사를 통해 해당 URL을 얻을 수 있다.




src의 속성값으로 URL말고 상대적인 파일 위치를 넣을 수 있다. 즉, 서버 내의 특정 디렉터리에 있는 파일을 불러오는 로컬 링크(link)의 경우 웹페이지 파일이 속한 디렉터리를 기준으로 원하는 이미지 파일의 위치에 도달하는 경로를 명시할 수 있는데 이를 상대경로(relative path)라고 말한다.

     

가령, 불러오고 싶은 sun.jpg 라는 이미지 파일이 웹 페이지 파일과 동일한 디렉터리에 있으면 아래와 같이 속성값에 파일의 이름을 그대로 기입하면 된다.

    

<img src="sun.jpg" />


sun.jpg 이미지 파일이 웹 페이지가 있는 디렉터리의 하위 디렉터리(가령, images 디렉터리)에 있을 경우 해당 디렉터리의 이름 바로 뒤에 슬래쉬(/)를 붙여 이어서 경로를 작성한다. 이건 운영체제와 상관없이 슬래쉬(/)이다. 그리고 하위 디렉터리가 있는 만큼 얼마든지 슬래쉬로 이어서 하위로 내려갈 수 있다.

     

<img src="images/sun.jpg" />

<img src="images/category/sun.jpg" />


sun.jpg 이미지 파일이 웹 페이지가 있는 디렉터리 보다 상위에 있다면 마침표 2(..)로 나타내면 된다. 이는 최상위 디렉터리인 루트까지 이어질 수 있다.

     

<img src="../sun.jpg" />

<img src="../../../../sun.jpg" />


사례를 한 번 살펴보자다음은 서버에 있는 웹사이트 관련 파일들의 디렉터리 구조다. 



각각의 웹페이지 파일의 <img /> 요소에서 src 속성의 속성값으로 sun.jpg 파일에 도달하는 상대경로를 기입한 경우다.

   

main 디렉터리의 index.html

<img src="images/sun.jpg" />

웹페이지 파일이 있는 디렉터리의 하위에 있는 images 파일로 이동하여 sun.jpg 파일을 찾음

   

about 디렉터리의 map.html

<img src="../images/sun.jpg" />

웹페이지 파일이 있는 디렉터리에서 상위 디렉터리로 이동한 후 다시 그 상위 디렉터리의 하위에 있는 images 파일로 이동하여 sun.jpg 파일을 찾음

   

etc 디렉터리의 etc.html

<img src="../../images/sun.jpg" />

웹페이지 파일이 있는 디렉터리에서 상위 디렉터리로 두 번 이동한 후 그 마지막 상위 디렉터리의 하위에 있는 images 파일로 이동하여 sun.jpg 파일을 찾음

   

images 디렉터리의 picture.html

<img src="sun.jpg" />

웹페이지 파일과 sun.jpg 파일이 같은 디렉터리에 있으므로 바로 이름으로 기입


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0016 이미지를 보여주는 img 요소 01.apkg





0010 속성(attribute)과 속성 작성방법


속성을 일일이 살펴볼 단계는 아니지만 일단 속성이라는 것이 있고 그것을 어떻게 작성하는지는 알아두어야 추후 속성이 나올 때 당황하지 않을 것 같으므로 미리 정리해두자.

    

다음은 앞에서 배운 <html> 요소에서 속성을 사용한 경우다.

     

<html lang="ko">내용</html>


위의 <html> 요소에서 lang속성명이고 ko는 한국어를 의미하는 속성값이다. <html> 요소에 lang 속성을 부여하여 이 문서가 한국어로 작성된 HTML 문서라는 것을 검색엔진에게 드러내고 있다.

      

우선, 속성(attribute)이란 HTML 요소(element)에 추가 정보를 부여하는 것으로 W3C 재단에서 표준으로 정의해 놓은 것을 사용한다. 개발자가 임의로 속성을 만들지 않는다.

      

속성을 작성하는 방법은 다음과 같다. 

    

1) 속성들은 반드시 시작태그에 명시한다.

아래와 같이 종료태그에 속성을 명시하는 것은 잘못된 사용례이다.

<html></html lang="ko">

    

2) 속성들은 보통 속성명="속성값" 형태로 다음과 같이 사용된다.

lang="ko"

title="header"

src="test.png"

속성명 다음에 공백없이 등호(=)가 오고 그 다음에 공백없이 속성값이 오는 것에 주의해야 한다.

속성명은 대소문자와 상관없지만 소문자(lowercase)로 쓰는 것을 권장한다.

※ 속성값은 큰 따옴표로 묶도록 하자. (큰 따옴표가 없어도 되지만 오류가 발생하는 경우가 많아 사용하는 것을 권장한다.)

    

3) 하나의 요소가 여러 개의 속성을 가질 수 있다. 속성과 속성 사이는 공백으로 구분한다. 

여러 개의 속성은 원하는 순서로 임의로 배치할 수 있다.

<태그명 속성명1="속성값1" 속성명2="속성값2" 속성명3="속성값3">내용(content)</태그명>


속성이 기입된 다음 사례들을 살펴보자.

    

<html> </html lang="ko">

→ 속성은 시작태그에 작성

    

<html lang=ko>내용</html>

→ 속성값은 큰 따옴표로 묶는 것을 권장함("ko")

    

<html LANG="ko">내용</html>

→ 속성명은 소문자(lowercase)를 권장함(lang)

    

<html lang ="ko">내용</html>

→ 속성명과 등호(=) 사이에 공백이 없어야 함

    

<태그명>내용</태그명 속성명="속성값"

→ 속성은 시작태그에 작성

    

<html lang= "ko">내용</html>

→ 등호(=)와 속성값 사이에 공백이 없어야 함

    

<태그명 속성명1="속성값1"속성명2="속성값2">내용</태그명>

→ 속성들 간은 공백으로 구분되어야 함

    

<html lang = "ko">내용</html>

→ lang과 등호(=) 사이의 공백과 등호(=)와 속성값 사이의 공백이 없어야 함


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0010 속성(attribute)과 속성 작성방법.apkg






+ Recent posts