[엘리스sw] 1주차 1일 - HTML/CSS 기초 문법
◆ 웹사이트의 정보와 디자인
◆ 웹사이트 레이아웃에 영향을 미치는 요소
◆ 웹사이트의 정보와 디자인
웹을 구성하는 요소
· HTML : 정보 or 설계도
· CSS : 디자인 or 스타일링
· JavaScript : 기능과 효과
웹사이트 제작시 고려 사항
· 웹 표준 : 웹사이트를 작성할 때 따라야 하는 공식 표준이나 기술 규격, 강제성은 없으나 검색엔진 최적화에 도움됨.
· 웹 접근성 : 장애의 여부와 상관없이 모두가 웹사이트를 이용할 수 있게 하는 방식
· 크로스 브라우징 : 모든 브라우저 또는 기기에서 사이트가 제대로 작동하도록 하는 기법
HTML 기본 태그
HTML
· Hyper Text Markup Language
· 웹사이트에서 눈에 보이는 정보나 특정 구역을 설정할 때 사용하는 언어
· 버전이 업그레이드되면서 자주 사용되지 않는 언어는 사라지고, 새로운 용어가 등장함.
ex. article, aside, area → HTML5
HTML 기본 태그
태그명 | HTML이 갖고 있는 고유 기능 <열린태그></닫힌태그> 형태로 입력 (닫힌 태그가 없는 것도 있음) |
속성 | HTML 태그가 갖고 있는 추가 정보 |
속성값 | 어떤 역할을 수행할지 구체적인 명령을 진행 |
HTML 문서의 기본 구조
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0,
maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
</body>
</html>
<!DOCTYPE html> | HTML5라는 신조어로 문서를 선언하는 태그 |
<html> ... </html> | HTML 문서의 시작과 끝 모든 HTML 태그들은 이 <html> 태그 안쪽에 입력 |
<head> ... </head> | 웹사이트의 간단한 요약 정보를 담는 영역 (저작자, 키워드 등) 웹사이트에서 노출되지 않는 정보 |
<meta charset="UTF-8"> | character setting의 약자를 나타내는 문자 코드 모든 문자를 웹 브라우저에서 깨짐 없이 표시하겠다는 의미 |
<body> ... </body> | 웹사이트에서 사용자의 눈에 보이는 정보를 담는 영역 이미지나 텍스트처럼 출력되는 정보 |
<img> 태그
<img src="apple.png" alt="사과">
- <img> 태그 : 이미지 삽입, 닫힌 태그 없음.
- src 속성 : 이미지 파일 경로
- alt 속성 : 이미지가 출력되지 않는 경우, 텍스트 정보로 대체 (웹 접근성 고려)
<h> 태그
<h1> 제목입니다 </h1>
· Heading의 약자로 제목이나 부제목을 표현함
· 숫자가 클수록 폰트 사이즈가 작으므로 숫자는 정보의 중요도를 나타냄.
· <h1> 태그는 하나의 html 문서에서 1회만 사용됨. (가장 중요한 정보)
<p> 태그
<p>이것은 문단입니다</P>
· Paragraph의 약자, 본문 내용을 표현
· 웹사이트의 중요 정보를 담는 태그
· 나타내고자 하는 내용을 열린 태그와 닫힌 태그 사이에 입력
<ul> 태그
<ul>
<li>휘낭시에</li>
<li>마들렌</li>
<li>브라우니</li>
</ul>
· Unordered list의 약자로, 순서가 없는 동급의 요소들로 리스트 생성
· 메뉴 버튼 만들 때 사용됨.
구조를 잡을 때 사용하는 태그
<header>, <nav> 태그
<header> <!-- 상단 영역 -->
<img src="" alt="">
<nav> <!-- 메뉴 영역 -->
<ul>
<li><a href="">홈</a></li>
</ul>
</nav>
</header>
· <header> : 웹사이트의 머리글을 담는 공간, 가장 먼저 보여지는 부분
· <nav> : 메뉴 버튼을 담는 공간 (navigation)
· <ul>, <li>, <a>와 함께 사용
<main>, <article> 태그
<main role="main"> <!--본문 영역-->
<article> <!--정보 영역-->
<h1>제목</h1>
</article>
</main>
· <main> : 문서의 주요 내용을 담음. Explorer는 지원하지 않으므로 role="main" 속성 필수로 입력해야됨.
· <article> : 정보를 담고 구역을 설정함. 표준에 따라 <h#>태그로 제목을 적어줘야 함.
<footer> 태그
<footer>
<div> <!--회사 정보-->
<p>주소: 깐따삐아별 안드로메다</p>
<p>이메일: andromeda@abc.com</p>
</div>
<div> <!--전자상거래소비자보호법 필수 정보-->
<p>사업자등록번호: 000-000-1234 | 대표: 도우너</p>
<p>통신판매업신고번호: 제1234-은하계-하하호호</p>
</div>
</footer>
· <footer> : 사이트 가장 하단의 정보 표기
· <div> : 임의의 공간을 만들 때 사용
HTML 태그의 두 가지 성격: Block, Inline
Block 요소와 Inline 요소
· 두 요소를 구분 짓는 세 가지 주요 특징 : 줄바꿈 현상, 가로세로 생성 여부, 상하 배치
블록 요소 | 인라인 요소 | |
줄바꿈 현상 | y축 정렬 형태로 출력 (줄바꿈 O) | x축 정렬 형태로 출력 (줄바꿈 X, 한줄에 출력) |
가로세로 생성 여부 | 공간을 만들 수 있음 가로 세로 생성 O |
공간을 만들 수 없음 가로 세로 생성 X |
상하 배치 | 상하 배치 작업 가능 | 상하 배치 작업 불가능 |
CSS
Cascading Style Sheet
· 정보(HTML)와 디자인(CSS)의 분리
· 문서의 레이아웃과 스타일 정의
· HTML로 작성된 정보를 꾸며주는 언어
· 선택자 : 디자인을 적용할 HTML 영역
· 속성 : 어떤 디자인을 적용할지 정의
· 속성값 : 어떤 역할을 수행할지 구체적으로 명령. 세미콜론(;) 필수 입력
div {
background-color: #3498db; /* 배경색을 파란색으로 지정 */
color: #ffffff; /* 글자 색상을 흰색으로 지정 */
font-size: 16px; /* 폰트 크기를 16px로 지정 */
font-family: 'Arial', sans-serif; /* 폰트 패밀리를 Arial 또는 sans-serif로 지정 */
}
CSS 연동 방법 세 가지 : Inline, Internal, External
Inline Style Sheet
· html 태그 안에 style이라는 속성으로 직접 지정
<h1 style="color: red;"> coding 101 </h1>
Internal Style Sheet
· head 태그 안에 <style></style>로 넣기
<head>
<style>
h1 { background-color: yellow; }
</style>
</head>
External Style Sheet
· head 태그 안에 외부 CSS 파일 불러오기
· html과 CSS를 각각 다른 파일로 관리하기 때문에 가독성이 높고 유지보수가 쉽기 때문에 이 방법으로 사용함.
<head>
<link rel="stylesheet" href="style.css">
</head>
· rel : 문서의 성격, 정보
· href : 파일 경로 및 이름
CSS 선택자
선택자(Selector)
· CSS 언어가 HTML의 특정 요소를 선택하는 방법
· 종류 : Type(타입), Class(클래스), ID(아이디)
- Type : 태그
- Class : 태그에 대한 별명, 이름 앞에 점(.) 붙이기
- ID : 태그의 이름, 이름 앞에 샵(#) 붙이기
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
/* Type 선택자 */
p {
color: blue;
}
/* Class 선택자 */
.highlight {
background-color: yellow;
}
/* ID 선택자 */
#header {
font-size: 24px;
}
</style>
<title>CSS Selectors Example</title>
</head>
<body>
<p>This is a paragraph with a <span class="highlight">highlighted</span> word.</p>
<div id="header">This is a header.</div>
</body>
부모 자식 관계
· 특정 태그가 다른 태그를 포함하는 구조
· 포함하는 태그가 부모, 포함되는 태그가 자식
부모 태그와 자식 태그의 동일한 속성에 대한 속성값이 다를 때
<header>
<h1>Header h1</h1>
<p>Header p</p>
</header>
header { color: red; }
h1 { color: blue; } /* 이게 우선으로 적용됨 */
p { color: green; }
· 부모 자식 관계 : <header>과 <h1>, <p>
· 형제 관계 : <h1>과 <p>
· 부모 태그와 자식 태그가 동일한 속성에 대한 서로 다른 속성값을 가질 경우 :
→ 자식 태그는 부모로부터 상속받지 않고, 자신의 속성값을 가짐.
원하는 곳에만 css 속성을 적용하기 위해 부모를 구체적으로 표시
<header>
<h1>Header h1</h1>
<p>Header p</p>
</header>
<footer>
<h1>Footer h1</h1>
<p>Footer p</p>
</footer>
header { color: red; }
h1 { color: blue; }
p { color: green; }
이러면 h1 태그마다 모두 적용되므로, 부모 태그를 적어주어서 원하는 곳에만 적용되도록 함.
header { color: red; }
header h1 { color: blue; } /* header에 있는 h1태그 */
header p { color: green; }
캐스케이딩
CSS의 우선순위를 결정하는 세 가지 요소 : 순서, 디테일, 선택자
순서
<p>Hello World</p>
p { color: red; }
p { color: blue; }
더 나중에 적용된 것이 우선순위가 높음.
디테일
<header>
<p>Hello World</p>
</header>
header p { color: red; }
p { color: blue; }
더 구체적으로 작성된 선택자의 우선순위가 높음.
선택자
• style > id > class > type 순으로 우선순위가 높음
CSS 주요 속성
<p class = "paragraph"> 문단이다! </P>
.paragraph { width: 500px; height: 500px; }
- width 속성 : 선택한 요소 넓이 / 고정값(%), 가변값(px)
- height 속성 : 선택한 요소 높이
- font-size : 글자 크기
- font-family : 글꼴, 브라우저마다 지원하는 폰트가 달라서 여러 개를 기입하는 것이 좋음. 마지막은 sans-serif는 디폴트로 지정(모든 브라우저에서 지정 가능)
- font-style : 글자 기울기
- font-weight : 글자 두께, 100~900 사이 숫자 (100단위)
- border-style : 테두리 (solid / dotted)
- background-repeat : repeat-x(x축반복), repeat-y(y축반복), no-repeat
- background-position : 공간 안에서 이미지 좌표 변경(to, bottom, center, left, right 등)
- background-image : url(이미지 경로) / 여기서 url은 함수임
속성값 사이에는 순서가 없음. 사이에 공백 넣고, 맨 마지막에 세미콜론 쓰기
background: yellow url('elice_logo.png') no-repeat center;
◆ 웹사이트 레이아웃에 영향을 미치는 요소
박스모델
• margin : border 바깥쪽에서 왼쪽에 여백을 만듦 (left, right, top, bottom)
• padding : border 안쪽에서 여백을 만듦. 공간이 여백을 포함한 크기로 변경됨. (left, right, top, bottom)
<style>
div { margin: 100px 0 0 100px; }
</style>
· top right bottom left 순서로 한 줄에 작성 가능
· 12시 시계방향 (top → right → bottom → left)
Block 요소와 Inline 요소
Block 요소 | Inline 요소 |
<p>태그 | <a>태그 |
줄바꿈 현상이 나타남 | 줄바꿈 현상 없음 |
width, height 값 사용 가능 → 공간 만들기 O | width, height 값 적용 불가 → 공간 만들기 X |
margin과 padding 값 사용 가능 → 상하 배치 작업 가능 | margin, padding, bottom은 top, bottom만 가능함 |
마진 병합 현상
CSS에서 두 개 이상의 수직으로 인접한 블록 요소 간에 마진이 겹치는 현상
특정 상황에서 마진이 하나로 합쳐져서 더 큰 마진이 적용되는 현상
형제지간의 마진 병합 현상
<body>
<div class="box1">box1</div>
<div class="box2">box2</div>
</body>
.box1 {
margin-bottom: 150px;
border: 1px solid; }
.box2 {
margin-top: 100px;
border: 1px solid black; }
상식적으로 box1의 bottom과 box2의 top을 더한 값인 250px이 되어야 함.
하지만 여기서 더 큰 값인 box1의 마진값인 150px로 설정됨.
margin-bottom과 bottom-top 중 숫자가 큰 값으로 적용됨.
부모 자식간의 마진 병합
<main role="main">
여기서부터 메인의 시작
<article>
안녕하세요
</article>
</main>
article {
width: 200px;
height: 200px;
margin-top: 100px;
border: 1px solid black;
}
main {
margin-top:50px;
}
여기서 부모태그인 main의 위쪽 여백이 50px이여야 하는데, 마진 병합 현상으로 자식태그인 article의 margin-top인 100px이 적용됨.
자식인 <article> 뿐만 아니라 부모인 <main>에도 영향을 미침.
레이아웃에 영향을 미치는 속성
display, float, clear
display
·block과 Inline 요소의 성격을 바꿀 때 사용
· inline-block을 사용하면 두 요소의 성격을 모두 가짐, 내비게이션 버튼을 만들 때 주로 사용됨.
p { display: inline; }
a { display: block; }
a { display: inline-block; }
float
· 선택된 요소를 왼쪽 끝 혹은 오른쪽 끝에 정렬시키고자 할 때 사용
· 이름 그대로 선택자를 띄워 새로운 레이어층을 만드는 것
· 왼쪽에서부터 정렬 : .left
· 오른쪽에서부터 정렬 : .right
<div class = "left"> 왼쪽부터 </div>
<div class = "right"> 오른쪽부터 </div>
.left { float: left; }
.right { float: right; }
· 레이어가 겹쳐지지 않는 상태로 왼쪽(혹은 오른쪽)에서부터 정렬시키고 싶은 경우
→ float: left;(float: right;)을 연속적으로 입력
<div class = "left"> 왼쪽부터 </div>
<div class = "next"> 이것도 왼쪽부터 </div>
.left { float: left; }
.next { float: left; }
clear
· float에 대한 속성을 제어하고자 할 때 사용
· float 사용하였으면 반드시 clear도 쓰기
clear
<header></header>
<aside class="left"> 왼쪽이당 </aside>
<main></main>
<aside class="right"> 오른쪽이당 </aside>
<footer></footer>
footer { clear: both; } /* 양쪽 모두, 보통 both만 씀. */
float으로 왼쪽 오른쪽 양끝에 요소를 배치한 경우 : 그 다음 오브젝트는 그 아래가 아니라 그 뒤로 배치됨.
clear의 위치는 float을 마지막으로 사용한 지점의 바로 다음 태그에 사용.
위 예시에서는 </aside>의 다음부분인 <footer>에다가 clear값을 넣으면 됨.
브라우저와 공간 사이의 공백 제거하기
· <html>과 <body>태그는 margin과 padding값을 가지므로 초기화 해주어야 함.
· 둘 중 하나는 맨 위에 디폴트로 넣기
<style>
html, body {
margin: 0;
padding: 0;
}
</style>
*로 모든 html 태그 선택 가능
<style>
* {
margin: 0;
padding: 0;
}
</style>
width 속성값을 소수점 5째자리까지 정밀하게 입력하는 이유
: 브라우저의 렌더링 엔진에 따라 미묘한 차이가 발생할 수 있기 때문임.
- 브라우저마다 소수점 이하의 값들을 처리하는 방식이 다를 수 있으며, 정밀한 레이아웃을 위해서는 가능한 한 정확한 값을 입력하는 것이 좋음.
- 레이아웃을 구성하는 요소들 사이에 공백이나 간격이 발생하는 경우가 있는데, 이를 최소화하기 위해 소수점 5째자리까지 입력하여 요소들 사이의 간격을 균일하게 맞출 수 있음.
- 이러한 작은 차이가 큰 레이아웃 변경이나 반응형 디자인에 영향을 줄 수 있으므로, 정밀한 값을 입력하는 것이 권장됨.
* 엘리스측에서 블로그 작성 허락
허용 가능한 경우
• 본인이 직접 정리하여 글로 작성, 도식화, 이미지로 제작하는 경우
• 화면캡쳐본은 출처를 밝힌다는 조건 하에 일부 기재가 가능
허용 불가능한 경우
• 실습 코드를 기재하는 경우