html 5) Study

이제 웹 코딩을 배우기 위한 긴 여정을 시작합니다..

Web 표준html로 웹사이트 틀을 만들고, Css로 꾸며주고, Javascript로 동작시키는데.. 이것들은 각각 분리하여 작성되어야 나중에라도, 누구라도,, 알아보기 쉽고 유지 관리에도 도움이 된다!

우선.. 이 Web 코딩 강좌는 html 5Css 3, Bootstrap 5에 의거하여(추가적으로, 약간의 자바스크립트 코드도 가미하고, 외부 플러그인 라이브러리들도 좀 써서) 작성되었음을 알리며 문을 엽니다 - 곧, 이 웹사이트의 모든 모양과 움직임, 다양한 효과 등은 다 그 자체로 이 강좌에 나오는 내용들을 바탕으로 해서 작성된 것입니다!

Web Codding 입문

아래는, html 코딩 첫 입문자를 위한 기초 가이드입니다만, html/Css를 본격적으로 배워보고자 한다면; 문서를 찬찬히 한번 살펴보시길 권합니다..

실습용 웹사이트 폴더 만들기
먼저, 실습을 위한 가칭 my-root 폴더를 만들고, 이 폴더의 루트에서 웹사이트 진입점이 되는 index.html 파일을 작성하고, 여타 소스 파일들이 들어갈 폴더들을 만들어 웹사이트 구조를 생성한다:
[ 실습용 Web사이트 폴더 구조 ]
                                        
                                            my-root ← 내 웹사이트(예컨대, www.sosohan.xyz) 루트 폴더
                                                index.html ← 웹사이트 진입 파일은 항상 루트에 위치해야 한다!
                                                favicon.ico ← 탭 및 제목표시줄 아이콘
                                                home-log.svg ← 루트에 위치한 다른 파일
                                                ..

                                                /css ← 루트 폴더 아래 css 파일 보관용 폴더
                                                /js ← 루트 폴더 아래 javascript 파일 보관용 폴더
                                                /images/my-image.png ← 루트 폴더 아래 이미지 소스 보관용 폴더와 그 안에 있는 파일
                                                /my-ex/sample/read.txt ← 루트 폴더 아래 ./my-ex/sample 폴더 안에 있는 read.txt 파일
                                                ..
                                        
                                    

폴더 및 파일의 이름은 공백이 없는(웹브라우저와 웹서버, 그리고 프로그래밍 언어들은 공백을 각자 서로 다른 방식으로 다룬다!) 영문 소문자로 작성하며(웹서버는 대부분 영문 대/소문자를 구분한다!), 연결된 단어로 이름을 지을 때는 (밑줄보다는)하이픈을 사용하는 것이 좋다 예컨대, 구글 검색엔진은 하이픈은 단어 구분자로 취급하지만, 밑줄은 단어 구분자로 취급하지 않는다!


✓   위와 같은 웹사이트 폴더 구조에서, 현재 문서를 기준으로 하는 상대경로로 파일에 접근하려면 다음과 같이 할 수 있다:

  • index.html에서 같은 폴더 내 home-log.svg에 접근하기: home-log.svg
  • index.html에서 images 폴더에 위치한 my-image.png 참조하기: images/my-image.png ./images/my-image.png로 해도 같다 - ./는 현재 폴더를 가리킨다!
  • my-ex 폴더에 있는 ex.html에서 루트 폴더에 있는 home-log.svg 참조하기: ../home-log.svg 폴더 구조상, 한 단계 위에 있는 home-log.svg 파일(두 단계 위라면; ../../home-log.svg)
  • my-ex 폴더에 있는 ex.html에서 images 폴더에 있는 my-image.png 참조하기: ../images/my-image.png 폴더 구조상, 한 단계 위로 올라가고, 거기서 다시 아래 images 폴더에 있는 my-image.png 파일

URL 절대경로로, 곧 http://www.sosohan.xyz 식으로 위와 같은 구조의 웹사이트에 직접 접근할 수 있는데, 이는 http://www.sosohan.xyz/index.html과 같다: 예컨대, index.html 파일을 포함한 위 웹사이트 구성 폴더 및 파일들이 웹서버에 업로드되면; 이는 웹서버의 루트(호스팅 업체에 따라 다르지만, 보통 www 이나 html, home 등의 이름이 붙어있다) 아래에 자리잡게 되고, 웹사이트의 도메인이 http://www.sosohan.xyz라면; 웹서버는 URL에서 진입 페이지를 불러오기 위해 루트에서 index.html 파일을 찾게된다 단, http://www.sosohan.xyz/my-ex/ex.html와 같이 명시하여 곧바로 하위 폴더 내 특정 문서로 연결해줄 수도 있다!


웹 코딩을 시작하기 위해서; 우선, 를 다운로드하여 설치하시길 권합니다. 다음, 웹에서의 파일 관리를 위해서는; 웹에 자신이 작업한 결과물을 저장하고 어떤 컴퓨터에서든 사용가능하게 해주는 파일 저장 시스템인 도 활용할 수 있습니다 만약 그 폴더가 웹사이트 파일을 포함한다면, 자동적으로 웹사이트로써 제공됩니다!


본격적인 학습을 시작하기 전에, MDN에 있는 을 찬찬히 한번 읽어보시길 권합니다 - 웹브라우저로 웹페이지를 거닐 때 그 이면에서 무슨 일이 일어나는지에 관해 간결히 설명해주고 있습니다..

웹문서의 기본구조
htmlhtml 태그 요소들로 웹문서의 구조를 의미론적으로 정의하는 마크업 언어 로서, html 요소 Element태그(및 속성 Attribute), 그 안의 내용 Contents 로 구성되는데, 요소 안에 요소를 중첩할 수도 있다:
[ html 요소의 구조 ]
                                        
                                            
                                        
                                    

위에서 p 요소여는 태그와 닫는 태그, 그 사이에 있는 컨텐츠 (내부에 중첩된 또 다른 요소들도 포함하는)전부 이다!

html 요소의 속성(속성명= "값")은 해당 요소의 동작이나 기능을 정의하는데, html 요소에는 해당 html 태그 자체가 지닌 기본 속성들 외에도, Css 스타일시트를 적용하기 위한 Css 속성(class= "속성명") 및 ID 속성(id= "아이디명")도 가질 수 있다:

이곳은 제 소소한 이야기 웹사이트입니다

                                    
                                        
                                    
                                

참고로, 단지 참/거짓 상태만을 나타내는 active, disabled 등의 속성들도 있다: <input type="text" disabled>

html 요소의 대부분은 문서를 렌더링하여 해당 요소의 기능을 수행함과 함께, 동시에 태그 내부 컨텐츠를 화면에 표시하는데 쓰이지만, 이미지()나 양식 컨트롤() 등 (컨텐츠를 포함할 수 없고, 단지)객체로 바꿔주기만 하는 '빈' 요소들도 있다:
                                    
                                        
                                    
                                

한편, 객체로 변환되지도 않으면서 닫는 태그가 없는(따라서 내부 컨텐츠도 갖지 않는 '빈' 요소들도 있는데, 이러한 '빈' 요소들에는 <br>(줄바꿈)이나 <hr>(수평선) 같이 컨텐츠 자체가 필요없는 태그들도 있고, 또는 <link src="URL">와 같이 속성을 통해 요소에 대한 정보를 제공해야만 하는 태그들도 있다!

기본적으로 단락은 <p> 요소로 둘러싸며, 제목은 <h#>(#1 ~ 6) 요소로 넣어주게 된다. <h1>은 페이지 전체를 대표하는 제목이며(따라서, 가급적이면 페이지 당 하나만 사용하는 것이 좋다!), 나머지는 페이지 계층구조에 따라 그 밑으로 배치된다

는, html 문서의 전형적인 모습인데, 여기서는 <html>의 전체 구조와 함께 <head> 부분 위주로 살펴봅니다

페이스북 같은 소셜 미디어에서 특정 웹사이트로 연결하는 링크를 게시하면 이미지, 사이트 제목, 사이트 설명이 포함된 카드가 표시되는데, 이 카드 전체가 바로 제공한 URL로 연결되는 하이퍼링크이다

소셜 미디어 사이트는 기본적으로 웹문서에서 페이지 제목과 설명을 올바르게 가져오며, 검색엔진과 동일한 정보를 표시해준다. 덧붙여서, Open Graph Meta Data를 이용하면 소셜 미디어에서 내 웹사이트로 연결되는 링크의 모양을 자신이 원하는 방식대로 표시해줄 수 있다!


에서는 Open Graph Meta Data 설정에 관한 표준 규정들을 정의하고 있는데, 트위터는 또 그에 맞는 방식으로 메타 데이터를 설정해주어야 하며(), 다른 소셜 미디어들 또한 트위터와 같은 독자적인 자체 규정을 갖고 있다!

Visual Studio Code

웹 코딩을 위해서는 가장 먼저 코드를 작성할 에디터가 준비되어야 하는데, MS-Windows 운영체제에서라면; 를 권합니다

Visual StudioCode 사용하기
1. Visual StudioCode를 다운로드하여 설치하고, 설치가 끝나면 프로그램을 실행합니다..

* 비쥬얼 스튜디오코드의 메뉴에서 [파일-새파일] 하고서는(이어서, 아무 생각 말고 그냥 Enter키 누르세요), Untitled-1 이라는 이름으로 생성된 새 문서에서 [파일-다른 이름으로 저장]한 뒤, 자신의 작업용 폴더를 선택하여 (가칭)start.html 이란 이름으로 저장해줍니다


** 이어서, 비쥬얼 스튜디오코드에서 방금 만들어진 Start.html 파일을 열어(이미 열려 있을겁니다만) html:5 , 이어서 <title> .. </title> 태그 안의 .. 부분에 원하는 문서 제목을 적어줍니다 여기서 기호는 Tab, 또는 Enter 키를 뜻함 - 이하 (동)

                                                
                                                    
                                                
                                            

<title> 태그 안에 적어준 문서 제목 은 웹브라우저 제목표시줄 및 북마크의 이름이 되며, 검색엔진에서도 가장 먼저 고려된다!


비쥬얼 스튜디오코드의 [확장] 아이콘을 클릭한 뒤 (필요하다면;)Korean Language Pack.. 으로 검색하여 한글 언어팩을 설치하고, [탐색기] 아이콘을 클릭하여 (코딩 연습을 위해 자신이 미리 만들어둔 연습용)폴더를 선택합니다([파일-작업 영역에 폴더 추가]). 다음, [파일-기본 설정-테마-색 테마](코딩 작업영역 색상설정)와 [파일-기본 설정-설정]에서 (글자 크기, 탭 간격 등..)자신에게 필요한 부분들을 새로 설정해줍니다 나머지 설정 옵션들은 비쥬얼 스튜디오코드의 [도움말-설명서]를 참조하십시오 ㅡㅡ;

2. 위에서 살펴본 html 문서의 기본구조, 그리고 바로 밑에서 만날 Bootstrap 5) 시작템플릿시맨틱웹 문서구조를 기반으로 하여 그때, 그때.. 하나, 하나.. 직접 손으로 코딩하면서! 결과를 확인하십시오 - 정 귀차니즘이 발동될 땐, 그냥 카피하여 쓰셔도 무방합니다만,, 권장 사항은 전혀 아닙니다(ㅎ~)

