■ HTML이란?
○ HTML : HyperText Markup Language
- HyperText : 하이퍼 링크(참조)를 통해 어떤 문서에서 다른 문서로 접근할 수 있는 텍스트
- Markup : 표시 (콘텐츠를)
- Language : 언어
> 하이퍼 텍스트와 콘텐츠를 표시해주는 언어
> 웹브라우저를 통해 표시되는 웹페이지의 콘텐츠를 정의하기 위해 사용하는 언어
○ HTML은 콘텐츠를 정의
- 개발자는 HTML 코드로 웹페이지에 어떤 내용이 표시될 지를 정의함
- 완성된 HTML코드를 웹브라우저에 로딩하면 웹페이지가 만들어진다.
- HTML코드가 웹브라우저를 통해 해석되고 표현되는 과정을 렌더링이라 한다.
○ HTML 문서 : 확장자가 HTML
- 텍스트 편집기 : Brackets, VScode
- 웹 브라우저 : 크롬, 엣지
■ 개발자 도구 / 코드 에디터
○ 웹사이트 개발용 도구로, 대부분의 최신 브라우저에는 개발자
도구가 탑재 되어 있다. HTML CSS 코드 확인, 모바일 모니터링,
네트워크 상태점검, 스크립트 명령어 확인 등 편의를 제공
○ 단축키 F12버튼 누르면 개발자도구 열림
○ 코드에디터 : 프로그래머가 소스코드를 편집하기 위해 사용하는 소프트웨어
- 텍스트를 더 빠르게, 더 편하게 작성하기 위해서 사용
- 자동완성 + 하이라이팅 기능이 추가
■ HTML 코드 기초 문법
○ 태그 : HTML 코드에서 정보(콘텐츠)를 정의하는 형식
○ 태그
- <> 홀 화살괄호 와 </> 슬러시로 시작과 끝을 표시한다.
- 태그명은 콘텐츠의 성격과 의미를 나타냄
- 단일태그는 콘텐츠를 감쌀필요가 없어서 시작과 끝을 구분하지 않음
<태그> or <태그/>
- 태그 사용 형태
<태그명> 내용 </태그명>
○ 속성
- 태그의 부가적인 기능을 정의, 선택사항
- 시작태그의 내부에 정의 개수에는 제한 없음
<태그명 속성명 ="속성값"> 내용 </태그명>
○ 주석
- 사람들간 공유하기 위한 메모로 사용
<!-- 주석내용 -->
<p>안녕하세요</p>
<br><br> <!--줄을 띄어주는 태그-->
<strong style="color: #00ffff;">안녕하세요</strong>
<!-- style 속성을 사용하고 스타일에 맞게 넣어주는 태그 -->
■ HTML 문서의 구조
<!DOCTYPE html> <!--최신 표준문법으로 작성된 문서의미-->
<html> <!--내용-->
<head> <!--설정-->
<meta charset="UTF-8"> <!--단일 태크-->
<title>홈페이지</title> <!--문서 제목-->
</head>
<body>
내용을 작성
</body>
</html>
○ <!DOCTYPE html>
- 문서의 첫부분에서 문서 유형을 지정하는 단일태그
- 현재 표준으로 사용되고 있는 HTML 버전을 사용하기 위해 적어주는 타입
○ <html></html>
- 문서유형을 지정한 후 실제 문서가 시작되고 끝나는 것을 나타냄
- 내부에 다양한 태그들이 포함되어 문서의 내용을 구성
○ <head></head>
- 웹 브라우저 화면에는 보이지 않지만 웹 브라우저가 알아야 할 정보
○ <meta charset ="utf-8">
- 문자 인코딩 및 문서 키워드 등에 대한 요약 정보를 기입하는 단일 태그
- 한글을 표시하기 위해 문자 세트를 지정하는 작업 영문과 한글을 모두 사용 하기 위해 UTF-8 방식을 사용
○ meta 태그
- HTML문서의 메타 데이터를 정의
- 메타데이터 : 데이터에 관한 구조화된 데이터 (데이터를 설명하는 데이터)
- 항상 head 태그 안에서 사용한다.
- 문자세트, 페이지 설명, 키워드등
- 웹페이지에 대한 정보를 제공 하므로 검색엔진이 검색시 참고
○ 주로 사용되는 속성
- charset : 문자 세트
- name : 문서 정보
- content : 메타데이터 내용
※ UTF-8
유니코드를 위한 가변 길이 문자 인코딩 방식
Unicode Transformation Format - 8bit
1byte 기준 인코딩
○ <title> </title>
- 문서의 제목을 나타낸다.
○ <body></body>
- 실제 브라우저 화면에 표시될 내용을 입력
- 텍스트 태그, 이미지 태그, 인터페이스 등
- 태그 내부에 태그를 포함하는 방식으로 콘텐츠를 구성할 수 있다.
■ 텍스트 태그
○ 문단(Paragraph) : p 태그
- 문단 요소를 나타내는 태그 문단과 문단 사이에 공백이 있음
<p>문단사용1</p>
<p>문단사용2</p>
○ 제목(Headine) : h 태그
- 제목요소를 나타내며 숫자 1일 때 가장 크고 6일때 가장 작음
<h1>제목1</h1>
<h2>제목2</h2>
<h3>제목3</h3>
<h4>제목4</h4>
<h5>제목5</h5>
<h6>제목6</h6>
○ 수평선 : hr 태그
- 주제 변경 또는 내용 구분을 위해 사용
<p>문단사용1</p>
<hr>
<p>문단사용2</p>
○ HTML 텍스트의 특징
- 엔터로 줄바꿈을 표시하지 않는다. (코드에서 무시함)
- 스페이스를 통한 공백도 한번씩 밖에 인정되지 않음\
○ 줄바꿈 태그, 공백문자
- 공백을 표시 하고자 할때는 사용
- br 태그가 줄바꿈 담당
■ 태그의 구분
○ 태그의 구분
- 블록 레벨 요소 : 자기가 속한 영역의 너비를 모두 차지하여 블록을 형성한다.
- 인라인 요소 : 자기에게 필요한 만큼 공간만 차지
○ 블록 내부에 블록을 넣어주면 새로운 층이 생겨서 공간을 차지한다.
○ 인라인 요소 내부에는 인라인 요소를 넣어도 자신만의 공간만을 차지한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>홈페이지</title>
</head>
<body>
<h1>제목표시</h1>
<p>문단을 나타내는
<p>새로운 문단 태그</p>
<strong>진하게 </strong>
<em>기울이기<mark>형광색 </mark> </em>
</p>
<!-- P태그를 3개로 인지해준다. -->
</body>
</html>
■ 이미지 태그
○ img 태그 이미지를 표시할 때 사용하는 태그
- 단일 태그로 닫아줄 필요 없다.
- 콘덴츠를 적어주는 대신 표시할 이미지에 대한 정보를 속성으로 지정
기본형태
<img src= "표시 이미지 파일" alt="이미지설명" />
- src 속성 : 표시할 이미지의 위치 정보와 파일명을 입력 받는 속성(이미지의 URL을 입력)
※ URL (Uniform Resource Locator) : 주어진 고유 자원 주소
이미지가 어디에 있는지 알려주기 위해 사용하는 규약
- alt (Alternative:대안, 대체) : 대체 텍스트 역할
이미지가 로딩되기전이나 로딩에 실패시 대체 텍스트가 표시
○ 이미지 크기조절
<img src= "표시 이미지 파일" alt="이미지설명" width="너비값" height="높이값" />
- 너비와 높이는 기본적으로 픽셀(px) 단위로 적용된다.
- ""는 안넣어도 되지만 넣는 것이 기본
■ 컨테이너 태그
○ 컨테이너 태그 : 콘텐츠나 레이아웃에 영향 없이 여럿을 묶어 관리하기 편하게 만드는 역할
- 콘텐츠 구별, 공통 시타일 적용시 사용
- <div></div> : 블록 레벨 컨테이너
- <span></span> : 인라인 컨테이너
<body>
<div>
<h1>HTML 배우기</h1>
<p>기본 배우기</p>
<strong>
<span>기초</span> 보기
</strong>
<hr>
</div>
<h1>CSS 배우기</h1>
<p>구조 확인하기</p>
</body>
■ 전역속성
○ 전역 속성(Global attributes)
- 모든 HTML 태그의 공통으로 사용할 수 있는 속성
- 속성이란 : 태그의 부가적인 기능을 정의
- 시작 태그의 내부에 정의, 개수는 특별한 제한 없음
○ 속성 추가방법
<태그명 속성명="속성값" 속성명="속성값"> 내용 </태그명>
○ 대표속성
- id : 요소에 고유한 이름을 부여하는 식별자 역할 속성
- class : 요소를 그룹 별로 묶을 수 있는 식별자 역할 속성
- style : 요소에 적용할 css 스타일 선언하는 속성
- title : 요소의 추가 정보를 제공하는 텍스트 속성, 툴팁
※ 툴팁 : 마우스 올렸을때 뜨는 메모창
○ id와 class 차이
- id : 태그에 유일한 이름을 붙이고 싶을 때 사용함
전체 페이지 에서 단하나의 요소에만 지정
- class : 유형별로 분류하고 싶을 때 사용 (다중, 중복가능)
반복적으로 쓰이는 유형으로 반복해서 사용가능
- CSS에서는 id명 앞에 #(Crosshatch) 을 넣어줌, class 앞에는 .(Dot)
id속성이 class 보다 우선적으로 적용됨
ID, Class 사용하기
<body>
<div id="htmsd">
<h1 class="title">HTML 배우기</h1>
<p>기본 배우기</p>
<hr>
</div>
<div id="csssd">
<h1 class="title">CSS 배우기</h1>
<p>구조 확인하기</p>
</div>
</body>
Title 사용하기
<body>
<div id="htmsd">
<h1 class="title" title="열심히">HTML 배우기</h1>
<p>기본 배우기</p>
<hr>
</div>
<div id="csssd">
<h1 class="title">CSS 배우기</h1>
<p>구조 확인하기</p>
</div>
</body>
Style 사용하기
<body>
<div id="htmsd">
<h1 class="title" title="열심히">HTML 배우기</h1>
<p>기본 배우기</p>
<hr>
</div>
<div id="csssd" style="background-color: red; color: aqua;">
<h1 class="title">CSS 배우기</h1>
<p>구조 확인하기</p>
</div>
</body>
■ 링크 (Link)
○ 링크(Link) : 현재 문서에서 다른문서로 이동하는 연결
○ a 태그 (anchor)
- href(hyper reference) 속성을 통해 다른 url로 연결하는 링크를 만든다.
- 인라인 요소
- targer 속성 : 현재탭("_self"), 새로운탭("_blank")
Web page 이동
<body>
<a style = "color: red; " href="https://www.naver.com/">
네이버 이동</a>
<br>
<a href="https://www.google.com" target="_blank">
구글 이동</a>
</body>
■ 목록
○ 목록 : 연관 있는 항목(Item)들을 나열한 것을 의미
- 순서있는 목록 (Ordered List)과 순서없는 목록 (Unordered List)로 구분
- 목록안의 항목 (List item) <li></li> 태그 : 항목 하나를 표현시 사용하는 태그
- 모두 블록 레벨 요소임 <ol><ul><li>
○ 순서 없는 목록 <ul></ul> 태그
○ 순서 있는 목록 <ol></ol> 태그
<body>
<h2>동물 목록</h2>
<ul>
<li>사자</li>
<li><strong>호랑이</strong></li>
<li>늑대</li>
<li>고양이</li>
</ul>
<h2>수업목록</h2>
<ol>
<li>디자인</li>
<li style="background-color: burlywood;"><mark>html</mark></li>
<li>css</li>
<li>javascript</li>
</ol>
</body>
■ 입력(input)
▶ input 태그
- 사용자로부터 값을 입력 받을 수 있는 대화형 컨트롤
- 기본적으로 인라인 요소로 단일 태그
○ type속성
- 값에 따라 입력 요소의 형태나 입력 데이터 유형이달라짐
○name 속성
- 입력 항목에 대한 이름으로 식별자
<body>
<input name="tx" type="text" placeholder="입력"> <br><br>
<input type="button"> <br><br>
<input type="color"> <br><br>
<input type="range"> <br><br>
<input type="date"> <br><br>
</body>
▶ select 태그
- 다수 선택지를 포함 할수 있는 선택 메뉴
- option 태그를 사용해서 작성할 수 있다.
- value 주후 처리 (자바스크립트를 통한 처리)
<select name="st" id="a">
<option value="">html</option>
<option value="">css</option>
<option value="">js</option>
</select>
▶ form 태그
- 서버로 전송되는 태그
- 서버와 클라이언트의 관계에서 요청 및 응답을 해주는 태그
■ CSS 란? CSS의 역할
○ CSS (Cascading Style Sheets)
- Cascading : 계단식 위에서 흐르는
- Style : 양식
- Sheets : 판, 한장
- 계단식으로 스타일을 정의하는 문서
- HTML 문서에 스타일을 더해준다. HTML은 계단식 구조를 지니고 있다.
○ CSS 기본문법
- 선택자 : 어떤 요소에 스타일을 적용할지 정보
- {중괄호} : 선택한 요소에 적용할 스타일을 정의 하는 구간
- 속성명 : 어떤 스타일을 정의하고 싶은지에 대한 정보
- 속성값 : 어느정도의 수치에 맞게 정의하고 싶은지에 대한 정보
○ html에서 연결방법
<head>
<link rel = "stylesheet" type="text/css" href = "css/style.css">
</head>
○ CSS주석처리
p{
background-color: blue;
/* p태그에 파랑 넣기 */
}
○ HTML에 CSS를 더해주는 방식
- 인라인 스타일 : 태그에 직접 기술 (잘 사용하지는 않는다.)
코드를 유지보수하기 어렵다. 직접 하나씩 하나씩 올려줘야 됨
- 스타일 태그 : 스타일 시트를 위한 HTML에 태그 추가 기술
- 문서 간의 연결 : 스타일 시트 문서를 따로 작성하여 HTML 문서와 연결
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="style.css">
<!-- 문서간 연결 -->
<style>#a{color: red;}</style>
<!-- 스타일 태그 -->
</head>
<body>
<p style="color: blue;">안녕</p>
<!-- 인라인 스타일 -->
<p id="a">안녕</p>
<p>안녕</p>
<body>
</html>
■ 선택자 기본
○ 선택자
- 어떤 요소에 스타일을 적용 할 것인지에 대한정보
- 선택자 종류 : 기본, 그룹, 특성, 결합, 의사 클래스, 의사 요소
○ 기본 선택자
- 전체 선택자 : *(애스터리스크) 문서 내의 모든 요소를 의미 하는 기호
*{
background-color: aqua;
}
- 태그 선택자
주어진 이름을 가진 요소를 선택 '유형 선택자' 라고도 한다.
주어진 이름을 가진 요소가 다수일때 모두 선택
p{
background-color: aqua;
}
- 클래스 선택자
전역 속성으로 동일한 명의를 모두 선택
<body>
<p class="a1">안녕</p>
<p class="a1">안녕</p>
<p class="a2">안녕</p>
<body>
.a1{
background-color: red;
}
.a2{
background-color: blue;
}
- 아이디 선택자
고유한 식별자 역할을 하는 전역속성으로
id속성값을 가진 요소를 선택
id속성값을 동일하게 하면 여기에서는 HTML, CSS 에서는 문제
없어 보이지만 웹표준을 위반하게되어 Javascript에서 문제 발생할 수 있음
<body>
<p id="a1" class="a b">안녕</p>
<!--클래스 이름을 두개 선택하는 법-->
<p id="a2" class="a">안녕</p>
<p id="a3" class="a">안녕</p>
<body>
.a{
background-color: blueviolet;
}
.b{
background-color: aqua;
}
#a2{
background-color: red;
}
○ 그룹선택자
다양한 유형의 요소를 한꺼번에 선택하고자 할 때 사용한다.
쉼표(,)를 이용해 선택자를 그룹화한다.
<body>
<p id="a1">안녕</p>
<p id="a2">안녕</p>
<p id="a3">안녕</p>
<h1>제목1</h1>
<h2>제목2</h2>
<body>
#a1, h1{
background-color: blue;
}
○ 선택자 우선순위
선택자가 겹치는 경우, 기본적으로 나중에 작성된 스타일이 적용
선택자가 다르지만 요소가 겹치는 경우 선택자 우선순위에 의해 적용될 스타일이 결정
아이디 선택자 > 클래스 선택자 > 태그 선택자
- 나중 작성 스타일 우선 적용
<body>
<p id="a1" class="a">안녕</p>
<p id="a2" class="a">안녕</p>
<p id="a3">안녕</p>
<body>
.a{
background-color: blue;
color: white;
}
.a{
background-color: red;
/* 하얀색 글자는 넣어지지만 배경은 아래쪽이 우선 */
}
- 선택자 우선적용
<body>
<p id="a1" class="a">안녕</p>
<p id="a2" class="a">안녕</p>
<p id="a3">안녕</p>
<body>
#a2{
background-color: blue;
}
.a{
background-color: red;
/* 클래스는 a인데 id a2는 미적용 */
}
p{
background-color: aqua;
/* a 클래스에 미적용 */
color: white;
text-align: center;
}
■ 텍스트 꾸미기
○ font-family
- 택스트에 사용할 글꼴 지정할때 사용
- 사용자의 스스템에 해당 글꼴이 설치 되어 있지 않을경우를 대비 여러 글꼴을 백업으로 지정
- 기본사용법
선택자 {
font-family: 글꼴명, 글꼴계열;
}
* 선택자 : 스타일을 적용할 HTML 요소 지정
* 글꼴명 : 사용할 글꼴 이름지정, 이름에 공백시 (" ")로 묶어줌
* 글꼴 계열 : 글꼴명이 사용할 수 없을 때 사용할 글꼴 계열 지정
- 글꼴 지정 예시
p {
font-family: Arial;
/* 단일 글꼴지정 */
}
body {
font-family: "Times New Roman", Times, serif;
/* 여러글꼴 및 글꼴 계열 지정 */
}
- 글꼴 계열
* serif : 획 일부끝이 돌출된 형태 (예: Times New Roman)
* sans-serif: 획 일부끝이 돌출 없는 글꼴 (예: Arial)
* monospace: 고정 너비의 글꼴 (예: Courier New)
* cursive: 필기체 스타일의 글꼴(예: Brush Script)
* fantasy: 장식적인 글꼴(예: Papyrus)
* 글꼴 계열을 지정하면 해당 계열의 기본 글꼴이 사용됨
사용자의 시스템에 특정 글꼴이 설치되어 있지 않을 경우 유용한 백업방법임
○ font-size
단위 | 의미 |
px | 모니터 상의 화소 하나 크기에 대응하는 절대크기 |
rem | <html> 기본글꼴에 대응하는 상대크기 |
em | 부모태그(상위태그)의 font-size에 대응하는 상대크기 |
<body>
body
<div>
body - div
<div>
body - div - div
</div>
</div>
</body>
body{
font-size : 30px;
}
body > div {
font-size: 2em;
}
body > div > div{
font-size: 2rem;
}
○ text-align
- 블록 내에서 텍스트 정렬 방식을 정의한다.
속성값 | 의미 |
left / right | 왼쪽 또는 오른쪽 정렬한다. |
center | 가운데 정렬한다 |
justify | 양끝 정렬한다. (마지막 줄 제외) |
<body>
<div class="lt">왼쪽</div>
<div class="rt">오른쪽</div>
<div class="ce">중앙</div>
<div class="lr">
비상계엄하의 군사재판은 군인·군무원의 범죄나 군사에 관한 간첩죄의 경우와 초병·초소·유독음식물공급·포로에 관한 죄중 법률이 정한 경우에 한하여 단심으로 할 수 있다. 다만, 사형을 선고한 경우에는 그러하지 아니하다.
</div>
<br>
<span class="rt">스판오른쪽</span>
</body>
.lt{
text-align: left;
}
.rt{
text-align: right;
}
.ce{
text-align: center;
}
.lr{
text-align: justify;
}
○ color
- 텍스트의 색상을 정의한다. 다양한 방법으로 색상을 지정할 수 있다.
속성값 유형 | 의미 |
키워드 | 미리 지정된 색상별 키워드 사용 |
RGB 색상 코드 | # 여섯자리 16진수 값 형태로 지정 |
RGB 함수 | Red, Green, Blue의 수준을 각각 정의해 지정한다. |
<body>
<span id="a1">색상1</span><br>
<span id="a2">색상2</span><br>
<span id="a3">색상3</span><br>
<span id="a4">색상4</span><br>
<span id="a5">색상5</span><br>
<span id="a6">색상6</span><br>
</body>
#a1{color: red;}
#a2{color: #f3c;}
#a3{color: #ff33cc;}
#a4{color: rgb(130, 10, 200);}
#a5{color: rgb(10%,255,60%);} /*혼합사용금지*/
#a6{color: rgb(100%,0%,0%,0.5);
font-size: 2rem;}
■ display 속성
none | block | inline | inline-block |
보이지 않음 | 블럭 | 인라인 | 인라인 블럭 |
○ 인라인 요소
- 위치 같은 줄에 나란히 배치, 이전요소 바로 뒤에서 시작
- 크기는 콘텐츠의 너비만 차지 즉 너비와 높이를 직접 설정할수 없음
- 여백 상하 여백 미적용 또는 예상과 다르게 작동, 좌우여백은 적용
○ 블록 요소
- 새 줄에서 시작 사용 가능한 전체 너비를 차지, 다음요소는 블록 아래에 새줄로 배치
- 크기는 부모 요소의 전체 너비를 차지 너비와 높이 직접 설정 가능
- 여백은 상하 좌우 모든 방향의 여백 적용
○ 인라인 - 블록 요소
- 인라인 요소처럼 같은 줄에 나란히 배치, 블록 요소처럼 너비와 높이를 지정가능
- 크기는 콘텐츠의 너비만 차지 명시적으로 너비 높이 설정가능
- 여백은 상하좌우 모든 방향의 여백이 적용
■ 사용시나리오
○ 인라인 요소
- 텍스트의 일부를 스타일링할 때 사용
예를 들어, <span>을 사용하여 문장 내 특정 단어에 다른 색상, 폰트 또는 강조 스타일을 적용할 때.
- 하이퍼링크 생성
<a> 태그로 텍스트나 이미지에 링크를 추가할 때. 이는 문서 내에서 다른 섹션으로 이동하거나
다른 웹페이지로 네비게이션하는 데 사용
- 이미지나 다른 미디어
<img> 태그를 사용하여 텍스트와 함께 이미지를 인라인으로 배치할 때.
○ 블록 요소
- 주요 섹션 또는 레이아웃 요소를 구성할 때
<div>는 웹 페이지를 섹션으로 나누고, 컨테이너로서 스타일링과 구조를 제공하는 데 자주 사용됨
- 문단을 구분할 때
<p> 태그는 텍스트 블록을 문단으로 나누는 데 사용됨
- 제목과 하위 제목구분
<h1>부터 <h6>까지의 제목 태그는 문서의 제목과 하위 제목을 나타내는 데 사용됨
- 목록 생성
<ul>, <ol>, <li> 태그를 사용하여 순서가 있는(번호가 매겨진) 또는 순서가 없는(점으로 표시된) 목록을 만들 때.
○ 인라인 블록 요소
- 너비와 높이가 필요한 인라인 요소
예를 들어, 버튼 또는 작은 폼 요소를 인라인으로 배치하면서도 크기를 조정해야 할 때 사용됨
- 수평 메뉴 또는 네비게이션 바
메뉴 아이템을 가로로 나열하면서 각 아이템의 패딩, 마진, 크기를
조절할 수 있어야 할 때 인라인-블록이 사용됨
- 그리드 또는 타일 레이아웃
여러 요소를 가로로 나란히 배열하면서도 각각의 요소에 대한 레이아웃 제어가 필요한 경우
예를 들어 사진 갤러리나 카드 레이아웃을 구현할 때 사용됨
■ Inline-block 특징 및 종류
형태 | 특징 | 종류 |
인라인 요소 Inline Elements |
기본 너비 : 컨텐츠의 너비 한줄에 여러 개 배치 크기값을 가질수 없음 상하 마진은 가질 수 없음 |
span, a, small, big, em, u, ins, i, s, del, br, q, b, strong, mark, sub, sup, label, map, cite, addr, time |
블럭 요소 Block Elements |
기본 너비 : 100% 한 줄에 하나만 배치 너비와 높이를 가질수 있음 상하좌우 마진 가질 수 있음 |
div, p, table, ul, ol, li, dl, dd, td, tr, td th, form h1~h6, header, nav, footer, main, section, article, fiure figcaption, symmary, details, address, blockquote, aside |
인라인 블록요소 (Inline Block Elements) |
기본 너비 : 컨텐츠의 너비 값 한 줄에 여러개 배치 크기값을 가질수 있음 상하좌우 마진 가질수 있음 |
img, button, select input, textarea, video, audio 대부분의 font icon 태그 |
■ display 속성
○ 여러속성
- none
요소가 차지하던 공간도 사라지고, 화면에 표시되지 않음
- block
새 줄에서 시작하며, 가능한 한 많은 너비를 차지
- inline
블록 레벨과 달리, 너비와 높이를 갖지 않으며, 내용의 너비만큼만 공간을 차지
- inline-block
인라인 레벨로 배치되지만, 블록 레벨 요소처럼 너비와 높이를 가질 수 있음
- flex
플렉스 컨테이너로 만들어, 자식 요소를 플렉스 아이템으로 배치
플렉스박스 레이아웃을 사용하여 요소를 효율적으로 정렬하고 분배
- grid
그리드 컨테이너로 만들어, 자식 요소를 그리드 아이템으로 배치
그리드 레이아웃을 사용하여 복잡한 두 차원 배열을 쉽게 설계
- table, table-row, table-cell
전통적인 HTML 테이블 레이아웃을 CSS로 재현
- inline-flex
인라인 플렉스 컨테이너로 만들어, 플렉스 아이템으로 자식 요소를 배치
요소가 인라인 요소처럼 배치되면서도 내부에서는 플렉스박스 레이아웃의 이점을 활용
- inline-grid
요소를 인라인 그리드 컨테이너로 만들어, 그리드 아이템으로 자식 요소를 배치
인라인 요소처럼 배치되면서도 내부에서는 그리드 레이아웃을 활용
○ display 처리
- 인라인요소 및 블록으로 변경
<body>
<div>안녕</div><div>안녕2</div>
<span>우리</span>
<span>우리</span>
</body>
div{
display: inline;
background-color: red;
}
span{
display: block;
background-color: blue;
}
○ border 속성
요소가 차지하고 있는 영역에 테두리를 그릴수 있다.
border 속성에는 속성값으로 테두리의 두께, 모양, 크기 등을 함께 지정이러한 속성을 단축속성이라고 한다.
속성명 | 속성값 |
border-color | color 정의와 동일 |
border-width | thin(1px), medium(3px), thick(5px) 또는 px, em, rem |
border-style | none(기본), solid(직선), dotted(점선), dashed(긴 점선) 등 |
-border 사용방법
a{
border: 5px solid blue;
/*크기 종류 색*/
}
-border-width 사용
a{
/* 상,하 | 좌,우 */
border-width: 5px 20px;
/* 상 | 좌,우 | 하*/
border-width: 5px 20px 3px;
/* 상 | 우 | 하 | 좌*/
border-width: 1px 10px 1px 10px;
}
- 적용
<body>
<div>안녕</div><div>안녕2</div>
<span>우리</span><span>우리</span>
</body>
span{
border-width: 5px;
border-style: solid;
border-color: red;
}
div{
border: 5px solid blue;
}
■ 박스모델(Box-Model)
○ 박스모델이란?
브라우저가 요소를 렌더링 할 때 각각의 요소는 사각형 형태로 영역을 차지
이영역을 박스라 표현하며 CSS는 박스의 크기, 위치, 속성(색, 배경, 테두리)을 결정할 수 있다.
- 박스의 영역
* 콘텐츠 영역 : 실제 콘텐츠를 포함 너비와 높이가 기본크기를 지정
* 안쪽 여백 : padding Area로 콘텐츠를 둘러싸는 공간, 콘텐츠와 테두리 사이 내부 여백 지정
* 배경색이나 배경이미지에 영향을 받음
경계선(테두리) : borde Area 패딩을 감싸는 테두리로 요소의 외곽선을 형성
* 바깥쪽 여백 : Margin Area로 테두리 바깥쪽 공간으로 다른 요소와의
외부 여백을 제공요소의 배경색이나 배경 이미지에 영향을 받지 않는다.
○ 박스 기본
<body>
<div>콘텐츠</div>
<span>기본</span><span>기초</span>
</body>
div{
border: 2px solid red;
padding: 10px 20px 5px;
margin: 20px;
width: 100px;
height: 50px;
}
span{
border: 1px solid blue;
width: 50px;
height: 50px;
display: inline-block;
}
○ Padding 과 Margin
- 테두리를 기준으로 안쪽 여백은 Padding, 바깥쪽 여백은 Margin
- 여백은 상하좌우 네 개의 면에 존재하는 영역으로 개별 적으로 두께를 정의할수 있다.
- Padding : padding-하위속성 top, right, left, bottom
- Margin : Margin-하위속성 top, right, left, bottom
<body>
<div></div>
</body>
div{
width: 100px; height: 100px;
padding : 30px;
/* 30px로 되어 있지만 아래쪽이 우선이다. */
padding-left: 10px;
padding-top: 20px;
padding-right: 30px;
padding-bottom: 20px;
border: 5px solid red;
}
○ 박스모델
- 실제크기 (콘텐츠, 안쪽 여백, 경계선까지)
- 바깥쪽 여백은 요소마다 간격을 설정한다.
<div></div>
div{
width: 100px; height: 100px;
border: 5px solid blue;
padding: 10px;
/* 총 너비는 130px 높이 130px */
}
○ box-sizing
- 요소의 너비와 높이를 계산하는 방법을 지정
속성값 | 의미 |
content-box | 기본값, 너비와 높이가 콘텐츠 영역만을 포함 |
border-box | 너미와 높이가 안쪽 여백과 테두리까지 포함 |
div{
width: 100px; height: 100px;
border: 5px solid blue;
padding: 10px;
box-sizing: border-box;
/* 총 너비는 100px 높이 100px */
/* 콘텐츠의 너비는 70px 높이 70px */
}
○ background
- 콘텐츠의 배경을 정의한다.
- 단축속성으로 색상이미지 반복등 정의 할 수 있다.
하위속성 | 역할 |
background-color | 배경색 정의 |
background-image | 배경 이미지를 정의 |
background-position | 배경 이미지의 초기 위치 정의 |
background-size | 배경 이미지의 크기를 정의 |
background-repeat | 배경 이미지의 반복방법을 정의 |
- background-image : 기본적으로 배경이미지가 콘텐츠보다 작으면 배경이미지에 대해서 반복적으로 실행됨
{
background-image: url(주소);
}
- background-repeat : 배경이미지의 반복속성을 변경한다.
repeat(반복)기본값, no-repeat(반복안함)
■ line-height / Vertical-align
○ line-height
- 텍스트 내의 각 줄의 높이를 설정하여, 줄 간의 수직 간격을 조정
- 속성 사용방식
* 단위 없는 숫자 : 권장되는 방식으로 요소의 글꼴 크기에 곱해져 줄 높이를 결정
다른 CSS속성에는 값은 사용할 수 없음, 0이라는 수치는 사용가능단위를 넣어줘도 모두 같은 의미를 가지기 때문에 없음을 의미
* 길이 단위 사용 : 절대적 또는 상대적 단위 사용가능
* 백분율로 글꼴 크기에 따라 줄 높이가 조절됨
<div class="main">
CSS 클래스 이름을 지정할 때는 가독성, 유지보수성, 그리고 확장성을 고려해야 합니다.
</div>
*{
border: 1px solid #000;
}
.main{
width: 300px; height: 200px;
background-color: tan;
line-height: 2;
}
○ Vertical-align
- 인라인, 인라인-블록, 테이블 셀요소의 수직정렬을 조정하는데 사용
- 이 속성은 주로 텍스트나 이미지같은 인라인 요소들 사이에서 수직배치 제어
- 블록 레벨 요소에는 적용되지 않음
속성값 | 의미 |
baseline | 기본값, 요소의 기준선을 포함 라인의 기분선 맞춤 |
top | 요소의 상단을 라인 박스의 최상단과 맞춤 |
bottom | 요소의 하단을 라인 박스의 최하단과 맞춤 |
middle | 요소의 중앙을 라인 박스의 기준선 기준으로 약간 위쪽으로 정렬, 부모요소의 x-height의 중간 |
- 문자와 baseline
<div class="main">
<span class="text">Apple</span>
<span class="badge">New</span>
</div>
div{
border: 1px solid #000;
}
.main{
width: 300px; height: 200px;
background-color: tan;
}
.text{
background-color: red;
color: #fff;
font-size: 3rem;
}
.badge{
background-color: #000;
color: #fff;
}
노란선이 baseline임
- Vertical-align 작동
.badge{
background-color: #000;
color: #fff;
vertical-align: bottom;
}
- baseline으로 인한 문제
* a클래스가 div로 inline-block이면서 기준점을 baseline을 잡아서글자가 아래쪽으로 보이듯 나옴
<div class="main">
글자
<div class="a"></div>
</div>
div{
border: 1px solid #000;
}
.main{
width: 300px; height: 200px;
background-color: tan;
}
.main>.a{
width: 50px; height: 50px;
display: inline-block;
vertical-align: baseline;
background-color: red;
}
- 인라인 블럭 정렬
vertical-align을 중앙정렬, 품고 있는 main의 line-height에 반응하여 중앙으로 이동
main의 line-height가 기본값일때는 특이사항 없음
<div class="main">
글자
<div class="a"></div>
</div>
div{
border: 1px solid #000;
}
.main{
width: 300px; height: 200px;
background-color: tan;
line-height: 100px;
}
.main>.a{
width: 50px; height: 50px;
display: inline-block;
vertical-align: middle;
background-color: red;
}
- 인라인 블럭 내부 글자
main의 line-height로 인해 내부에 있는 a태그까지 반응되었고
태그내 텍스트도 line-height를 100px 품고 있음
a태그내 line-height를 1로 변경 하면 해결
<div class="main">
<div class="a">a내부</div>글자
</div>
div{
border: 1px solid #000;
}
.main{
width: 300px; height: 200px;
background-color: tan;
line-height: 100px;
}
.main>.a{
width: 50px; height: 50px;
display: inline-block;
vertical-align: middle;
background-color: red;
}
- Vertical-align과 글자
<div class="main">
<div class="a1">a1내부</div>글자
<br>
<div class="a2">a2내부</div>글자
</div>
div{
border: 1px solid #000;
}
.main{
width: 300px; height: 200px;
background-color: tan;
line-height: 100px;
}
.main>div{
width: 50px; height: 50px;
display: inline-block;
background-color: red;
}
.a1{
line-height: 2;
}
.a2{
line-height: 1;
}
- 인라인 블럭에 Vertical-align 적용
<div class="main">
<div class="a">
<div class="a1"></div>
<div class="a1"></div>
</div>
<div class="a"></div>
a
</div>
div{
border: 1px solid #000;
box-sizing: border-box;
}
.main{
width: 300px; height: 200px;
background-color: tan;
}
.main>.a{
width: 50px; height: 50px;
display: inline-block;
background-color: red;
/* vertical-align: bottom; */ /* vertical-align 해주면 baseline 사라짐 */
font-size: 0;
}
.a>.a1{
width: 50%; height: 100%;
display: inline-block;
}
■ Float and clear
○ float속성
문서의 일반적 흐름에서 제외되어
자신을 포함하고 있는 컨테이너 왼쪽이나 오른쪽에 배치
※ 문서의 흐름 : HTML 문서에다 여러 요소를 만들면 먼저 만들어 놓은 것 부터
차례대로 브라우저에 표시되고 이런 차례를 말한다.
※ 컨테이너 Container : 특정 요소를 포함하고 그룹화하는 용도로 사용되는 요소
HTML문서 내에서 여러 요소를 논리적으로 묶고,
그룹화된 요소에 스타일을 적용하거나 레이아웃을 조정하기 위해 사용하는 요소
- float 하위요소
속성값 | 의미 |
none | 기본값, 원래 상태 |
left | 자신을 포함하고 있는 박스의 왼편에 떠있어야 함 |
right | 자신을 포함하고 있는 박스의 오른편에 떠 있어야 함 |
<div id="a"></div>
<div id="b"></div>
<p>문단태그</p>
<div id="c"></div>
#a{
width: 200px; height: 100px;
background-color: orange;
float:right;
}
#b{
width: 100px; height: 100px;
background-color: aqua;
float: left;
}
#c{
width: 200px; height: 200px;
background-color: blue;
}
○ clear
float 요소 이후에 표시되는 요소가 float을 해제하여
float 요소의 아래로 내려갈때 사용
속성값 | 의미 |
none | 기본값, 아래로 이동되지 않음 |
left | float이 left인 요소의 아래로 내려감 |
right | float이 right인 요소의 아래로 내려감 |
both | float이 left및 right인 요소의 아래로 내려감 |
<div id="a"></div>
<div id="b"></div>
<div id="c"></div>
#a{
width: 200px; height: 50px;
background-color: orange;
float:right;
}
#b{
width: 100px; height: 100px;
background-color: aqua;
float: left;
}
#c{
width: 200px; height: 200px;
background-color: blue;
clear: right;
}
■ position
○ position
문서상의 요소를 배치하는 방법을 정의
position이 요소의 배치방법을 결정하면
top, bottom, right, left가 최종 위치를 결정
-> 위치 지정은 필요에 따라 선택적으로 사용
○ position 속성값
속성값 | 의미 |
static(정적) | 기본값, 요소를 일반적인 문서 흐름에 따라 배치 |
relative(상대적) | 일반적 문서 흐름에 따라 배치, 상하좌우 위치 값에 따라 오프셋 적용 |
absolute(절대적) | 일반적 문서 흐름에서 제거 가장 가까운 position 지정 요소에 대해 상대적으로 오프셋 적용 |
fixed(결정된) | 일반적 문서 흐림에서 제거, 지정한 위치에 고정된다. |
sticky | 일반적인 문서 흐름에서 제거, 스크롤 동작이 존재하는 가장 가까운 요소에 오프셋 적용 |
○ relative : (상대적)
문서의 흐름에 따라 배치하되, 위치값에 따라 위치를 이동시켜서 배치하는 것
상대적인 위치를 뜻함
<div id="a1"></div>
<div id="a2"></div>
#a1{
width: 200px; height: 200px;
background-color: aquamarine;
position: relative;
top: 100px;
}
#a2{
background-color: sandybrown;
width: 300px; height: 200px;
}
○ absolute (절대적)
일반적인 무서흐름에 제거 상위 요소중 가장 가까운
position 지정 요소에 대해 상대적으로 오프셋지정
position 지정요소 : position속성에 속성값이 정의 되어 있는 요소
<div id="a1">1번</div>
<div id="a2">2번</div>
#a1{
width: 100px; height: 100px;
background-color: aquamarine;
position: absolute;
top: 50px;
}
#a2{
width: 200px; height: 200px;
background-color: sandybrown;
}
- 부모의 position 속성이 없으면 브라우저 화면을 기준으로 따로 들어감
- 흐름에서도 벗어나서 개별적으로 들어감
<div id="z1">
<div id="a1" class="a">1번</div>
<div id="a2" class="a">2번</div>
</div>
<div id="z2">
<div id="a3" class="a">3번</div>
<div id="a4" class="a">4번</div>
</div>
body{
background-color: sandybrown;
}
#z1, #z2{
width: 300px; height: 300px;
border: 1px solid #000;
background: yellowgreen;
margin-left: 100px;
}
#z2{
position: relative;
}
.a{
width: 100px; height: 100px;
border: 1px solid #000;
background: khaki;
}
#a1{
position: absolute;
left: 150px; top: 0px;
/* Z1번은 position속성이 없어서 상위로 들어감 따로 들어감*/
}
#a3{
position: absolute;
left: 150px;
}
○ fixed(결정된)
absolute처럼 일반적인 문서 흐름에서 제거, 지정된 위치 고정
absolute는 상위의 position지정 요소를 찾지만 fixed는 고정
<div id="z">
<div id="a1" class="a">1번</div>
<div id="a2" class="a">2번</div>
<div id="a3" class="a">3번</div>
</div>
#z{
background-color: yellowgreen;
margin-left: 100px;
width: 300px; height: 300px;
position: relative;
}
.a{
background-color: yellow;
width: 100px; height: 100px;
}
#a1{
position: absolute;
top: 50px; left: 50px;
}
#a2{
position: fixed;
top: 0px; left: 0px;
}
○ sticky
일반적인 문서흐름에 따라 배치하고 스크롤되는 가장 가까운 상위에 오프셋적용
스크롤 이동으로 요소가 움직여도 고정상태 유지
<div id="a1" class="a">1번</div>
<div id="a2" class="a">2번</div>
<div id="a3" class="a">3번</div>
#a1,#a3{
background-color: yellow;
width: 200px; height: 1000px;
}
#a2{
background-color: red;
width: 100px; height: 100px;
position: sticky;
top: 0px;
}
■ flexbox
○ flexbox란
박스내 요소간의 공간 배분과 정렬 기능을 제공하기 위한 1차원 레이아웃 모델
레이아웃을 다룰때 한번에 하나의 차원(행이나 열)만을 다룸
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
.item{
width: 50px; height: 50px;
background-color: yellowgreen;
border: 1px solid #000;
}
.container{
display: flex;
}
○ 주축과 교차축
- 주축 : 1차원 레이아웃으로 요소의 진행방향을 지정하는 방향
- 교차축 : 주축의 엇갈리는 방향을 의미
- 주축은 기본적으로 가로방향임
- 사용자는 목적에 따라 방향을 변경할 수 있음
○ flex-direction
flex 내 요소를 배치할 때 사용할 주축 및 방향을 지정(정방향, 역방향)
속성값 | |
row | 기본값, 주축은 행으로 가로 콘텐츠 방향과 동일 |
row-reverse | 주축은 행으로 가로 콘텐츠 방향과 반대 |
column | 주축은 열으로 세로 콘텐츠 방향과 동일 |
column-reverse | 주축은 열으로 세로 콘텐츠 방향과 반대 |
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
.item{
width: 50px; height: 50px;
background-color: yellowgreen;
border: 1px solid #000;
}
.container{
width: 200px; height: 200px;
background-color: yellow;
display: flex;
flex-direction: row-reverse;
}
○ flexbox 다루기
속성 | 내용 |
justify-content | 주축 배치방법 flex-start(시작부분에 정렬), flex-end(끝부분정렬), center(가운데 정렬), space-between(시작 마지막 맞추고 사이간격 동일), space-around(중심으로 동일 여백, 좌우는 공간의 절반) space-evenly(모든 아이템사이 컨테이너의 시작과 끝에 동일 간격) |
align-item | 교차축 배치방법 stretch(기본), flex-start(시작부분 정렬), flex-end(끝부분 정렬), center(가운데 정렬), baseline(기준선 정렬, 텍스트의 바닥선일치) |
align-self | 교차축 개별요소 배치 방법 item에 직접 설정 stretch(기본), flex-start(시작부분 정렬), flex-end(끝부분 정렬), center(가운데 정렬), baseline(기준선 정렬, 텍스트의 바닥선일치) |
flex-wrap | 한줄에 들어가지 않을 경우 줄 바꿈 여부 nowrap(기본값 크기를 줄여서라도 컨테이너 넣기), wrap(새로운 줄로 배치), wrap-reverse(반대방향으로 래핑) |
■ 기타 선택자
○ 특성선택자
주어진 속성의 존재 여부나 그 값에 따라 요소를 선택한다.
- class 속성을 가지고 있는 요소 선택
[class]{
background-color: red;
}
- class가 "x"인 요소 선택
[class = "x"]{
background-color: red;
}
- class가 "x"로 시작하는 요소 선택
[class ^= "x"]{
background-color: red;
}
- class가 "x"를 포함하는 요소 선택
[class *= "x"]{
background-color: red;
}
- class가 "x"로 끝나는 요소 선택
[class $= "x"]{
background-color: red;
}
○ 결합선택자 / 자손결합자
- 두개 이상의 선택자를 결합시켜 결합된 조건을 만족하는 요소를 선택
- 자손 결합자 두개의 선택자 중 첫 번째 선택자 요소의 자손을 선택할수 있다.
- div p : div 요소 안에 위치하는 모든 p 요소를 선택
- div>p : div 요소의 바로 아래에 위치하는 모든 p요소를 선택하기
div p {
color:red;
}
div > p {
color:red;
}
- 자손결합자 실습
body .a 로 클래스 명이 바로 아래의 a클래스(1번) 및 내부에 있는 (5번) 먼저 red를 실행
body>.a 로 바로 아래 (1번)이 blue 실행 1번 red에서 blue로 변경
body .a 가 밑에 있었으면 선택자 우선순위에 우위에 있어 모두 red임
<h1>결합선택자</h1>
<p class="a">1번</p>
<p>2번</p>
<div>
<p class="b">3번</p>
<p>4번</p>
<p class="a">5번</p>
<p>6번</p>
</div>
p{
margin: 0px 0px;
}
body .a{
background-color: red;
}
body>.a{
background-color: blue;
}
○ 결합선택자 / 형제 결합자
- 두개의 선택자 중 첫 번째 선택자 요소의 형제를 선택할 수 있다.
- 형제 : 상위, 하위 태그도 아닌 동일 선상에 있는 태그
- h1 ~ p : h1 요소의 뒤에 오는 형제 중 모든 p 요소를 선택하기
- h1 + p : h1 요소의 바로 뒤에 오는 형제 p요소를 선택하기
h1 ~ p {
color: red;
}
h1 + p{
color: blue;
}
- 형제선택자 실습
.b~p : b클래스 형제인 p태그 (4,5,6) red로 배경
.a+p : a클래스 바로 뒤의 형제인 p태그 (2,6) blue로 배경 6번 red-blue 변경
<h1>결합선택자</h1>
<p class="a">1번</p>
<p>2번</p>
<div>
<p class="b">3번</p>
<p>4번</p>
<p class="a">5번</p>
<p>6번</p>
</div>
p{
margin: 0px 0px;
}
.b~p{
background-color: red;
}
.a+p{
background-color: blue;
}
■ 의사 클래스 (가상 클래스)
○ 의사 클래스
- 선택자에 추가하는 키워드로 요소는 고정되어 있지 않는다.
어떤 특정한 상태가 되었을 때 (사용자와의 상호작용 시점마다) 스타일을 다양하게 적용해주는 것
선택자:의사클래스{
속성명: 속성값;
}
의사 클래스 | 의 미 |
hover | 마우스 포인터가 요소 위로 올라올때 |
active | 사용자가 요소를 활성화 ( 마우스 클릭등) |
focus | 요소가 포커스를 받고 있다. |
disabled | 비활성 상태의 요소 |
nth-child() | 형제사이에서의 순서에 따라 |
○ hover
- 마우스 커서가 올라오면 변경하겠다.
<div class="main">
<div class="contents">
</div>
</div>
.main{
width: 300px; height: 300px;
background-color: aquamarine;
}
.contents{
width: 100px; height: 100px;
background-color: blue;
}
.contents:hover{
background-color: red;
}
○ active
- 요소를 선택하면 변경된다.
<div class="main">
<div class="contents">
버튼
</div>
</div>
.main{
width: 300px; height: 300px;
background-color: aquamarine;
}
.contents{
width: 100px; height: 30px;
background-color: blue;
border-radius: 10px;
line-height: 30px;
text-align: center;
color: black;
}
/* .contents:hover{
background-color: blueviolet;
color: red;
} */
.contents:active{
background-color: rosybrown;
color: white;
}
○ focus
- focus가 가르키고 있으면 실행
<div class="main">
<input class="contents1" type="text">
<input class="contents2" type="text">
</div>
.main{
width: 300px; height: 300px;
background-color: aquamarine;
}
.contents1:focus{
background-color: red;
}
.contents2:focus{
background-color: blue;
}
○ nth-child()
- 형제 사이에서의 요소를 선택
body{
display: flex;
justify-content: space-between;
}
.box{
width: 100px; height: 100px;
background-color: red;
}
.box:nth-child(3){
background-color: blue;
}
- nth-child(2n) : n에 0부터 들어오는데 그것에 맞게 0 2,4,
.box:nth-child(2n){
background-color: blue;
}
- nth-child(n+3) : 3번부터 시작
.box:nth-child(n+3){
background-color: blue;
}
■ 의사요소
○ 의사요소(pseudo-elements)
- 선택자에 추가하는 키워드로 요소의 특정 부분에 대한 스타일을 정의 할 수 있다.
선택자::의사요소{
속성명:속성값;
}
○ first-line (첫번째 줄만), first-letter (첫번째 글자)
<p>
의사요소 처음 부분
의사요소 처음 부분
의사요소 처음 부분
의사요소 처음 부분
의사요소 처음 부분
의사요소 처음 부분
</p>
p::first-line{/* 첫줄 */
color: red;
background-color: blueviolet;
}
p::first-letter{ /* 첫글자 */
background-color: yellow;
font-size: 20px;
font-weight: 900;
}
○ marker : 블릿 (기호) 가 있는 부분을 표시한다.
<ul>
<li>강아지</li>
<li>고양이</li>
<li>호랑이</li>
<li>타조</li>
</ul>
li::marker{
color: red;
}
○ before(요소의 앞), after(요소의 뒤)
<p>기본요소</p>
p::before{
content: "앞";
background: aqua;
}
p::after{
content: "글자";
color: red;
background: violet;
}
■ 상속
○ 상속(Inheritance) : 하위요소가 상위요소의 스타일 속성값을 물려 받는 것
상위요소로 부터 상속이 이루어지는 속성이 있는 반면 그렇지 않는 속성도 있다.
상속 되는 속성 | 상속 되지 않은 속성 |
line-height, font-family, font-size, font-weight, text-align, cursor, color |
background-color, background-repeat, border, display, |
※ 상속관련 링크
- 실습
color 속성과 font-size 속성은 상위 요소에 작성해도 하위 요소가 상속상속되지 않는 속성들은 적용안됨상속되지 않는 속성들은 자기 자신에서 완성 시킬수 있고상속되는 속성들도 자기 자신에서 작성해도 문제 없음상속은 우선순위에서도 낮은 순위임
<div>
<p>p태그</p>
</div>
div{
width: 300px; height: 300px; /* 상속 안됨 */
color: red; /* 상속 */
font-size: 30px; /* 상속 */
border: 1px solid #000; /* 상속 안됨 */
}
○ 상속과 관련된 공용된 키워드
- 모든 CSS속성에 사용가능한 키워드
키워드 | 의미 |
inherit | 상위 요소로부터 해당 속성의 값을 받아 사용 |
initial | 브라우저에 지정된 기본 속성을 적용 |
unset | 상속값을 초기화 시킨다 |
- unset 사용이유 : 대규모 웹 사이트나 애플리케이션에서 CSS복잡성을 관리
예상치 못한 스타일 상속을 방지, 유지보수를 용이 하게 한다.
<div id="a">
<p>p태그</p>
</div>
div{
width: 300px; height: 300px;
color: red;
font-size: 30px;
border: 1px solid #000;
}
p{
color: initial;
border: inherit;
font-size: unset;
}
■ z-index
○ z-index : 요소의 쌓임 순서를 정의할 수 있다.
Z축값을 정리 할수 있다.
<div class="a1"></div>
<div class="a2"></div>
<div class="a3"></div>
<div class="a4"></div>
div{
width: 100px; height: 100px;
position: relative;
border: 1px solid #000;
}
.a1{
background-color: red;
}
.a2{
background-color: blue;
bottom: 50px;
}
.a3{
background-color: blueviolet;
bottom: 100px;
}
.a4{
background-color: brown;
bottom: 150px;
}
- z-index 사용
겹쳐져 있는 순서가 사라진다.
position이 있는 상태에서 정의된다.
z-index의 값이 높을 수록 위로 올라가고 순서값을 -, 100 이런식으로 작성해도 문제 없음
■ 애니메이션 (Animation) 기본
○ 애니메이션 정의
애니메인션은 CSS 스타일을 다른 CSS 스타일로 부드럽게 전환시킴
애니메이션은 애니메이션을 나타내는 CSS 스타일과
애니메이션의 중간 상태를 나타내는 키프레임들로 이루어진다.
○ 애니메이션 하위 속성
- animation-name : 중간 상태를 지정, 중간 상태는 @keyframes 규칙 이용
- animation-duration : 한 싸이클의 애니메이션이 얼마에 걸쳐 일어날지 지정
- animation-timing-function : 중간 상태들의 전환을 어떤 시간간격으로 진행
- animation-delay : 로드 되고 얼마만큼의 시간이 지난 후 실행될지 설정
- animation-iteration-count : 애니메이션이 몇 번 반복될지 지정. infinite은 무한히 반복
- animation- direction : 애니메이션이 종료 후 다시 처음부터, 역방향으로 진행 설정
- animation-fill-mode : 시작되기 전이나 끝나고 난 후 어떤 값이 적용될지 지정
- animation-play-state : 멈추거나 다시 시작
○ 애니메이션 속기형 작성
- 순서는 크게 문제는 안되지만 duration, delay는 기본 앞이 duration, 뒤에 작성시 delay 임
animation: name | duration | timing-function | delay | iteration-count | direction | fill-mode | play-state> [,...];
- 실제 사용법 (순서대로 작성하는 것을 기본으로 한다. )
div{
animation: abc 3s linear infinite ;
}
div{
animation: linear infinite 3s abc;
/* 타이밍, 개수, 시간, 이름 */
}
○ 애니메이션 @keyframes 사용
CSS 애니메이션과 트랜지션 방식의 주된 차이는 @keyframes rule에 있다.
이 rule을 사용하면 애니메이션의 흐름(sequence) 중의
여러 시점(breakpoint)에서 CSS 프로퍼티값(속성값)을 지정할 수 있다.
- from, to 키워드를 사용하여 애니메이션의 시작과 끝 시점을 정의함
- from, to 키워드 대신 %를 사용가능
@keyframes name{ /* 최초 왼쪽 여백을 0% 지정, 종료시 왼쪽 여백 -100% 지정 */
from{ margin-left: 0%; }
to{ margin-left: -100%; }
}
@keyframes name{ /* 50%를 지날때 왼쪽 여백을 -100% 지정, 0%, 100%일때는 왼쪽 여백 0% */
50%{ margin-left: -100%; }
}
■ 애니메이션 속성(property)별 작성요령
○ animation-name
- @keyframes 뒤에 애니메이션을 대표하는 임의의 이름를 부여하는 형태
- animation-name 프로퍼티값으로 지정하여 사용하고자 하는 @keyframes rule을 선택
- 하나 이상의 애니메이션 이름을 지정할 수 있다.
div{ /* 한개의 이름을 지정 */
animation-name: move;
}
div{ /* 여러개의 이름을 지정 */
animation-name: move, fadeOut, changeColor;
}
- 유효한 이름
문자열 시작하는 이름, _(언더바)로 시작, - (하이픈)으로 시작
div{
animation-name: name; /* 문자열로 시작하는 이름 */
animation-name: _name; /* 언더바(_)로 시작하는 이름 */
animation-name: -name; /* 하이픈(-)으로 시작하는 이름 */
}
- 유효하지 않은 이름
숫자로 시작, 특수문자 시작
div{
animation-name: 1name; /* 숫자로 시작하는 이름 */
animation-name: @name; /* 특수 문자로 시작하는 이름 */
}
- 화면확인
○ animation-duration
- 애니메이션 프레임의 지속시간을 지정
- 지속 시간은 애니메이션이 시작하고 종료하는 데 걸리는 시간 의미
- 단위는 밀리초 ms, 초 s로 지정함
- 지정하지 않는 경우 기본값 0s가 셋팅되어 어떠한 애니메이션도 실행 되지 않음
○ animation-timing-function
- 애니메이션 효과를 위한 수치 함수를 지정
- ease : 기본, 느리게 시작하여 점점 빨라졌다가 느려지면서 종료
- linear : 동일한 속도로 운동
- ease-in : 느리게 시작 한 후 등속 운동
- ease-out : 등속시작해서 느리게 종료
- ease-in-out : ease와 유사
○ animation-delay
- 요소가 로드된 시점과 애니메이션이 실제로 시작하는 사이에
대기하는 시간을 초 단위(s) 또는 밀리 초 단위(ms)로 지정
○ animation-iteration-count
- 애니메이션 주기의 재생 횟수를 지정
- 기본값은 1이며 infinite로 무한반복
○ animation-direction
- 애니메이션이 종료된 이후 반복될 때 진행하는 방향을 지정
- normal : 기본값으로 진행
- reverse : 역순으로 진행(100->0%)
- alternate : 홀수는 normal, 짝수는 reverse로 진행
- alternate-reverse : 홀수는 reverse, 짝수는 normal로 진행
■ 3월 7일 - 9일차
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css">
<style>
body,h1,h2,h3,p{
margin: 0;
}
ul,li{
list-style: none;
padding: 0;
margin: 0;
}
a{
text-decoration: none;
color: inherit;
}
.wrap{
width: 80%;
margin: 0 auto;
}
nav{
height: 80px;
padding: 0px 5%;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
}
nav .logo{
font-size: 32px;
font-weight: 700;
}
nav .menu{
width: 50%;
height: 40px;
display: flex;
position: relative;
z-index: 10;
}
nav .menu > li{
width: 25%;
height: 100%;
}
nav .menu > li > a{
display: inline-block;
width: 100%;
height: 100%;
align-content: center;
text-align: center;
}
nav .menu > li > a:hover{
background-color: #000;
color: #fff;
}
nav .menu:hover > li > .submenu{
display: block;
}
nav .menu .submenu{
display: none;
height: 150px;
padding-top: 30px;
background-color: #fff8;
}
nav .menu .submenu > li{
width: 100%;
height: 30px;
}
nav .menu .submenu > li > a{
display: inline-block;
width: 100%;
height: 100%;
align-content: center;
text-align: center;
}
nav .menu .submenu > li:hover > a{
color: #fff;
background-color: #0008;
}
/* 헤더 부분 */
header{
height: 200px;
position: relative;
}
header img{
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
header .but{
width: 200px; height: 40px;
background-color: #0008;
align-content: center; text-align: center;
color: #fff; font-weight: 600; font-size: 20px;
position: absolute; left: 50%; bottom: 40px;
transform: translateX(-50%);
}
header .but:hover{
background-color: #fff8;
color: #000;
cursor: pointer;
}
.s1{
padding: 50px 0px;
text-align: center;
}
.s1 > h1{
font-size: 48px;
}
.s1 > p{
font-size: 20px;
margin-bottom: 60px;
}
.s1 > h3{
width: 50%;
margin: 0 auto;
font-weight: 500;
}
.s2{
height: 500px;
position: relative;
}
.s2 > img{
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
.s2 > .icon-box{
position: absolute;
width: 40px; height: 100px;
font-size: 26px;
background-color: #fff;
left: 50px; top: 50%; transform: translateY(-50%);
display: flex;
flex-direction: column;
justify-content: space-around; align-items: center;
border-radius: 5px;
}
.s3{
height: 400px;
align-content: center;
background-color: #ccc;
}
.s3 > .container{
width: 90%;
height: 80%;
display: flex;
margin: 0 auto;
justify-content: space-between;
}
.s3 > .container > .item{
width: 30%;
}
.s3 img, .s4 img{
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
.s4{
height: 400px;
position: relative;
}
.s4 > .box{
font-size: 32px;
position: absolute;
top: 50%; left: 50%; transform: translate(-50%, -50%);
width: 90%;
display: flex;
justify-content: space-between;
}
.s4 > .cbox{
display: flex;
position: absolute;
bottom: 40px;
width: 50px;
justify-content: space-between;
left: 50%;
transform: translateX(-50%);
}
.s4 .c{
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #444;
}
.s5{
height: 400px;
align-content: center;
text-align: center;
}
.s5 h2{
margin-bottom: 8px;
}
.s5 p{
margin-bottom: 32px;
}
.s5 .container{
width: 90%;
margin: 0 auto;
height: 40px;
display: flex;
justify-content: space-between;
}
.s5 .container .item{
width: 32%;
background-color: #ccc;
}
footer{
height: 150px;
padding: 0 25%;
background-color: #999;
align-content: center;
}
footer > .container{
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
footer > p{
text-align: center;
}
</style>
</head>
<body>
<div class="wrap">
<nav>
<div class="logo">LOGO</div>
<ul class="menu">
<li><a href="#">Home</a>
<ul class="submenu">
<li><a href="#">home1</a></li>
<li><a href="#">home2</a></li>
<li><a href="#">home3</a></li>
</ul>
</li>
<li><a href="#">About</a>
<ul class="submenu">
<li><a href="#">About1</a></li>
<li><a href="#">About2</a></li>
<li><a href="#">About3</a></li>
</ul>
</li>
<li><a href="#">Services</a>
<ul class="submenu">
<li><a href="#">Services1</a></li>
<li><a href="#">Services2</a></li>
<li><a href="#">Services3</a></li>
</ul>
</li>
<li><a href="#">Blog</a>
<ul class="submenu">
<li><a href="#">Blog1</a></li>
<li><a href="#">Blog2</a></li>
<li><a href="#">Blog3</a></li>
</ul>
</li>
<li><a href="#">SNS</a>
<ul class="submenu">
<li><a href="#">SNS1</a></li>
<li><a href="#">SNS2</a></li>
<li><a href="#">SNS3</a></li>
</ul>
</li>
</ul>
</nav>
<header>
<img src="./hi.jpg" alt="">
<div class="but">Click Here</div>
</header>
<section class="s1">
<h1>HEADLINE</h1>
<p>College in Virginia</p>
<h3>The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum"</h3>
</section>
<section class="s2">
<img src="./s2.jpg" alt="">
<div class="icon-box">
<i class="fa-regular fa-circle-up"></i>
<i class="fa-regular fa-circle-down"></i>
</div>
</section>
<section class="s3">
<div class="container">
<div class="item">
<img src="./s3-1.jpg" alt="">
</div>
<div class="item">
<img src="./s3-2.jpg" alt="">
</div>
<div class="item">
<img src="./s3-3.jpg" alt="">
</div>
</div>
</section>
<section class="s4">
<img src="s4.jpg" alt="">
<div class="box">
<i class="fa-regular fa-circle-left"></i>
<i class="fa-regular fa-circle-right"></i>
</div>
<div class="cbox">
<div class="c"></div>
<div class="c"></div>
<div class="c"></div>
</div>
</section>
<section class="s5">
<h2>piece of classical Latin literature</h2>
<p>Richard McClintock, a Latin professor</p>
<div class="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</section>
<footer>
<div class="container">
<p>menu</p>
<p>menu</p>
<p>menu</p>
<p>menu</p>
<p>menu</p>
</div>
<p>Copy</p>
</footer>
</div>
</body>
</html>
■ 3월 11일 - 10일차
메뉴바
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
body{
margin: 0;
}
ul{
margin: 0; padding: 0;
list-style: none;
}
.wrap{
display: flex;
height: 1000px;
}
header{
width: 30%;
position: relative;
}
header .menu{
position: absolute;
top: 200px;
right: 0px;
text-align: center;
}
header .menu > li{
width: 100px;
position: relative;
}
header .menu > li > a{
display: inline-block;
height: 50px;
width: 100%;
align-content: center;
text-decoration: none;
color: white;
background-color: #000;
}
header .menu > li:hover > .submenu{
display: block;
}
header .menu .submenu{
position: absolute;
top: 0;
left: 100%;
display: none;
}
header .menu .submenu li{
width: 100px;
height: 40px;
align-content: center;
background-color: #fff;
}
main{
width: 70%;
}
.wrap img{
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
</style>
</head>
<body>
<div class="wrap">
<header>
<img src="./s4.jpg" alt="">
<ul class="menu">
<li><a href="#">메뉴1</a>
<ul class="submenu">
<li>서브메뉴1</li>
<li>서브메뉴2</li>
<li>서브메뉴3</li>
</ul>
</li>
<li><a href="#">메뉴2</a>
<ul class="submenu">
<li>서브메뉴1</li>
<li>서브메뉴2</li>
<li>서브메뉴3</li>
</ul>
</li>
<li><a href="#">메뉴3</a>
<ul class="submenu">
<li>서브메뉴1</li>
<li>서브메뉴2</li>
<li>서브메뉴3</li>
</ul>
</li>
<li><a href="#">메뉴4</a>
<ul class="submenu">
<li>서브메뉴1</li>
<li>서브메뉴2</li>
<li>서브메뉴3</li>
</ul>
</li>
</ul>
</header>
<main>
<img src="./s2.jpg" alt="">
</main>
</div>
</body>
</html>
'Web 수업자료 > Web 정규' 카테고리의 다른 글
Web 2 25-03 (0) | 2025.03.13 |
---|---|
웹 디자인 2 25-03 (0) | 2025.03.13 |
웹 디자인 1 25-02 (1) | 2025.02.13 |
Web 4 25-01 (0) | 2025.01.14 |
Web 3 24-12 (19시) (0) | 2024.12.10 |