✓   위 문서들에는 웹문서 작성 시 기준이 되는 중요한 지침들이 들어 있습니다. 이 시작 페이지들을 자신의 학습용 기반 문서로 삼아 코드를 넣어 실행한 뒤 내용들 찬찬히 잘 살펴보시고, 항시 거기 적힌 원칙들을 염두에 두고 코딩하시기를 권합니다 - 그래야 나중에 코드 읽고 분석하기 편해집니다..


* 일단, 아래처럼 코딩해보세요 - 이는 가장 기본적인 에밋 코딩법인데, 나중에 더 배울겁니다..


a

(* 다음줄: 다시..) a*3 , (* 또 다음줄: 또 다시..) a*5


! (수업 중에 딴 짓 안하고 시키는대로만 했다면; 분명히!)아래 코드와 같은 모습이 되었을겁니다? 아니라면; 계속 연습해보세요 ㅡㅡ;

(! 이런 모습이 되었나요?)

                                                
                                                    
                                                
                                            

** 제대로 되었다면; 이제 커서를 아래 코드에 표시된 위치에 놓으십시오 그 전에, 먼저 코드 밑에 붙은 설명부터 읽어보십시오..

                                    
                                        
                                    
                                

비쥬얼스튜디오코드에서 입력 시 다중 커서 기능을 사용하려면; 먼저, <선택영역-다중 커서에 Ctrl+클릭 사용><선택영역-다중 커서를 위해 Alt+클릭으로 전환> 메뉴를 설정해주십시오 - (앞으로 계속 써먹어야하는 넘이니)메뉴간 전환하면서 <Alt+클릭><Ctrl+클릭>의 작동 방식을 스스로 확인하면서 애써 익히도록 하십시오..

*** 이어서, 맨 앞 <a>의 입력 커서 위치에서 아래로 쭈~욱 <Alt+드래그>로 일렬 선택하여 내용 입력한 뒤.. 해보세요. 다시, 필요한 지점마다 각각 <Ctrl+클릭>하여 복수 선택하고서 내용 입력한 뒤.. 하여 직접 결과를 확인해보세요 - 선택한 뒤 화살표 키 또한 사용해보세요


(! 아래와 같은 결과를 만들 수 있을 때까지 계속 연습하세요 ㅡㅡ;)

(! 이런 모습이 되었나요?)

                                                
                                                    
                                                
                                            

이것은 세로로 일렬 동시 입력원하는 지점들 동시 입력 실습인데, (Emmet Codding, Lorem ipsum과 함께)이거 알아두면 코딩 시의 쌩! 'Nogada'(재팬 제품 불매 중이라서 영어로 ㅎ)가 확 줄어듭니다 ^^

마크업의 기본 지침
아래는, html 코딩 시 표준으로 삼을만한 기본 지침들입니다. 본인에게 편한 것이 우선이지만, 생판 모르는 남이 와서 코드를 읽어볼 때도 혼잡하지 않도록 작성하시길 권합니다 - 머, 강제는 아닙니다 ^^
✓   html 문서 내에서 얼마나 많은 연속된 공백(및 줄바꿈)을 사용하든 웹브라우저는 코드를 렌더링할 때 단일 공백으로 줄여줍니다. 그럼에도 왜 많은 공백(및 줄바꿈)을 사용할까요? 답은, 그저 코드의 가독성을 위한 것일 뿐입니다 ㅡㅡ;

이곳은 제 웹사이트입니다: 자주 들러주세요.. 소소한 이야기

                                    
                                        
                                    
                                

모든 태그는 소문자로 작성하는 습관을 들이는 것이 좋고, 속성 값은 반드시 따옴표(작은 따옴표 또는 큰 따옴표)로 묶어주어야 한다!

✓   선택적 닫기 태그는 생략하지 않는다: <li> .. </li> 원칙적으로는, <li> 태그 뒤에 닫는 태그 </li>를 넣든 말든 상관없습니다만, (li 내부 코드가 아주 길어지는 경우도 많아)넣어주는게 (제 견해로는)코드 작성 및 읽기에 더 편합니다..
                                    
                                        
                                    
                                

중첩된 요소는 탭으로 들여쓰기한다: 2칸 소프트 탭을 쓰면 모든 환경에서 코드가 동일하게 렌더링되는 것이 보장된다 참고로, 저는 4칸이 코드 보기에 편해서 4칸 탭을 씁니다만..

✓   닫기 태그가 필요없는 요소는 맨 끝에   /> 식으로 (앞의 공백과 함께!)슬래시를 넣어주기도 하고 생략하기도 합니다만.. 머, 편한대로 하시면 됩니다.. 다만, 일부 템플릿 엔진에서는 슬래시를 요구하는 경우도 있다고 하니, 귀찮더라도 포함시켜주는 것이 나을 수도 있습니다..
                                    
                                        
                                    
                                

맨 끝의 /> 앞은 예상밖의 에러를 막기 위해 반드시 공백을 주어야 한다!

✓   가능하면; 가장 적은 복잡성으로 최소한의 마크업을 사용하고, 불필요한 부모 요소는 피하도록 한다:
                                    
                                        
                                    
                                

Semantic Web

에서 랜드마크로 지정된 시맨틱 태그웹 페이지의 구조를 안내하는 탐색 지점 역할 을 한다. 곧, 랜드마크는 검색엔진에 웹 페이지의 정확한 구조를 알려주며, 또한 스크린리더기가 컨텐츠의 중요한 섹션을 올바르게 찾아갈 수 있도록 안내한다!

랜드마크 시맨틱 태그들
1. <header>에는 사이트 제목과 로고(및 검색창), 사이트 소개글, 내비게이션 메뉴바 등이 배치된다:

Web Codding

[ header 영역: h1과 nav ]
                                        
                                            
                                        
                                    

<header>가 body의 최상위 수준에 위치하면 랜드마크 역할이지만, <main>, <section>이나 <article> 안에서 사용되면 해당 섹션의 제목으로만 식별되며 랜드마크는 아니다! <nav> 또한 최상위 <header>에서 사용되면 사이트의 기본 내비게이션 역할을 하지만, <section>이나 <article> 안에서 사용되면; 해당 섹션의 내부 탐색 전용이다!

2. 웹 페이지 바닥글인 <footer>에는 주로 연락처 정보, 개인정보 보호 및 쿠키 정책, 저작권 고지 등 모든 페이지에 표시할 사이트 바닥글 정보가 들어간다:

Copyright © 2023 Kjc ™ inc.

주소: 경주시 남산 삼릉
[ footer 영역: 웹 페이지 바닥글 ]
                                        
                                            
                                        
                                    

<footer> 또한 body의 최상위 수준에 위치하면 랜드마크 역할이지만, <main>, <section>이나 <article> 안에서 사용되면; 마찬가지로 해당 섹션의 바닥글로만 식별되며 랜드마크는 아니다!

3. 랜드마크 시맨틱 태그들로 작성하는 웹 페이지 전체 레이아웃은 문서의 기본 컨텐츠를 담은 <main>(및 <aside>) 등과 함께 대략 다음과 같은 구조로 구축된다:
[ 웹 페이지 전체 구조 ]
                                        
                                            
                                        
                                    

<h#> 제목 태그는 (위 코드에서 보듯이) 사이트 전체의 계층구조에 맞추어 적절한 위치에 배치해주어야 한다!


<section>은 문서의 일반적인 독립형 영역들을 포함하는 데 사용되는데, 여기에는 반드시 제목(<h2>)이 있어야 하며 예외는 거의 없어야 한다! 이 요소는 단지 관련있는 컨텐츠들을 (스타일 설정 등을 위하여)하나로 묶기 위한 것이지 (액세스 가능한 이름이 없는 한)랜드마크는 아니다!

Role 속성
1. role 속성을 쓰면 html 태그에 최소한의 의미 체계를 부여하고, 문서의 맥락에서 해당 요소가 갖는 역할을 설명해줄 수 있다. 이는 스크린리더기 등의 보조 기술, 그리고 경우에 따라서는 검색엔진에도 중요하다. 곧, role 속성이 부여하는 역할을 통해 스크린 리더기 등은 사용자가 원하는 컨텐츠에 빠르게 액세스할 수 있으며, 이를 통해 스크린리더 사용자에게 대화형 요소와 상호작용하는 정확한 방법을 제공할 수 있게된다: <main role= "main"> .. </main>
2. 나아가, role 속성을 사용하면 태그가 암시하는 것과 다른 역할을 비롯하여 의미가 없는 모든 요소에 의미론적 역할을 부여할 수도 있다. 예컨대, <button> 태그에는 버튼이라는 기본적인 역할이 있는데, 어떤 요소에든 role= "button" 속성을 부여하면; 그 요소를 (실제로 버튼의 기능을 수행하지는 않지만, 의미론적 차원에서)버튼으로 변환할 수 있다: 클릭해보세요.. 실제 버튼의 기능은 못하고, 단지 버튼의 모양새만 흉내내고 있을 뿐이다!
                                    
                                        
                                    
                                

role= "button"은 스크린 리더 사용자에게 (버튼이 아닌)요소가 버튼처럼 동작해야 한다고 지시한다. 하지만, 애초에 버튼에 <button> 요소를 사용한다면; (브라우저가 버튼과 관련된 모양 및 기능을 기본 제공할 것이므로)role 속성은 불필요하다!


이처럼 role 속성을 사용하여 모든 요소에 의미를 부여할 수는 있지만, 그보다는 그 역할과 관련하여 실제적 기능이 있는 요소를 우선적으로 고려해야 한다: 위와는 달리, 여기서는 실제로 버튼의 기능을 갖고 버튼으로 작동한다!

                                    
                                        <button class="border" onclick="alert('별안간 버튼이 눌려 깜짝 놀람!')">클릭해보세요..</button>
                                    
                                
aria- 속성
1. aria- 속성은 주로 태그의 현 상태를 나타내거나, 태그의 의미를 설명하기 위해서 사용되는데, 이 WAI-ARIA 상태 및 속성은 접근성 트리만을 수정하여 스크린리더기 등의 보조기술이 사용자에게 컨텐츠를 제공하는 방법을 수정할 뿐, 요소의 기능이나 동작에 대해서는 아무것도 변경하지 않는다!
                                    
                                        
                                    
                                

aria-label 속성은 오로지 (스크린리더기 등에)'보이도록'하기 위한 보조적 기술일뿐, 남용하는 것은 좋지 않다! 예컨대, 추가적인 지침 또는 명확한 사용자 경험을 제공하기 위해 aria-label 속성이 아닌 aria-describedbyaria-description 속성과 함께 표시 가능한 텍스트를 사용할 수가 있다 웹코딩 시에는 가급적 사용자 인터페이스를 보다 직관적으로 만드는 것이 우선시되어야 하며, 명확한 지침이 필요하다면; 모두에게 제공하도록 하는 것이 좋다!

2. aria-labelledby 속성은 상호작용되는 요소에 레이블된 문자열 값을 정의한다 - 요소의 기본 접근자 이름이 없는 경우, 또는 그 컨텐츠를 명확하게 설명하지 못한 경우, 그리고 해당 요소에게 의미를 주기 위한 객체와 연관된 DOM 안에 보이는 컨텐츠가 없는 경우 등.. 필요한 경우 aria-labelledby 속성을 써서 액세스 가능한 이름을 제공해주면 랜드마크 역할을 부여할 수 있다:
                                    
                                        
                                    
                                

기본적으로, 버튼의 접근자 이름은 <button>의 여는 태그와 닫는 태그 사이의 컨텐츠이고, <img> 요소의 접근자 이름은 alt 속성의 컨텐츠, 그리고 <input> 요소의 접근자 이름은 연결된 <label> 요소의 컨텐츠이다!


참고로, W3C 표준 버전과는 달리, 시맨틱 웹의 버전은 브라우저 공급업체만 알아야 하는 정보는 제거하고, 항상 html의 최신 기술 트렌드에 맞추어 동기화된다!

Codding Starter

프레임워크는 빠르고, 확장 가능하며, 반응형으로 동작하는 프런트엔드 툴킷으로서.. 부트스트랩에서 기본 제공하는 그리드시스템 및 유틸리티 구성요소들을 이용하고, 부트스트랩에 내장된 JavaScript 플러그인을 활용하면 웹 디자인에 생명력을 불어넣을 수 있다!

시맨틱웹 레이아웃
는 사용자와 브라우저 및 검색엔진을 위해 태그에 의미를 담아 작성하는 Web 표준에 기반한 웹문서 작성의 전형적인 예이니, 전체 구조와 함께 한 문장 한 문장 다 찬찬히 살펴보시기 바랍니다..

‘SEO’, ‘SEO’ 하는데.. 나중에 필요해지면; 대한민국의 인터넷 상황에 맞추어진 '검색엔진 최적화'에 관해 상세히 설명해주고 있는 도 한번 살펴보시길 권합니다..

부트스트랩 시작하기
는 부트스트랩 공식 사이트에서 가져온 스타터 문서를 살짝 다듬은 것인데, 이 페이지로 연습용 index.html 파일을 만들어 직접 코딩하면서 이후의 모든 실습을 진행하시면 됩니다..

* cf 1) 코딩 결과물을 크롬이나 엣지 브라우저로 실행한 뒤, 마우스 우측버튼 단축메뉴의 <검사> 명령을 수행하여 관리자 모드( )로 들어가면 다양한 방면으로 작성한 코드를 검토할 수 있습니다..

* cf 2) 코딩 중 언제든.. 현재까지의 모든 Web 표준 규격들을 만들고 다듬어온 문서를 참조하십시오 코드 작성 중 비쥬얼스튜디오 코드의 태그 툴팁에 나타나는 MDN Reference를 클릭해도 됨!

* cf 3) OpenJS 프로젝트 에서는 "웹코딩에서의 권장사항 및 일반적인 오류를 확인하여 사이트의 접근성, 속도, 브라우저간 호환성 등을 개선"하는 데 관한 힌트를 구할 수 있습니다..


나아가, 에는 Web 3) 및 Bootstrap 5)에 기반한 웹 디자인 관련 자료들이 다양하게 구비되어 있으니 부트스트랩을 배운 이후 자신의 웹사이트를 구축할 때 언제든 찾아보십시오..

Css Stylesheet 입문

html은 컨텐츠의 모양을 정의하는 것이 아니라 의미를 담은 컨텐츠를 구축하는데 사용되며, 웹페이지의 모양 꾸미기는 Css Stylesheet의 영역이다!

웹문서에 스타일 적용하기
Css 스타일시트는 웹페이지를 꾸며주기 위한 코드로서, html 문서에 있는 특정 부분들에 원하는 스타일을 적용하는데.. 아래 코드는 특정 요소(여기서는, <p> 요소)에 스타일을 설정하고 있다
[ Css Stylesheet 선언 및 정의 ]
                                        
                                            p { /* 스타일을 적용할 태그 선택자 p */
                                                color: red; /* p 태그 내 모든 글자들을 red 색상으로 표시한다 */
                                                width: 400px; /* p 문단의 가로 너비는 400px로 설정한다 */
                                            }
                                        
                                    

스타일 선언은 선택자 { 속성: 값; 속성: 값; .. }으로 이루어지는데, 속성명속성값 모두 대/소문자를 구분한다!

1. 외부 스타일시트 파일 링크하기: Css 코드를 별도의 파일로 작성하고(예컨대, my-style.css), html 문서에서 <link>하여 사용한다
[ 외부 Css 파일 불러오기 ]
                                        
                                            /* my-style.css 파일 */
                                            h1 { color: red; }
                                            p { color: green; }
                                        
                                    
                                        
                                            
                                        
                                    

이제 이 html 문서의 <h1>과 <p> 태그는 불러온 스타일시트 파일에 작성된 코드에 맞추어 스타일이 적용됩니다 - 직접 위 my-style.css 파일을 만들어 적당한 위치에 저장하고, 이 html 문서도 작성하여 확인해보십시오 외부 Css 파일의 href 경로는 Web 코딩 입문파일접근 상대경로 관련 부분을 참조하십시오..

2. 현재 문서 내부에서 스타일 정의하기: 아래 코드처럼, <link> 부분은 제거하고, 외부 css 파일의 내용을 그대로 <style> .. </style> 안으로 옮겨주면 됩니다
[ 현재 문서 내부에서 스타일 작성하기 ]
                                        
                                            
                                        
                                    

한 문서에서 바로 Css 스타일시트 내용을 확인할 수 있어, 웹코딩 실습 때는 이게 편합니다만.. 이 내부 스타일은 현재 문서에서만 사용 가능하고, 연결된 딴 문서들에서도 사용하고자 하면 또 각각 따로 넣어줘야 하니 손품 고생은 좀 해야할 듯합니다. 또한, Css Stylesheet를 한곳에 넣어두고 불러다 쓴다면; 사이트 내부 다른 페이지들을 탐색할 때마다 (브라우저가 외부 파일을 캐시할 수 있기에)재차 다운로드할 필요가 없어지므로 웹서핑 속도 측면에서도 훨씬 유익합니다 덧붙여, 위 코드의 <body> 안에 있는 인라인 스타일 관련 내용도 꼭 읽어보고 넘어가십시오..


본격적인 학습을 시작하기 전에, MDN에 있는 을 찬찬히 한번 읽어보시길 권합니다 - 브라우저가 웹문서를 불러올 때, 웹문서의 컨텐츠와 Css 스타일을 어떻게 결합하여 나타내는지 간결히 잘 설명해주고 있습니다. Css 스타일시트 관련 상세 내용은 를 참조하십시오

스타일링 가이드
아래는, Css 스타일시트 작성 시 표준으로 삼을만한 기본 지침들입니다
1. 스타일시트 작성 시 클래스 이름 작명, 색상 표기방식 등에서의 일관성을 유지하고, 코드를 알아보기 쉽도록 작성한다:
                                    
                                        .box-bg {
                                            background-color: black;
                                            color: white;
                                        }
                                    
                                
2. 너무 구체적인 선택자를 만드는 것은 코드를 혼란스럽게 하므로, 보편적으로 사용할 선택자를 만드는 것이 좋다:
                                    
                                        /* 별로임 ! */
                                        article p.box { border: 1px solid #ccc; }

                                        /* 좋아요 ~ */
                                        .box { border: 1px solid #ccc; }
                                    
                                
3. 모든 페이지에 걸쳐 일반적으로 적용되는 스타일과 각각 부분적으로만 사용되는 스타일을 분리하여 작성하면 스타일의 유지/보수에 유용하다:
                                    
                                        /* || 일반 스타일: 일반적으로 적용되는 기본 스타일들에 대한 규칙들: */
                                        body { .. }
                                        h1, h2, h3, h4 { .. }
                                        ul { .. }
                                        blockquote { .. }
                                        ..

                                        /* || 유틸리티: 다양한 요소에 따로 적용하고자 하는 스타일링 옵션들 */
                                        .no-bullets {
                                            list-style: none;
                                            margin: 0; padding: 0;
                                        }
                                        ..

                                        /* || 사이드바 내비게이션 관련: 페이지 레이아웃, 페이지 헤더 및 로고, 푸터, 사이드바 등의 내비게이션 스타일링 등.. */
                                        .main-nav { .. }
                                        .logo { .. }
                                        ..

                                        /* || 컨텐츠, 페이지 및 구성 요소에 따라 세분화된 특정 섹션 항목에 대한 설정들.. */
                                        .product-listing { .. }
                                        .product-box { .. }
                                        ..
                                    
                                
4. 필요한 곳에서 적절히 주석을 달아준다 - 논리 섹션으로 주석들을 분리하고, 코드에 나타나지 않는 문자열을 써서 검색 시 바로 점프할 수 있도록 하는 것도 유용하다:
                                    
                                        /* || General styles */
                                        ..
                                        
                                        /* || Typography */
                                        ..
                                        
                                        /* || Main Navigation */
                                        ..
                                    
                                

에는 모든 프로젝트에 사용할만한 일련의 기본 스타일을 작성해두고 있습니다 - 한번 살펴보십시오..

html의 Script

는 웹문서에 동적 움직임을 주기위해 만들어진 프로그래밍 언어로서, 자바스크립트로 작성한 프로그램이 스크립트인데, 브라우저에 내장된 자바스크립트 엔진은 스크립트 코드를 읽어들여서 분석하고(= 파싱), 컴퓨터가 알 수 있는 기계어로 번역하여(= 컴파일), 그 코드 내용을 실행해나가게 된다!

웹문서에 스크립트 적용하기
스크립트는 html 문서 내부에서 작성해주거나, 또는 외부 스크립트 파일을 불러올 수도 있는데.. 스크립트 코드는 우선, 예제 연습용으로 간단한 html 파일을 만든 후(예: _js.html), 아래 2가지 방법으로 웹문서에 적용할 수 있다
1. _js.html 문서의 </body> 바로 위 <script> .. </script> 내부에서 인라인 스크립트 코드로 작성해준다:
[ 인라인 스크립트 작성하기 ]
                                        
                                            <body>
                                                인라인 스크립트 작성하기
                                            
                                                <script>
                                                    console.log("이스케이프 문자: \u03c0") // 이스케이프 문자: π
                                                    console.log("웃는 얼굴 이모지: \u{1F600}") // 웃는 얼굴 이모지: 😀
                                                </script>
                                            </body>
                                        
                                    
2. *.js 스크립트 파일을 만들어(예: _js.js) 그 안에서 스크립트 코드를 작성한 뒤, _js.html 문서에서 <script>의 src 속성으로 _js.js 파일을 불러온다:
[ 외부 스크립트 파일 불러오기 ]
                                        
                                            
                                        
                                    
                                        
                                            <body>
                                                스크립트 불러오기
    
                                                <script src="_js.js"></script>
                                            </body>
                                        
                                    

위 스크립트 코드를 실행한 결과는 [브라우저 개발자 화면]의 [콘솔] 탭에서 확인할 수 있습니다 _js.html 파일을 실행한 뒤 마우스 우측버튼 단축메뉴의 <검사>를 클릭하면; [브라우저 개발자 화면]으로 들어가게 되고, 거기서 다시 [콘솔] 탭으로 찾아가면 됩니다..

콘솔 API
은 JavaScript 웹 애플리케이션을 테스트하고 디버그하는 도구로서, 그 결과물은 웹브라우저의 [브라우저 개발자 화면](F12 키)으로 들어가서 [콘솔] 탭을 찾아가서 확인할 수 있는데, console.log(..);는 스크립트의 로그값(곧, 코드 실행의 결과물)을 [브라우저 개발자 화면]의 [콘솔] 탭에 표시해준다:
                                    
                                        const a= [2, 4, 6];
                                        console.log("길이", a.length, "임"); // 길이 3 임 ← ,는 공백으로 연결!
                                        console.log("길이" + a.length + "임"); // 길이3임 ← +는 공백없이 연결!
                                    
                                        const name= 'Lee', height= 170;
                                        console.log("이름은 %s, 키는 %d임", name, height); // 이름은 Lee 키는 170 ← 서식 문자열 변수 지정!
                                    
                                

서식 문자열이 주어지면; %s, %f, %d(및 %i), %o는 각각 문자열, 실수, 정수, 객체로 변환되어 표시된다!


참고로, console.debug/info/warn/error(); 등은 모두 console.log();의 별칭에 다름 아니다!

[브라우저 개발자화면]의 [콘솔]에 실행 결과를 표시해주는 console.log(..)와는 달리, document.write("내용")는 '살아있는' html DOM에 (실제로! 스크립트 코드를 삽입하여)내용 을 출력한다:

                                                
                                                    document.write("<h5>String</h5>"); // 문자열에 html 태그 적용
                                                    document.write(`10 + 2 = ${10 + 2}`); // 템플릿 안에서 수식 계산
                                                
                                            

document.write()는 브라우저가 html 문서를 해석하는 중에 실행되어 (실시간으로)현재 문서를 변경하므로 단지 코딩 중의 임시 확인용으로만 써야 하며, 실제 웹문서 작성에 사용해서는 안된다!

콘솔 메시지창
alert("알림 메시지")는 콘솔창에 알림 메시지 를 보여주며, confirm("확인 메시지")확인 메시지 (와 함께 [확인/취소] 버튼)을 표시한다(리턴 값: true/false). 한편, prompt("입력 프롬프트"[, "초기값"])는 사용자 입력 프롬프트 (및 초기값 )를 나타낸다:
                                    
                                        
                                    
                                
                                    
                                        /* 스크립트 코드 */
                                        let weatherPic= document.querySelector('#today-weathers') // 이벤트 대상 ← 위 질문 버튼

                                        function cPic() { // 이벤트 처리함수
                                            const res= prompt("오늘 날씨 질문: ", "좋아요? 나빠요?") // 질문, 초기값 ← [확인] 시는 입력한 값이, [취소] 시는 null이 res에 들어간다

                                            if (res) alert(`음~ ${res}`) // 대답한 경우; 답한 내용을 표시한다
                                            else confirm("엥~ 그냥 나가나요?") // 취소를 누른 경우
                                        }

                                        weatherPic.onclick= cPic // 이벤트 대상(pic)에서 클릭 이벤트가 발생하면; 이벤트 처리함수 cPic()을 호출한다
                                    
                                

자바스크립트 및 이벤트에 관해서는; 나중에 관련 강좌들에서 따로 공부하기로 하고.. 여기서는 스크립트의 콘솔 메시지창만 간략히 살펴봤습니다..

태그에 정보 담기
html 태그에 data-이름= "값" 속성(이름 에 대문자는 들어갈 수 없다!)을 사용하면 해당 태그에 특정 정보를 추가할 수 있는데, 이 정보는 Css 및 JavaScript에서 읽어들여 조작할 수 있다:

(! 아래 리스트의 짐승들에 관한 질문에 미리 답변을 적어두고서 각각 한번씩 클릭하면서 정답을 확인해보세요..)

  • 새는 영어로?
  • 물고기는 영어로?
  • 인간은 한글로?
                                    
                                        
                                    
                                
                                    
                                        /* [data- 속성 사용하기] */
                                        function showDetails(animal) {
                                            var animalType= animal.getAttribute("data-animal");
                                            alert(animal.textContent + " " + animalType);
                                        }
                                    
                                

사용자가 위 <li> 중 하나인 인간은 한글로?를 클릭하면(onclick); showDetails로 이름붙여진 스크립트 함수를 호출하면서(함수명 뒤에 붙은 괄호는 함수를 호출한다는 의미이다!) 이 this(= 호출한 li 요소)를 인자로 전달하고, 호출받은 함수에서는; 이 인자를 매개변수로 받아 함수 내부에 정의된대로 적절한 처리를 하여 다시 호출자(= 사용자가 클릭한 <li> 요소)에게 돌려보내게 됩니다만, 음~ 좀 어렵군요 ㅡㅡ;

Codding Start

Web 표준html로 웹사이트 틀을 만들고, Css로 꾸며주며, Javascript로 동작시키는데.. 이것들은 각각 분리하여 작성되어야 나중에라도, 누구라도,, 알아보기 쉽고 유지 관리에도 도움이 된다

웹문서의 기본 구성
html은 웹문서의 내용을 구성하고 의미를 부여하는 데 사용하는 마크업 언어이며, Css는 그 html 문서에 원하는 모양을 입혀주기 위한 스타일 규격이다. 한편, javaScript는 웹문서에서 동적으로 추가, 제거되고 변경되는 컨텐츠를 만들고 조작할 수 있도록 해주는 스크립트 언어이다: <p>‘경주의 국립공원’</p> 여기서는 html 태그 <p> 안에 텍스트만 적었습니다..

‘경주의 국립공원’

‘경주의 국립공원’

위 단순한 <p> 요소에 Css로 스타일을 입혀서 꾸미고, JavaScript로 살아있는 움직임을 부여했습니다..

                                                    
                                                        
                                                    
                                                

html의 단순 <p> 요소에다 스타일을 적용했습니다: class="htmlcssjs_ex"

                                                    
                                                        .htmlcssjs_ex {
                                                            display: inline-block; padding: 8px 16px 8px;
                                                            color: white; background: rgba(147 169 142 / 0.7);
                                                            border-radius: 8px; box-shadow: 8px 8px 12px 2px gray;
                                                            text-align: center;
                                                            cursor: pointer;
                                                        }
                                                    
                                                

<p> 요소에 입힌 스타일의 내용입니다 이 코드는 웹문서의 </head> 바로 위에서 <style> .. </style> 안에 넣어주시면 됩니다

                                                    
                                                        const gjPara= document.querySelector(".htmlcssjs_ex");
                                                        const gjSans= ['토함산', '남산', '구미산', '금강산', '송화산', '선도산', '단석산']
                                                    
                                                        function ChangeSan() {
                                                            let san= prompt("경주의 국립공원 7곳의 산 이름 중 하나만 맞춰보세요: ");
                                                    
                                                            san= gjSans.find(s => s === san);
                                                            if(san) gjPara.textContent= `${san}`
                                                            else gjPara.textContent= "다시 적으세요 !!"
                                                        }

                                                        gjPara.addEventListener("click", ChangeSan);
                                                    
                                                

<p> 요소 버튼(?)을 클릭해보세요.. 버튼(?)을 클릭할 때 작동시킬 스크립트 움직임을 정의했습니다 이 코드는 웹문서의 </body> 바로 위에서 <script> .. </script> 안에 넣어주시면 됩니다

블록레벨 요소 대 인라인 요소
<div>(= 블록레벨 요소)와 <span>(= 인라인 요소) 태그는 (섹셔닝상의 레이아웃과는 무관하게, 단순 흐름상)특정 영역들로 구분하여 묶어주는데 사용되는데, 기본적으로 <span>, <a> 등의 인라인 요소는 가로 방향으로만 (자신이 지닌 컨텐츠 양만큼)자리잡을 수 있는 반면, <div>, <p> 등 블록레벨 요소는 (부모요소의 크기 내에서)가로 방향 전체를 차지하면서 한 줄을 넘치면 세로 방향으로도 확장된다:

html은 html 태그 요소들로 컨텐츠의 구조를 정의하는 마크업 언어이다

                                    
                                        
                                    
                                

블록레벨 요소는 그 안에 또 다른 블록레벨 요소나 인라인 요소를 포함할 수 있다. 인라인 요소 또한 내부에 또 다른 인라인 요소를(간혹은, 블록레벨 요소도) 포함할 수 있다


웹문서에서 인라인 요소는 문단 내의 단어처럼 움직인다 - 곧, 한 행 내에서 인라인 방향으로 나란히 옆으로 자리잡는 것이다. 예컨대, <div>나 <p>와 같은 블록레벨 요소 내부에서 <span>이나 <b> 요소로 텍스트 부분의 스타일을 지정하는 데 사용되며, 모든 블록레벨에서와 같은 너비/높이, 여백 및 패딩 등의 속성은 주변 요소에 의해 무시된다! 반면, 블록레벨 요소는 서로 나란히 배치되지 않고, 밑으로 내려가서 자신의 새로운 블록레벨 라인을 만든다. 다른 Css 코드에 의해 변경되지 않는 한, 블록레벨 요소는 가로쓰기 모드에서 전체 너비로 확장되고, 모든 마진 및 패딩이 적용된다!

문단: p 및 br 태그
<p> 태그는 (앞뒤로 줄 바꿈이 있는)텍스트 단락을 만드는데, 브라우저 창 너비를 넘어서면 자동으로 줄이 바뀌어 아래로 내려간다(* 여기서, p 요소 내부에서 강제로 br 태그를 사용함)
중간에 강제로 줄을 바꿔주려면; 필요한 곳에서 <br> 태그(닫는 태그는 없음)를 넣어주면 된다!
                                    
                                        
                                    
                                
➥ 더미 문장 넣기: lorem

간혹, 코딩 중 임시로 더미 문장을 넣어주어야 할 때가 있는데, VisualStudio Code 에디터에서 lorem 해주면 된다:

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam eos repellat unde dicta explicabo velit sapiente consequatur alias corrupti, aperiam impedit, sed libero, qui optio. Repellat corrupti quisquam aspernatur dignissimos?

글자 꾸미기
b 태그는 단순히 굵게 표시할 텍스트에, strong은 매우 중요한 강조에 사용된다(중복 사용도 가능하다). i 태그는 (기술적 용어, 관용구, 느낌 등의)단순히 기울여서 표시할 텍스트에, em은 다소간 약한 강조에 사용된다. 한편, mark 태그는 노란색 형광펜으로 덧칠해준다:
                                    
                                        
                                    
                                

그밖에, sub 아래 첨자 및 sup 위 첨자, 단순히 취소선을 그어주는 s와 단순 밑줄을 그어주는 u, 삭제된 텍스트임을 알려주는 del(및 대체된 텍스트임을 표시하는 ins), 작은 텍스트인 small도 있다

특수문자 넣기
html에서는 공백을 수천개 넣든, 줄바꿈을 여러번 하든 오직 하나의 빈칸으로 취급한다. 따라서, Space 키로 만드는 하나의 빈칸 외에, 빈 칸이 연속으로 더 필요할 때가 있는데.. 그럴 때는 맨 앞에 &를 넣고 nbsp(= 빈칸) 적고, 맨 뒤에 ;를 붙여주면 된다 필요한 만큼 연속적으로 넣을 수 있다: (       )
좌측 꺽쇠(lt) < , 우측 꺽쇠(gt) > , 큰 따옴표(quot) " , 작은 따옴표(apos) ' , And 기호(amp) & , 저작권 기호(copy) © , 등록상표(trade) , 엔터키 모양(ldca) , 각도 기호(deg) ° , ..

그외, 한글 Windows 기본인 한글자모+한자키에다, 윈도우키+점(기호문자 및 이티모콘)도 있고.. 정 안되면; 최후의 보루로 (모든 코딩의 원초적 무기, 바로 그 무대뽀) Ctrl+C & Ctrl+V로 가져다 붙일 수도 있습니다 ^^ 사실, html 문서의 문자 인코딩이 <meta charset= "utf-8">로 설정되어 있다면; 최신 브라우저들에서는 (html 코드에서 사용해야 하는)<(꺽쇠 기호)와  (공백 문자)를 제외하고는, 대부분 Ctrl+C & Ctrl+V로 가져다 붙이는 방식으로 쓸 수 있습니다!

더미 이미지 삽입하기
Web 문서에 더미 이미지를 삽입하고자할 때는 Place-hold 사이트를 이용할 수 있다:

200x50 이미지 삽입 Title과 함께 삽입

                                    
                                        
                                    
                                

200x50200x50?text=Title의 차이는 위 코드에서 직접 확인해보세요. 찾았나요?


진짜 이미지가 필요하시면; 등 무료(및 유료) 이미지들을 제공하는 사이트들을 들러 보십시오..

html 5) 목록 리스트

html은 목록 작성을 위해 <ul> 기호목록, <ol> 순서목록, <dl> 설명목록을 기본 제공하는데, 펼치고 접는 <details> 서랍목록도 또한 제공한다 - 이하, html 목록 작성 관련 태그들을 간략히 살펴봅니다..

기호/순서 목록 작성하기
1. <ul>(과 <li>)는 기호 목록을 만드는데, <li> 안에 <ul>이 중첩되는 경우; (들여쓰기와 함께)기본 기호가 ● (disc)에서 ○ (circle), ■ (square)로 순차적으로 바뀌게 된다:
  • disc
  • disc ← 아래는, li 내부 ul의 li들
    • circle
    • circle ← 아래는, 다시, li 내부 ul의 li들
      • square
      • square
                                    
                                        
                                    
                                
2. <ol>(과 <li>)는 순번 목록을 만드는데, type, start, reversed 속성을 사용하여 번호 형태를 지정해줄 수도 있다:
  1. type="1 | a/A | i/I"
  2. start="시작번호"
  3. reversed // 역순으로
                                    
                                        
                                    
                                
➥ <ol>에서의 중첩 관련

<ol>과 <ul>은 필요한 만큼 중첩할 수 있고, 서로 교차해서 사용할 수도 있는데, <ol> 안에서 <ol>을 중첩할 때는; (중첩된 <ul>에서 기호 형태가 바뀌는 것처럼)중첩된 <ol>에서는 1) 식으로 번호 형태가 바뀌면 좋을 듯한데, html 규칙 내에서는 그런게 없는 듯하군요. 나중에, Css를 익히시게 되면; 연구 좀 하셔서 사용자정의 스타일로 만들어 써보셔도 될 듯합니다..

사전목록 작성하기
<dl>(과 <dt>, <dd>)은 사전 목록을 만드는데, <dl>에서 설명 목록 영역을 규정한 뒤 그 안에서 <dt>로 제목을 붙이고, <dd>(복수 나열 가능)로 설명을 넣어준다:
사전 목록 작성
dl로 설명 목록 영역을 규정하고,
그 안에서 dt로 제목을 붙이고, dd(복수 나열 가능)로 설명을 넣어준다
                                    
                                        
                                    
                                

<dd> 안에 <dl>을 중첩하는 것 또한 가능한데, 위에서 본 기호 목록과는 달리 자동 들여쓰기가 적용되지 않아 보기에 좀 불편하군요.. Css 스타일시트를 배운 뒤, 연구 좀 하셔서 중첩 시 들여써지도록 사용자정의 스타일을 한번 만들어보시면 좋을 듯 합니다만.. 좀 어려울까요(?) ㅡㅡ;

서랍목록 작성하기
<details> 태그는 사용자가 보거나 숨길 수 있는 추가 세부정보를 정의하는데, 내부 <summary> 태그에서 요약 정보를 보이고, 클릭하면; 그 아래 정의된 세부정보가 펼쳐지게 된다:
[요약] ← 상세히 보려면 클릭하세요..

[세부 상세정보] 이곳은 처음에는 보이지 않다가 위 [요약]을 클릭하면 펼쳐져서 보여진다 ← 다시 클릭하면 닫힌다!

                                    
                                        
                                    
                                

<details> 태그에서 옵션으로 open 값을 주면 열린 채로 시작한다: <details open> .. </details>

html 5) Typography

아래에서.. 이런게 있다 하면서 알아둘 만한 html 태그들 몇가지 간략히 소개합니다..

인용문
<blockquote>(블록레벨 요소)는 (<p>의 기능에 더하여)안으로 들여 써지는 인용문으로 표시되며, <q>(인라인 요소)는 (인용구임을 표시하는)"큰 따옴표"가 붙여진다. 그밖에, <cite> 태그(인라인 요소)는 출처 등을, <address> 태그(블록레벨 요소)는 주소나 연락처 정보 등을 기울여서 표시해준다:
웹의 힘은 보편성에 있다 - 장애를 가진 사람들조차도 다 접근할 수 있도록 하는 것이 필수적인 요소이다 - 참고내용 웹 접근성
                                    
                                        
                                    
                                

위 코드를 브라우저에서 실행할 때, 태그 설명과 약간 다른 모습이 보인다면; 그건 html 5 태그가 Bootstrap 5 자체 규격에 의해 재정의된 때문이니 참고하십시오..

Abbr 태그(및 title 속성)
<abbr> 태그는 title 속성과 함께 사용되어 마우스 커서를 올렸을 때 축약 표시된 약어의 원본(또는, 설명글)을 보여준다: HTML이란?
                                    
                                        
                                    
                                

참고로, title 속성은 <a>, <img>, <p> 등 대부분의 태그에서 사용할 수 있다!

Time 태그(및 datetime 속성)
<time> 태그는 datetime 속성과 함께 사용되어 보조 기기(예컨대, 스크린리더기)가 이해할 수 있는 형태로 날짜나 시간을 나타낸다: 은 5.18 광주항쟁 기념일
                                    
                                        
                                    
                                

여기서는 차이를 알 수 없지만.. 시각 장애인을 위한 스크린리더기는 datetime 속성에 들어있는 값을 읽어줍니다!

Ruby(와 rt) 태그
<ruby> 태그는 주로 동아시아권 국가들의 글자에 주석을 함께 표기하기 위하여 사용되는데, 주석으로 표기할 내용은 <ruby> 안에서 <rt>로 넣어주면 된다: 동아시아권 국가들(중국 한국 일본)
                                    
                                        
                                    
                                

문서 내부 요소에서 특정 언어를 설정해줄 때는 lang 속성을 사용할 수 있다: <span lang="jp">ご飯が熱い。</span>

소스코드 작성하기
<pre>는 여러 칸의 공백이나 줄 바꿈, 프로그램 소스 등 입력하는 그대로 화면에 표시해준다. 한편, 컴퓨터 인식을 위한 소스 코드를 넣기 위해서는 인라인 <code> 태그를 사용하면 된다:
                                                h2 {
                                                    padding: 10px;
                                                }
                                            

이것은 인라인 code입니다

                                                    
                                                        
                                                    
                                                

html 코드 내부에 들어가는 꺽쇠 기호(<, >)는 html에서 사용하는 예약어이므로 이스케이프 처리해주어야 한다!


웹 문서를 소리로 읽어주는 기계나 점자로 표시해주는 기계는 <pre> 태그가 적용된 부분을 만나면 건너뛴다. 따라서, 그 부분의 내용을 청각 장애인이나 시각 장애인이 알 수 있도록 alt(와 title) 속성을 써서 대체 텍스트를 추가해주는 것이 좋다!

하이퍼링크와 앵커

사용자에게 웹 탐색을 안내하는 방식에는 여러 가지 유형이 있으며 이를 표시하는 방법 또한 다양하지만.. 그 요점은 사용자가 잘 안배된 적절한 안내에 따라, 가장 적은 수의 클릭으로 손쉽게 해당 페이지로 이동할 수 있도록 도와주어야 한다는 것에 있다!

하이퍼링크
1. <a> 태그는 텍스트(소소한 이야기)나 이미지(소소한 이야기 로고)에 링크를 걸어주는데, href 속성에 들어갈 으로는 절대 URL이나 (현재 문서를 기준으로 하는)상대 URL(골굴암 탐험) 모두 가능하다:
[ href의 속성값 ]
                                        
                                            
                                        
                                    

href 속성값에 #(= 페이지 다시 읽기) 혹은 #top(= 스크롤해서 맨 위로 이동)을 넣어주면; 스크롤해서 페이지 최상단으로 올라간다 참고로, href 값에 #!를 넣어주면; 탱자~ 탱자 놀면서 아무 일도 하지 않습니다 ^^

2. <a> 태그는 텍스트나 이미지만 아니라 <h#> 같은 블록레벨 요소에도 링크를 걸어줄 수 있다: 소소한 이야기
                                    
                                        
                                    
                                

target 속성값에 _blank 를 넣어주면 새창(및 새 탭)으로 열어준다(기본값인 _self 는 현재 창에서 열어준다) 덧붙여서, target= "_blank"로 주면; (웹사이트 보안을 위해 window.opener를 허용하지 않는)rel= "noopener" 설정이 암묵적으로 제공된다는 이점도 부가된다!

비 html 리소스(예컨대, PDF, Word 문서, 스트리밍 비디오/오디오 등)로 연결하는 경우, 사용자의 혼동을 줄이기 위해 명확한 문구를 넣어주는 것이 좋다:

                                                
                                                    
                                                
                                            

href 속성값에 mailto:메일주소 로 넣어주면; (내 컴퓨터에 설치된 기본 메일앱을 열어)메일 보내기로 연결된다. tel:전화번호 는 전화걸기 또는 주소록으로 연결되지만, 기기에 따라 다양한 방식으로 작동한다:

                                                
                                                    
                                                
                                            

<a> 요소에서 href 속성값과 함께 download= "파일명"을 넣어주면; 파일 다운로드로 연결된다:

                                                
                                                    
                                                
                                            

설치된 다른 앱을 열 수 있는 링크를 포함할 때는 사용자에게 명확히 알려줄 필요가 있다: 우선, 여는 태그와 닫는 태그 사이에 있는 텍스트를 통해 열려는 링크의 유형을 알리는 것이 우선이고, 더 필요하다면; [href^="mailto:"](href 속성값이 mailto:로 시작한다면;), [href$=".pdf"](href 속성값이 .pdf로 끝난다면;) 등의 Css 스타일링 타겟팅을 사용할 수도 있다!

➥ title 속성에 대하여

title 속성은 링크에 대한 추가 정보를 담아서 마우스 호버시 풍선 도움말로 알려준다 title 속성은 <a> 태그만 아니라 <img>, <p>, <span> 등 대부분의 태그에서 유용하게 사용할 수 있다!

문서 내부에서 이동하기: Anchor
우선, 가고싶은 지점마다 id 속성을 이용해 각기 다른 이름으로 앵커(= 도착지)를 만들고, <a> 태그(= 클릭하여 출발할 곳)에서 href="#앵커이름" 속성으로 앵커와 연결해준다:

아래로 이동..

[ 이름이 지정된 앵커로 이동하기 ]
                                        
                                            
                                        
                                    

위로 이동..

외부 문서로 이동하기
외부 html 문서(외부 사이트, 또는 현재 사이트의 다른 문서파일)에서 절대 URL, 또는 상대 URL과 함께 문서 내 (id 이름이 지정된)특정 섹션(Css 트랜스폼)으로 바로 이동할 수도 있다:
                                    
                                        
                                    
                                
                                    
                                        
                                    
                                
                                    
                                        
                                    
                                

같은 폴더(./)에 있는 plug-ins.html 파일 내 id= "v-pills-AnchorJS" 인 앵커


문서 내부에서 점프하는 앵커에 부드러운 애니메이션 효과를 주는 , 기존 페이지 컨텐츠에 깊은 앵커 링크를 추가하는 플러그인을 사용해주는 것도 사용성 측면에서 유익하다!

한편, 을 쓰면; 웹문서의 어느 곳에서든 스크롤 애니메이션을 적용할 수 있고, 플러그인은 배경 이미지, 비디오 및 인라인 요소에 대해 부드러운 시차 스크롤링 효과를 준다

웹 탐색 및 섹션구획

랜드마크 시맨틱 태그들로 섹션 을 구획하여 작성된 웹문서라면; 각 섹션별 제목 또한 그 의미에 맞추어진 html 5 태그들을 써서 달아주는 것이 당연하다!

탐색 내비게이션
<nav> 태그는 탐색 섹션에 사용하기에 가장 적합한 요소로, 스크린리더 및 검색엔진에 자동으로 관련 정보를 제공해준다!
1. 대화형 요소에서, aria-label 속성을 추가하여 탐색 목적에 대한 간략한 설명을 제공해주는 것도 좋다:
[ nav 태그와 aria-label 속성 ]
                                        
                                            
                                        
                                    
2. 대화형 요소에서, aria-labelledby 속성을 추가하여 참조할 (이름이 지정된)요소와 연결해줄 수 있다:
[ nav 태그와 aria-labelledby 속성 ]
                                        
                                            
                                        
                                    
➥ 웹사이트 탐색방식의 다양성

웹사이트 탐색 방식에는 다양한 유형이 있으며, 이를 표시하는 방법 또한 다양하다: home 버튼, top/bottom 이동 버튼, (컨텐츠로 건너뛰는)이름이 지정된 앵커, 현재 문서내 탐색 드롭다운 메뉴, 아코디언(접는 박스), 브레드크럼브(탐색 경로 표시), 페이지내이션(쪽수 매기기) 등도 탐색이고, 웹사이트 내비게이션 메뉴바, 탭 내비게이션, (숨겨진 슬라이딩 메뉴인)오프캔버스 및 (버튼 클릭 대화상자로 쓰이는)모달 등의 플라이아웃 메뉴, (마우스 오버시 나타나는)반동 리액션 메뉴, (버튼 클릭시 나타나는)햄버거 메뉴 등등.. 모두 사용자의 웹 서핑을 인도하는 다양한 도구들이다!


모두 이 html 5) 강좌와 Css 3), Bootstrap 5) 강좌들에서 익혀나가야 할 내용들입니다. 나아가, 웹문서 작성을 도와주는 다양한 플러그인 라이브러리 및 자바스크립트, html DOM, Web APIs 등도 또한 살펴볼 예정입니다..

섹션 분할 구획
페이지 전체의 제목을 나타내는 <h1> 태그는 페이지 당 하나만 사용하는 것이 원칙이며, 그 밑으로 문서의 구조에 맞추어 <h2>, <h3>, .. 순으로 하위 제목들을 배치해준다(단계를 건너뛰어 마구 배치하는 것은 검색엔진이나 스크린리더기에게 불필요한 혼란을 줄 수 있다!). 한편, 같은 단계에 있는 서로 다른 랜드마크 섹션들의 경우에는 id(및 aria-labelledby) 속성을 써서 구획을 구분해주는 것도 SEO 차원에서 유익하다:
[ 동일 수준 컨텐츠 섹션들의 구획 구분 ]
                                        
                                            
                                        
                                    
제목 라인
<h1(~ 6)> 태그는 제목 텍스트 라인을 크고 진하게 표시한다. 대략 h1=32px, h4=16px 크기이며, 굵기는 모두 700 정도인데, html 문서의 기본 텍스트는 대략 16px(= 1em) 크기에 굵기는 400 정도이다 단, 각 브라우저별 기본 규격 차이로 인해 약간씩 다를 수 있다!

h1

h2

h3

h4

h5
h6
                                    
                                        
                                    
                                

원래 <h#> 태그는 가로로 한 줄 전체를 차지하는데(곧, 원래대로라면; 위 <h#> 태그들은 각각 1줄씩 차지하여야 함), 여기서는 (앞으로도, 종종 이런 경우가 있을 터인데)간결한 시각적 비교 및 공간 절약을 위해 부트스트랩 유틸리티를 써서 임시로 한 줄에 다 늘어놓은 것이며(위 코드의 class= "d-inline-block"), 글자의 굵기 또한 기본적으로는 모두 같이 700 정도이나 Css를 써서 각각 차별성을 준 것입니다!


부트스트랩 Css를 링크하지 않은 순수 .html 문서에 위 코드를 넣고 브라우저로 열어보면; 부트스트랩 스타일이 적용된 위 모습과 다른 html의 순수한 민낯을 볼 수 있습니다 참고로, 이 <h#> 태그들을 글자 크기 조정을 위해 사용하는 것은 좋지 않습니다! 글자 크기 조정이 필요하다면; Css의 font-sizefont-weight 속성, 부트스트랩의 관련 클래스를 사용하면 됩니다..

주제의 분리
<hr> 태그(닫는 태그는 없음)는 한 줄 전체를 차지하는 가로 구분선(1px 굵기의 검은색 실선)을 그어준다:

                                    
                                        
                                    
                                
                                    
                                        hr.hr-short_50 { width: 50%; margin: 0 auto; }
                                    
                                

이 또한 부트스트랩의 자체 <hr> 스타일 규격이 적용되어 html 표준 <hr> 태그의 모양(1px solid black)이 margin-top:1rem; margin-bottom:1rem; border:0; border-top:1px solid rgba(0 0 0 / 0.1); 값으로 재적용된 것이며, 추가적으로 사용자정의 Css를 써서 50% 너비(width: 50%;)로 정중앙(margin: 0 auto;)에 배치하고, 또한 부트스트랩의 유틸리티로 상/하 마진을 넓혀준 것(class= "my-4")이다:


이 <hr> 태그는 기본적으로 문단 내 장면 전환, 섹션 내 구획 변경 등 주제의 분리를 위해 사용되어 왔지만, 최근에는 시각적 측면에서의 의미 부여를 위해서도 자주 애용된다 물론, 이를 위해서는 Css 스타일시트나 부트스트랩 유틸리티 등을 써서 의미에 맞게 모양을 꾸며줄 필요가 있다!

요소에 설명글 달기
<figure>(와 <figcaption>) 태그는 이미지 등의 멀티미디어 요소, 표나 차트, 문단 등에 설명 글을 달아주는데, <figure>로 내부 컨텐츠를 둘러싼 뒤 그 앞이나 뒤에서 <figcaption>으로 설명 글을 붙여주면 된다:
(* 위쪽에 단 설명글)
                                        
                                            
                                        
                                    
(* 아래쪽에 단 설명글)

인라인 프레임

인라인 프레임을 이용하면 손쉽게 현재 웹문서에 다른 웹문서를 삽입할 수 있는데, 이는 직접 조작할 수 없는 외부 컨텐츠를 자신의 웹사이트에 포함시킬 때 매우 유용하다 - 예컨대 YouTube 동영상, 구글맵 지도, 광고 배너, 온라인 댓글 시스템 등등..

인라인 프레임 삽입하기
<iframe>을 쓰면 같은 사이트 내의 특정 문서를 현재 Web 문서에 액자처럼 삽입할 수 있는데, 인라인 프레임을 배치하고자 하는 곳에서 아래와 같은 형식으로 인라인 프레임 코드를 작성해준다:
                                    
                                        
                                    
                                
                                                    
                                                        
                                                    
                                                

프레임에 설정된 height= '값'보다 소스 문서 높이가 더 클 경우 세로 스크롤바가 나타난다!


한편, 외부 웹사이트를 직접 연결하여 현재 Web 문서에 나타낼 수도 있는데, <iframe>의 src= 속성에서 이동할 사이트를 바로 넣어주면 된다:

                                    
                                        
                                    
                                

이미지 다루기

여기서는 웹문서에 이미지를 삽입하는 기본 방식을 간략히 살펴봅니다. 이미지 전반에 관련된 포괄적, 심층적 이해가 필요하신 분은 문서를 참조하십시오..

이미지 삽입하기
1. <img> 태그는 문서에 이미지 소스 를 삽입하는데, 닫는 태그는 없다. 여기서 alt 속성은 이미지 설명 인데, 스크린리더기는 이 값을 읽어 사용자에게 이미지에 관해 알려주기에 항시 넣어주는 것이 좋다:

이미지 소스가 없음 ㅡㅡ;

                                    
                                        
                                    
                                

위 코드에서는 src에 적합한 이미지 소스가 없으므로 alt 속성에 주어진 값으로 대신 표시해주고 있다 아니라면; 없는 이미지를 찾는다고 한참 더 버벅댈 수 있습니다 ㅡㅡ;


alt 속성값에 빈 문자열("")이라도 넣어주는 것은; 예컨대, 단순한 장식용 이미지인 경우, 스크린리더기 등의 비시각적 브라우저에게는 이미지가 컨텐츠의 중요 부분이 아니므로 렌더링을 하지 않아도 된다는 의미로 전달되며, 나아가 이미지를 복사 & 붙여넣기할 때와 이미지 링크를 북마크할 때도 alt 속성에 들어있는 값을 사용하므로 SEO 차원에서도 유익하다!

2. 이미지의 너비(width)와 높이(height)를 (실제 크기로)넣어주고, alt 속성으로 (공란일지라도)대체 텍스트를 설정해주면; 브라우저는 네트워크 오류나 컨텐츠 차단, 죽은 링크 등의 이유로 이미지를 표시할 수 없는 경우에 툴팁으로 표시해준다 이는 브라우저가 좀 더 빠르게 내려받도록 하는데도 도움이 되므로 웹사이트 최적화를 위해서도 유익하다!

꼭 넣어주세요 ^^

                                    
                                        
                                    
                                

title 속성은 대부분의 태그에서 사용할 수 있지만, <img> 태그의 alt 속성을 대체하여 사용하는 것은 좋지 않다 - 이 속성으로 추가 정보를 제공할 수는 있겠지만, 꼭 알려야하는 중요한 정보라면; alt 속성을 사용해야 한다!


widthheight 속성을 써서 이미지의 크기를 지정해주는 것은 좋은 일이지만, 이미지의 크기를 조정하는 데 사용하는 것은 좋지 않다 - 이미지 편집도구를 써서 미리 올바른 크기로 조정하여 삽입해주는 것이 (다운로드 속도를 높이고 이미지 왜곡을 방지한다는 점에서)최선이고, 불가피하게 이미지의 크기를 조정해야 한다면; Css 스타일시트를 써서 설정해주는 것이 좋다!


구글 에서는 사용자 인터페이스 디자인의 표준을 제시하는 동시에 폰트, 아이콘, 이미지 등 수많은 오픈소스(및 코드)를 제공하고 있으니 한번 들러 보십시오..

이미지맵 작성하기
<map>(& <area>)는 이미지 맵(클릭 가능한 링크 영역)을 정의한다. 이미지 맵을 작성하려면; 먼저, <img> 태그에서 이미지 소스 와 함께 맵이름 을 지정해주고, 다음, <map> 태그 안에서 그 맵이름 을 써서 <area> 태그로 이미지맵 영역들을 만들어주면 된다:
                                    
                                        
                                    
                                

<area> 태그에서는 맵의 모양(shape)과 좌표 영역(cords)을 지정한다

  • shape="rect" cords="x1,y1, x2,y2" 사각형의 좌상단 모서리 (x1, y1)좌표와 우하단 모서리 (x2, y2)좌표
  • shape="circle" cords="x,y, r" 원의 중심점 좌표(x, y)와 반지름(r)
  • shape="poly" cords="x1,y1, x2,y2, .., xn,yn[, x1,y1]" 다각형의 각 꼭지점 좌표들 좌표값은 이미지의 좌상단 꼭지점을 기준으로 하는 px 단위임
400x200 이미지
                                    
                                        
                                    
                                

마우스 포인터를 위 그림 위에서 움직이면서 풍선 도움말을 확인하십시오. 위 코드에서는 href 속성값을 비워두었지만, 필요하다면; 저 각각의 영역들에 웹문서 등을 링크해줄 수 있습니다 여기서는 이미 알고 있는 사각형의 크기를 기준으로 각 영역의 범위를 지정해주었지만, 이미지 편집 프로그램을 이용하면 특정(모양에 맞추어진) 영역 좌표를 확인하여 설정해줄 수도 있습니다!

Webp 이미지
는 웹에서 이미지에 우수한 무손실 및 손실 압축, 알파 채널을 제공하는 최신 이미지 형식으로서, <picture>(& <source>) 요소와 함께 사용할 수 있다:
[ Webp 이미지 사용법 ]
                                        
                                            
                                        
                                    
jpg 이미지

반응형 이미지

고해상도 이미지는 다운로드 시 시간상 지체 문제가 있을 수 있고, 기기간 화면 크기 및 가로/세로 방향에 따른 편차나 (텍스트를 포함한 이미지의 경우)축소 시 텍스트 내용을 알아보기 어려울 수 있다는 점 등의 문제가 발생할 수 있다 - 이러한 문제들을 해결하기 위해 나온 것이 바로 기법이다!

반응형 이미지
1-1. 동일한 이미지를 기기에 따라 더 크게 또는 더 작게 표시하고 싶을 때, <img> 태그의 srcsetsizes 속성을 이용하면; 화면 너비에 맞추어 서로 다른 이미지 파일을 지정해줄 수 있다: 이미지는 콤마로 구분하여 실제 크기별로(480w, 800w 등) 복수로 나열하는데, 브라우저는 먼저 기기 너비를 확인한 뒤, sizes의 미디어 조건에 맞는 srcset 이미지 파일을 찾아서 불러온다:
[ img 요소의 srcset 속성 (1) ]
                                        
                                            <img
                                                srcset="img-480w.jpg 480w, img-800w.jpg 800w" ← 480w, 800w는 이미지의 (렌더링을 변경하기 위해 Css를 적용하지 않은)실제 px 너비를 의미한다
                                                sizes="(max-width: 600px) 480px, 800px" ← (뷰포트 너비가 600px 이하면); 480px 크기로, 그 이상이면; 800px 크기로 표시하라
                                                src="img-800w.jpg" ← 브라우저에서 위 코드들이 지원되지 않는다면; 여기로 온다!
                                                alt=""
                                            />
                                        
                                    

sizes의 슬롯 너비에서, 절대너비(480px)를 제공하는 대신 뷰포트에 대한 상대너비(예컨대, 50vw)를 제공할 수는 있지만 %는 사용할 수 없다!

1-2. 가령, (뷰포트 크기가 거의 동일한)스마트폰만을 대상으로 한다고 가정하면; sizes 속성없이 srcset 속성만 사용하여 브라우저가 적절한 해상도의 이미지를 선택하도록 할 수도 있다:
[ img 요소의 srcset 속성 (2) ]
                                        
                                            
                                        
                                    

이미지의 크기를 Css에서 img { width: 320px; }로 정의하였다고 가정할 때, 접속한 디바이스의 디스플레이 해상도가 각 Css 픽셀당 디바이스 픽셀이 1개인 경우 1x, 2개 이상이라면 2x에 해당하는 이미지가 로드된다!

2. 다른 방식으로는, <picture>(와 <source>) 태그를 써서 이미지를 삽입할 수도 있다: 가령, 데스크톱에는 전체 장면을 보여주는 가로 이미지를, 모바일에는 주요 부분만 확대하여 보여주는 세로 이미지를 제공하는 등 다양한 기기 및 레이아웃에 맞게 잘린 이미지를 제공하려는 경우이다:
[ picture(& source) 사용하기 ]
                                        
                                            
                                        
                                    

위에서 <img> 요소는 맨 밑에 배치되어야 하며, 해상도를 더 세분화하고자 한다면; <source> 태그를 필요한만큼 추가해주면 된다!


웹브라우저가 시작되면 Css와 javaScript가 해석되기 전에 이미지가 먼저 로딩되는데, 이러한 작동 메커니즘은 반응형 이미지에는 도움이 되지 않고, 도리어 역효과가 날 수도 있기에 반응형 이미지를 위해서는 Css나 JavaScript보다는 html을 활용할 필요성이 생겨난다!

웹페이지 중간에 너무 큰 이미지가 포함된 경우, <img> 요소에서 지연로딩 속성(loading= "lazy")을 주면; 이미지가 뷰포트에 들어올 '가능성'(이는 브라우저가 알아서 판단한다!)이 있을 때까지 이미지 로딩이 지연되며, 이는 다른 급한 작업에 먼저 자원을 할당하게 하여 성능상의 이점을 가져올 수 있다 이제 사용자가 화면을 스크롤하기 시작하면; 그 거리가 좁혀지고, 자바스크립트가 비활성화되면; 이 속성값은 자동으로 기본값으로 되돌려진다!

미디어 다루기

미디어 삽입 시 보통 오디오 파일에는 <audio>, 비디오 파일에는 <video> 태그를 사용하는데, <source> 태그와 함께 사용하여 여러 미디어 파일을 지정해줌으로써 다양한 브라우저에 대응하도록 해주는 것이 바람직하다!

미디어 삽입하기
1. 아래 코드는 비디오 삽입의 기본 예인데, (위에서 아래로 순차적으로 내려가면서)<video> 태그 안의 어느 한 <source> 태그 및 맨 아래 배치한 대체 텍스트가 실행되면 나머지는 실행되지 않는다:
                                    
                                        
                                    
                                

위 코드에서 controls 옵션은 컨트롤 막대를 표시하는데, 그 모양은 각각의 브라우저별 규격에 따라 서로 다르다!

여타 비디오 옵션들

<video> 요소의 여타 속성들로는 우선, autoplay(자동재생)와 loop(반복재생), muted(음소거) 등이 있는데, 모두 꼭 필요한 경우라면; 기본값(자동재생 안함, 반복재생 안함, 음소거 상태)으로 두는 것이 좋다!

나아가, (재생 직전 표시하는)스플래시 화면이나 광고 화면으로 쓸 수 있는 poster= "포스터 이미지", 대용량 파일의 버퍼링 여부를 설정하는 preload= "none/metadata"(기본값인 auto는 미리 다운로드하며, metadata는 메타 데이터만 미리 다운로드한다) 속성도 설정해줄 수 있다

2. <audio> 태그는 widthheight, poster 속성이 없다는 점만 제외하면, <video> 태그와 비슷하게 사용한다 - 그저 controls 속성을 넣어주는 것만으로 충분하다:
                                    
                                        
                                    
                                

등을 재생해주는 인라인 미디어 플레이어이다. 한편, 는 이미지, iframe, 인라인 컨텐츠 및 비디오를 YouTube, Vimeo 및 자체 호스팅 비디오로 선택적으로 자동 재생해준다

자막 및 캡션 넣기
html 5)에서는 기본적으로 .srt 자막 파일을 지원하지만 모든 브라우저에서 공통적으로 지원하는 자막 파일은 .vtt인데, 안에 자막 내용과 시간을 담고 있다. 자막 파일(.vtt)을 연결할 때는 <track> 태그를 쓰는데, kind 속성에서 subtitles(자막) 및 captions(캡션) 여부를 지정해줄 수 있다:
                                    
                                        
                                    
                                

kind 속성의 caption 값은 주로 음향효과 및 기타 관련 오디오 정보가 포함된 스크립트 작성 및 번역에 사용한다!

[ WebVTT 자막 작성하기 ]
                                        
                                            00:00:22.230 --> 00:00:24.606 // 시작시간 --> 종료시간
                                            자막 내용 // 한 줄 이상 가능, 밑에서 한 줄 띄우고..
                                            
                                            00:00:30.739 --> 00:00:34.074
                                            다음 자막 
    
                                            .. 
                                        
                                    
                                        
                                            
                                        
                                    

Svg 이미지

Svg 이미지는 XML 텍스트 파일로 정의하기에 손실이나 품질 저하 없이 모든 크기에서 렌더링이 가능하며, 검색과 색인 및 압축도 가능하다. 또한, Svg 파일은 브라우저에서 캐시할 수 있으므로 페이지 내 여러 곳에서 사용하는 경우라면; 로딩 속도 측면에서도 유리하다

Svg 이미지 삽입하기
위치와 색상을 구성하는 픽셀 격자들로 이루어지는 Raster 이미지(JPEG, PNG, GIF)와는 달리, 알고리즘으로 꼭지점과 선, 색을 구성하는 Vector 이미지(SVG)는 용량이 적고 확대 시에도 화질이 떨어지지 않아 반응형 웹사이트에 적합하며, Css로 스타일을 지정하고 DOM이나 JavaScript에서 조작하는 것이 가능하기에 다양하게 활용할 수 있다
1. html 5에서는 <img> 태그로 Svg 이미지를 불러들일 수 있는데, src, alt 속성과 함께 widthheight 속성도 반드시 필요하다:

부트스트랩 로고

                                    
                                        
                                    
                                

<img> 요소에서 Svg 이미지를 사용할 때; 스크린리더기 등이 Svg 이미지를 인식하지 못하고 건너뛸수 있기에 role="img" 속성을 넣어줄 필요가 있다. 반면, 단순한 장식용 이미지일 뿐이라면; (그냥 건너뛰라고)role="none" 속성을 넣어줄 수도 있다!

2. 한편, Svg 이미지를 지원하지 못하는 브라우저에 대응하기 위해서 srcset 속성을 사용할 수도 있다:
                                    
                                        
                                    
                                

Svg를 지원하는 브라우저에서는 image.svg를 불러오고, 미지원 브라우저에서는 기본 image.png를 보여주게 된다!

인라인 SVG 작성하기
인라인 Svg를 쓰면; Css 스타일 설정이 가능하고, 소스 코드 자체를 수정할 수도 있다. 나아가, <a> .. </a> 요소로 감싸서 간단히 하이퍼링크를 만들 수도 있다
1. <svg> 태그로 인라인 Svg 이미지를 작성할 수 있는데(내부 컨텐츠는 위에서 아래로 순차적으로 렌더링된다), widthheight, xmlns 속성도 반드시 필요하다:
                                    
                                        
                                    
                                

Svg 문서의 좌상단 모서리는 x, y 좌표 (0, 0)이 되며, 한 지점의 위치는 좌상단 모서리에서 시작하는 px 단위(x축 양수는 오른쪽 방향, y축 양수는 아래쪽 방향)이다: <rect x="0" y="0" width="200" height="100"> 좌상단 모서리에서 시작하는 너비 200px, 높이 100px의 사각형

2. fillstroke 속성은 SVG 도형이나 텍스트, 그라디언트 및 패턴의 색을 설정한다:
                                    
                                        
                                    
                                
                                    
                                        
                                    
                                

░ Svg 이미지는 직접 만들기보다는(너무 어렵습니다 ㅡㅡ;), 대개 같은 벡터그래픽 프로그램으로 만들어씁니다..

➥ SVG 뷰박스

기본적으로 Svg 문서의 1px 은 출력장치의 1px 에 매핑된다. - 곧, 사용자 단위와 화면 단위는 1:1의 비율로 동작한다: 지금 SVG 캔버스 전체 크기는 200 x 200 (px)이다. 그러나 viewBox 속성을 사용하여 (0, 0) 좌표에서 시작하는 100 x 100 Svg 이미지를 200 x 200 화면에 표시하고, 100 x 100 영역을 효과적으로 확대하여 이미지를 두 배 크기로 표시할 수 있게 된다!

[ 사용자 좌표계: 사용자 단위와 뷰포트 단위의 매핑 ]
                                        
                                            
                                        
                                    

viewBox 속성은 사용자 공간에서 SVG 뷰포트의 시작 위치(min-x min-y)와 크기(width height)를 정의한다(값은 쉼표나 콤마로 구분한다). 그 결과, SVG 요소의 뷰포트(브라우저의 뷰포트가 아니다!) 경계에 매핑된 사각형의 사용자 공간이 생성되는 것이다!

<rect> 요소는 시작 지점(x, y), 너비와 높이(width, height) 및 사각형 둥근 꼭지점의 x, y 방향으로의 반지름(rx, ry)으로 정의된 Svg 사각형을 그려준다:

                                                
                                                    
                                                
                                            

시작 지점(x, y), 너비와 높이(width, height) 등을 바꾸어가면서 감을 잡아보십시오..

<circle> 요소는 원의 중심 좌표(cx, cy)와 반지름 길이(r)로 정의된 Svg 원을 그려준다:

                                                
                                                    
                                                
                                            

시작 지점 및 반지름 값을 바꿔줌으로써 간단히 반달 모양으로도 되고, 구멍난 원도 만들어지는군요..

<ellipse> 요소는 원의 중심 좌표(cx, cy)와 x, y 방면으로의 길이(rx, ry)로 정의된 Svg 타원을 그려준다:

                                                
                                                    
                                                
                                            

여기서는, 두 타원을 같은 지점에서 출발시킴으로써 겹쳐봤습니다 <svg> 요소의 내부 컨텐츠는 위에서 아래로 순차적으로 렌더링된다는 점 기억하세요..

<line> 요소는 선의 시작점(x1, y1)과 종단점(x2, y2) 좌표로 정의된 Svg 직선을 그려준다:

                                                
                                                    
                                                
                                            

<polyline> 요소는 연결된 직선들의 그룹으로서, 그 직선들의 모든 포인트는 points 속성 하나에 포함된다. 한편, 닫힌 다각형은 그저 첫 포인트와 마지막 포인트 지점을 같은 값으로 설정해주는 것만으로 만들어진다:

                                                
                                                    
                                                
                                            

각 포인트는 반드시 (x, y) 좌표를 가져야하며 공백이나 쉼표, 줄바꿈 등으로 서로 구분된다 곧, 포인트 목록 (0, 0), (1, 1)은 0 0 1 1이나 0 0, 1 1로 표기해준다!

폼 작성하기

Form에 입력한 정보는 웹서버로 보내지고, 웹서버에서는 웹프로그램을 통해 폼을 처리한 뒤 그 결과를 받아 다시 브라우저로 돌려주게 된다

입력폼 작성의 기본
1. <form> 태그 안에서 <fieldset> 태그는 폼 요소를 하나의 구역으로 묶고 외곽선을 그려주는데, 바로 아래서 <legend> 태그로 제목을 붙여주면 스크린리더기 등에 도움이 된다:
상품 크기 선택
                                                    
                                                        
                                                    
                                                

라디오 버튼은 항시 <fieldset> 요소로 묶어주는 것이 좋다!

2. <label>과 <input>를 함께 사용하여 입력 항목을 만들면 화면 낭독기 등을 위해서도 도움이 되고, 라디오 버튼이나 체크박스 등에서 텍스트 터치로 선택이 가능해지며, 나아가 Css로 꾸며줄 수도 있다:
                                    
                                        
                                    
                                

hidden 필드는 주로 (화면상의 폼에는 보이지 않되)폼을 서버로 전송할 때 서버로 함께 전송되는 요소(예컨대, 사용자에게 굳이 보여줄 필요가 없지만 관리자가 알아야 하는 것 - id 중복여부 확인 등의 처리 정보)에 사용된다

password 필드는 입력하는 내용이 화면에 표시되지 않고 *표 등으로 보여진다는 점만 제외하면 text 타입과 같다 당연지사지만.. password 필드에서 value 속성은 사용할 수 없다!

검색상자 등 정보에 맞게 분화된 텍스트 필드들 multiple 옵션은 복수 입력을 가능하도록 한다

숫자 입력상자, 슬라이드 숫자바 브라우저에 따라서 각각 다른 모습으로 표시되기도 한다!

라디오 버튼(하나만 선택 가능), 체크박스(복수 선택 가능): 각 항목들 중 하나에 checked 옵션값을 주어 기본값으로 선택해둘 수 있다 함께 묶인 라디오 버튼들의 이름은 반드시 같아야 한다!

색상 선택상자 기본색상 값은 16진수여야 하며 색이름은 사용할 수 없다!

날짜 입력필드

날짜(및 시각) 입력필드 time(23:59), datetime(2019-01-01T23:59), datetime-local(2019-01-01T23:59)

파일 다운로드 대화상자 창을 만드는데, multiple 옵션은 복수 선택을 가능하도록 한다 참고로, 브라우저에서 파일 선택이나 찾아보기 등의 버튼이 표시되는데.. 클릭하여 파일을 선택하면 파일이 첨부된다!

폼 전송버튼/리셋버튼/단순버튼/이미지버튼 하지만, 이보다는 <button> 태그를 쓰는 것이 좋다!


<button> 태그를 사용하는 경우에는 화면낭독기에 이 곳에 버튼이 있다는 것이 명확히 전달되고, 또한 이 버튼에는 컨텐츠를 포함할 수도 있기에 아이콘을 추가하거나 Css를 이용해 원하는 형태로 꾸미는 것도 가능해진다:

                                                    
                                                        
                                                    
                                                

참고로, type= "button"은 자체 기능은 없고, 단지 스크립트로 연결해주는 역할만 수행한다!


<input> 입력필드의 모양은 브라우저마다 각각 차별성이 있고, 그래서 <input>만 아니라 폼 관련 태그들은 대개 스타일시트를 통해 (각 사이트에 맞추어 미리 설정해둔)독자적인 초기값을 사용한다 참고로, input type= "타입"에서는 브라우저 차원에서 각 타입 에 따르는 유효성 체크도 함께 이루어진다!

  • autofocus 특정 요소에 입력 커서를 놓는다
  • placeholder= "입력 메시지"; 입력란에 힌트를 표시하고 있다가 그 필드를 클릭하면 내용이 사라지도록 해준다
  • autocomplete 입력시 자동완성 기능 사용
  • readonly 읽기 전용 필드로 지정
  • required 필수 입력 필드로 지정
  • value= "값"; 기본값으로 보여질 내용(또는, 서버로 넘길 값) 지정
  • multiple 복수 입력(및 선택) 가능
  • min/max= "최소값/최대값";
  • step= "값 사이의 간격";
  • size= "크기"; 해당 필드의 물리적 크기, 또는 보이는 글자 수 지정
  • minlength/maxlength= "최소/최대 입력가능 문자수"
  • disabled 입력 필드로 진입 불가 textarea 필드에 약관 등을 넣어 읽기만 하도록 할 때 등..
텍스트 입력영역
<textarea>는 (게시판에서 게시물을 입력하거나 회원가입 양식에서 사용자 약관을 표시하는 등의)텍스트 입력 영역을 만드는데, 옵션으로 지정한 글자수라인수 보다 더 커지면 스크롤 막대가 생겨난다:
                                    
                                        
                                    
                                

이 영역 안은 <pre> .. </pre>에서와 같은 방식으로 작동된다!

드롭다운 목록
<select>(목록 범위) 및 <option>(목록 항목들)은 드롭다운 목록을 만드는데, <option> 항목들은 <optgroup label= "그룹명"> .. </optgroup> 식으로 서로 다른 그룹별로 묶어줄 수도 있다:
                                    
                                        
                                    
                                

multiple 옵션값은 [Ctrl] 키와의 조합으로 복수 선택이 가능하도록 한다!

Progress와 meter
<progress>는 작업의 현재 진척 상황을 보여주는 색상 막대를, <meter>는 전체에서 차지하는 비중을 나타내는 색상 막대를 만든다:
                                    
                                        
                                    
                                

참고로, 자바스크립트를 이용하면 움직이는 진행 상황을 나타낼 수 있다!

wave