1.HTML
참고 : https://poiemaweb.com/
http://webberstudy.com/
start-date : 20181214 ~ 20190122
HEAD 요소
DOCTYPE
HTML5 <!DOCTYPE html>
HTML 4.01 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
XHTML 1.0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
TITLE title 요소는 문서의 제목을 정의한다. 정의된 제목은 브라우저의 탭에 표시된다. <title>문서 제목</title>
STYLE style 요소에는 HTML 문서를 위한 style 정보를 정의한다. <style>body {background-color: yellow;color: blue;}</style>
LINK link 요소에는 외부 리소스와의 연계 정보를 정의한다. 주로 HTML과 외부 CSS 파일을 연계에 사용된다. <link type="text/css" rel="stylesheet" href="style.css">
SCRIPT script 요소에는 client-side JavaScript를 정의한다. <script type="text/javascript">document.addEventListener('click', function () {alert('Clicked!');});</script>
<script type="text/javascript" src="main.js"></script>
META
CHARSET 메타태그에서 문자인코딩을 합니다.문자셋 (charset) 메타 정보 <META CHARSET="utf-8">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=UTF-8">
DESCRIPTION 디스크립션(description)과 키워드(keyword) 메타 정보 <META NAME="Description" CONTENT="소개 내용">
<META NAME="Keywords" CONTENT="키워드들의 나열, abc, 123">
AUTHOR 작성자(author) 관련 메타 정보 <META NAME="author" CONTENT="your name">
<META NAME="generator" CONTENT="dreamweaver cs6">
REFRESH 우회 및 새로고침(refresh) 메타 정보 <META HTTP-EQUIV="refresh" CONTENT="30">
<META HTTP-EQUIV="refresh" CONTENT="10;url=http://google.com/">
ROBOTS 검색엔진이 수집을 할 지 안 할지를 정하는 정보 <META NAME="robots" CONTENT="noindex, nofollow">
X-UA-Compatible IE 모드(mode) 메타 정보 <META HTTP-EQUIV="X-UA-Compatible" CONTENT="IE=edge">
VIEWPORT 뷰포트(viewport) 메타 정보 <META NAME="viewport" CONTENT="width=device-width,height=device-height,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,minimal-ui,viewport-fit=cover">
<META NAME="viewport" CONTENT="width=1200">
<META NAME="viewport" CONTENT="initial-scale=1">
<META NAME="viewport" CONTENT="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
페이지 너비를 기기의 너비와 동일하게 합니다. 'initial-scale=1.0'과 동일하다 할 수 있습니다. width=device-width
기기에서 줌 아웃을 할 때 가장 줄어들 수 있는 비율입니다.예를 들어 0.8이라면 실제 페이지의 80%까지 더 축소할 수 있습니다. 1이면 실제 페이지에서 축소가 안됩니다. minimum-scale=1.0
기기에서 줌 인을 할 때 가장 커질 수 있는 비율입니다. 2라면 두 배까지 확대 가능 합니다.역시 1이라면 확대가 되지 않습니다. maximum-scale=1.0
사용자가 페이지를 줌 인, 줌 아웃을 할 수 없도록 만듭니다.minimum-scale=1.0, maximum-scale=1.0 이 두 가지를 선언 한 것과 같은 기능이라 할 수 있습니다. user-scalable=no
Android용 Chrome을 위한 테마 컬러를 지정하려면 메타 테마 색상을 사용합니다.
<META NAME="theme-color" CONTENT="#2196f3">
<META NAME="mobile-web-app-capable" CONTENT="yes">
<!-- Allow Web App To Be Run In Full-screen Mode. -->
<META NAME="apple-mobile-web-app-capable" CONTENT="yes">
<!-- Make The App Title Different Than The Page Title. -->
<META NAME="apple-mobile-web-app-title" CONTENT="iOS 8 web app">
<!-- Configure The Status Bar. -->
<META NAME="apple-mobile-web-app-status-bar-style" CONTENT="black">
<!-- Disable Automatic Phone Number Detection. -->
<META NAME="format-detection" CONTENT="telephone=no">
상태바의 기본 외관을 black이나 black-translucent으로 변경할 수 있습니다.
black-translucent일 때 상태바는 풀스크린 콘텐츠의 내용 위로 올라갑니다.
이는 레이아웃의 높이를 키우지만, 상단을 가로막습니다.
<META NAME="apple-mobile-web-app-status-bar-style" CONTENT="black">
<META NAME="apple-mobile-web-app-status-bar-style" CONTENT="black-translucent">
이미지는 타겟 기기 화면의 특정 크기여야 합니다. 그렇지 않으면 사용하지 않습니다.
더 자세한 내용은 Safari 웹 콘텐츠 가이드라인을 참고하세요.
<LINK REL="apple-touch-icon" HREF="ios-icon.png">
<LINK REL="apple-touch-icon" SIZES="512x512" HREF="ios-icon.png">
<LINK REL="apple-touch-icon-precomposed" HREF="/cube2019/common/images/kids.png">
$('link[rel="apple-touch-icon-precomposed"]').attr('href','/cube2019/common/images/'+nvq(_setup.appname,'kids','task')+'.png');
<LINK REL="apple-touch-startup-image" HREF="icon.png">
블록 요소 (Block Level Elements)
h1~6, p, div 블록 요소는 일단 기본적으로 줄 바꿈이 일어나는 형태로 영역의 너비가 상위 영역의 전체 너비만큼 되는 형태입니다.
인라인 요소 (Inline Elements)
a, img, strong, span 인라인 요소는 블록 요소와 반대되는 형태로 줄 바꿈이 일어나지 않는 요소들 입니다.
글자 형태 (Text Formatting)
HEADINGS Heading 태그는 제목을 나타낼 때 사용하며 h1에서 h6까지의 태그가 있다. h1이 가장 중요한 제목을 의미하며 글자의 크기도 가장 크다. <h1>heading 1</h1>
<h2>heading 2</h2>
<h3>heading 3</h3>
<h4>heading 4</h4>
<h5>heading 5</h5>
<h6>heading 6</h6>
BOLD bold체를 지정한다. 제목 태그와 같이 의미론적(Semantic) 중요성의 의미는 없다. <b>This text is bold.</b>
<p style="font-weight: bold;">This text is bold.</p>
STRONG b tag와 동일하게 bold체를 지정한다. 하지만 의미론적(Semantic) 중요성의 의미를 갖는다. 표현되는 외양은 b tag와 동일하지만 웹표준을 준수하고자 한다면 strong를 사용하는 것이 바람직하다. <strong>This text is strong.</strong>
ITALIC Italic체를 지정한다. 의미론적(Semantic) 중요성의 의미는 없다. <i>This text is italic.</i>
<p style="font-style: italic;">This text is italic.</i>
EMPHASIZED emphasized(강조, 중요한) text를 지정한다. i tag와 동일하게 Italic체로 표현된다. 의미론적(Semantic) 중요성의 의미를 갖는다. <em>This text is emphasized.</em>
SMALL small text를 지정한다. <small>HTML Small Formatting</small>
MARK highlighted text를 지정한다. <mark>HTML Marked Formatting</mark>
DELETED deleted (removed) text를 지정한다. <del>My favorite color is blue red.</del>
INSERTED inserted (added) text를 지정한다. <ins>My favorite color is red.</ins>
SUB / SUP sub 태그는 subscripted(아래첨자) text를 sup 태그는 superscripted(윗첨자) text를 지정한다. <p>This is <sub>subscripted</sub> text.</p>
This is subscripted text.
<p>This is <sup>superscripted</sup> text.</p>
This is subscripted text.
PARAGRAPHS 단락 (Paragraphs)을 지정한다. <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p><p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
BREAK br tag는 (강제)개행 (line break)을 지정한다. br tag는 빈 요소(empty element)로 종료태그가 없다. <p>This is<br>
a para<br>
graph with line breaks</p>
PREFORMATTED 형식화된(preformatted) text를 지정한다. pre 태그 내의 content는 작성된 그대로 브라우저에 표시된다. <pre>
var myArray = [];
console.log(myArray.length); // 0
</pre>
HR 수평줄을 삽입한다. HTML is a language for describing web pages.<hr>
CSS defines how to display HTML elements.
QUOTATION 짧은 인용문(quotation)을 지정한다. 브라우저는 인용부호(큰따옴표/quotation marks)로 q 요소를 감싼다. <p>WWF's goal is to: <q>Build a future where people live in harmony with nature.</q></p>
BLOCKQUOTE 긴 인용문 블록을 지정한다. 브라우저는 blockquote 요소를 들여쓰기한다. css를 이용하여 다양한 style을 적용할 수 있다.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
HYPERLINK
HREF 절대 URL 웹사이트 URL (href="http://www.example.com/default.html") <a href="http://www.google.com">URL</a>
상대 URL 자신의 위치를 기준으로한 대상의 URL (href="html/default.html") <a href="html/my.html">Local file</a>
<a href="file/my.pdf" download>Download file</a>
fragment identifier 페이지 내의 특정 id를 갖는 요소에의 링크 (href="#top") <a href="#">fragment identifier</a>
메일 mailto: <a href="mailto:someone@example.com?Subject=Hello again">Send Mail</a>
script href="javascript:alert(‘Hello’);" <a href="javascript:alert('Hello');">Javascript</a>
TARGET _self 링크를 클릭했을 때 연결문서를 현재 윈도우에서 오픈한다 (기본값) <a href="http://www.google.com" target="_self">Visit google.com!</a>
Visit google.com!
_blank 링크를 클릭했을 때 연결문서를 새로운 윈도우나 탭에서 오픈한다. <a href="http://www.google.com" target="_blank">Visit google.com!</a>
Visit google.com!
LIST
UNORDERED LIST 순서없는 목록 (Unordered List)
<ul>
<li>Coffee
<li>Tea
<li>Milk
</ul>
  • Coffee
  • Tea
  • Milk
ORDERED LIST 순서있는 목록 (Ordered List)
<ol>
<li>Coffee
<li>Tea
<li>Milk
</ol>
  1. Coffee
  2. Tea
  3. Milk
"1" 숫자 (기본값)
<ol type="1">
<li value="2">Coffee
<li value="4">Tea
<li>Milk
</ol>
  1. Coffee
  2. Tea
  3. Milk
"A" 대문자 알파벳
<ol type="A">
<li value="2">Coffee
<li value="4">Tea
<li>Milk
</ol>
  1. Coffee
  2. Tea
  3. Milk
"a" 소문자 알파벳
<ol type="a">
<li value="2">Coffee
<li value="4">Tea
<li>Milk
</ol>
  1. Coffee
  2. Tea
  3. Milk
"I" 대문자 로마숫자
<ol type="I">
<li value="2">Coffee
<li value="4">Tea
<li>Milk
</ol>
  1. Coffee
  2. Tea
  3. Milk
"i" 소문자 로마숫자
<ol type="i">
<li value="2">Coffee
<li value="4">Tea
<li>Milk
</ol>
  1. Coffee
  2. Tea
  3. Milk
중첩 목록 목록 태그는 내비게이션 메뉴를 만들 때 자주 사용된다.
<ul>
<li>Coffee
<li>Tea
<ol>
<li>Black tea</li>
<li>Green tea</li>
</ol>
<li>Milk
</ul>
  1. Coffee
  2. Tea
    1. Black tea
    2. Green tea
  3. Milk
TABLE
TABLE 표를 감싸는 태그
<table border="1">
<tr>
<th>First name</th>
<th>Last name</th>
<th>Score</th>
</tr>
</table>
First name Last name Score
Jill Smith 50
Eve Jackson 94
John Doe 80
TR 표 내부의 행 (table row)
TH 행 내부의 제목 셀 (table heading)
TD 행 내부의 일반 셀 (table data)
ATTRIBUTE BORDER 표 테두리 두께 지정. (CSS border property를 사용하는 것이 더 나은 방법이다.)
ROWSPAN 해당 셀이 점유하는 행의 수 지정
COLSPAN 해당 셀이 점유하는 열의 수 지정
IMAGE
SRC 이미지 파일 경로 <img src="assets/images/doug.jpg" alt="doug" width="100">
<img src="assets/images/wrongname.gif" alt="이미지가 없습니다.">
ALT 이미지 파일이 없을 경우 표시되는 문장
WIDTH 이미지의 너비 (CSS에서 지정하는 것이 일반적)
HEIGHT 이미지의 높이 (CSS에서 지정하는 것이 일반적)
AUDIO
SRC 음악 파일 경로 <audio src="assets/audio/Kalimba.mp3" controls></audio>
AUTOPLAY 재생 전에 음악 파일을 모두 불러올 것인지 지정
PRELOAD 음악 파일을 자동의 재생 개시할 것인지 지정
LOOP 음악을 반복할 것인지 지정
CONTROLS 음악 재생 도구를 표시할 것인지 지정. 재생 도구의 외관은 브라우저마다 차이가 있다.
VIDEO
SRC 동영상 파일 경로 <video width="640" height="360" controls>
<source src="assets/video/wildlife.mp4" type="video/mp4">
<source src="assets/video/wildlife.webm" type="video/webm">
</video>
POSTER 동영상 준비 중에 표시될 이미지 파일 경로
PRELOAD 재생 전에 동영상 파일을 모두 불러올 것인지 지정
AUTOPLAY 동영상 파일을 자동의 재생 개시할 것인지 지정
LOOP 동영상을 반복할 것인지 지정
CONTROLS 동영상 재생 도구를 표시할 것인지 지정. 재생 도구의 외관은 브라우저마다 차이가 있다.
WIDTH 동영상의 너비를 지정
HEIGHT 동영상의 높이를 지정
FORMS
FORM ACTION(URL) 입력 데이터(form data)가 전송될 URL 지정
METHOD(GET / POST) 입력 데이터(form data) 전달 방식 지정
GET 방식은 전송 URL에 입력 데이터를 쿼리스트링으로 보내는 방식이다.
예) http://jsonplaceholder.typicode.com/posts?userId=1&id=1
전송 URL 바로 뒤에 ‘?’를 통해 데이터의 시작을 알려주고, key-value형태의 데이터를 추가한다. 1개 이상의 전송 데이터는 ‘&’로 구분한다.
URL에 전송 데이터가 모두 노출되기 때문에 보안에 문제가 있으며 전송할 수 있는 데이터의 한계가 있다. (최대 255자).
REST API에서 GET 메소드는 모든 또는 특정 리소스의 조회를 요청한다.
POST 방식은 Request Body에 담아 보내는 방식이다.
예) http://jsonplaceholder.typicode.com/posts
URL에 전송 데이터가 모두 노출되지 않지만 GET에 비해 속도가 느리다.
REST API에서 POST 메소드는 특정 리소스의 생성을 요청한다.
Request Message Header: Request line
Header: General
Header: General
Header: Request
Header: Entity
Header: Entity
Body(Entity)
POST /cgi-bin/form.cgi HTTP/1.1
HOST: www.myserver.com
Accept: */*
User-Agent: Mozilla/4.0
Content-type: application/x-www-form-urlencoded
Content-length: 25
NAME=Smith&ADDRESS=Berlin
Response Message Header: Status line
Header: General
Header: Response
Header: Entity
Header: Entity
Body(Entity)
HTTP/1.1 200 OK
Date: Mon, 19 May 2002 12:22:41 GMT
Server: Apache 2.0.45
Content-type: text/html
Content-length: 2035
<html>
<head>
.body>
</html>
INPUT
BUTTON 버튼 생성
CHECKBOX checkbox 생성
COLOR 컬러 선택 생성
DATE date control (년월일) 생성
DATETIME date & time control (년월일시분초) 생성. HTML spec에서 drop되었다.
DATETIME-LOCAL 지역 date & time control (년월일시분초) 생성
EMAIL 이메일 입력 form 생성. subumit 시 자동 검증한다.
FILE 파일 선택 form 생성
HIDDEN 감추어진 입력 form 생성
IMAGE 이미지로 된 submit button 생성
MONTH 월 선택 form 생성
NUMBER 숫자 입력 form 생성
PASSWORD password 입력 form 생성
RADIO radio button 생성
RANGE 범위 선택 form 생성
RESET 초기화 button 생성
SEARCH 검색어 입력 form 생성
SUBMIT 제출 button 생성
TEL 전화번호 입력 form 생성
TEXT 텍스트 입력 form 생성
TIME 시간 선택 form 생성
URL url 입력 form 생성
WEEK 주 선택 입력 form 생성
SELECT
SELECT select form 생성
OPTION option 생성
OPTGROUP option을 그룹화한다.
TEXTAREA textarea 태그는 여러 줄의 글자를 입력할 때 사용한다. <textarea name="message" rows="10" cols="30">Write something here</textarea>
BUTTON type 어트리뷰트는 button, reset, submit를 지정할 수 있다. <button type="button" onclick="alert('Hello World!')">Click Me!</button>
<input type="button" value="Click Me!" onclick="alert('Hello world!')">
FIELDSET / LEGEND fieldset 태그는 관련된 입력 양식들을 그룹화할 때 사용한다. legend 태그는 fieldset 태그 내에서 사용되야 하며 그룹화된 fieldset의 제목을 정의한다. <fieldset>
<legend>Login</legend>
Username <input type="text" name="username">
Password <input type="text" name="password">
</fieldset>
LoginUsername
Password
STRUCTURE
HEADER 헤더를 의미한다. HTML Semantic element
<header>
<section>
<article>
<aside>
<footer>
NAV 내비게이션을 의미한다.
ASIDE 사이드에 위치하는 공간을 의미한다.
SECTION 본문의 여러 내용(article)을 포함하는 공간을 의미한다.
ARTICLE 분문의 주내용이 들어가는 공간을 의미한다.
FOOTER 푸터를 의미한다.
2.CSS
HTML과 CSS의 연동
Link style <link rel="stylesheet" href="css/style.css">
Embedding style <style>
h1 { color: red; }
p { background: aqua; }
</style>
Inline style <h1 style="color: red">Hello World</h1>
<p style="background: aqua">This is a web page.</p>
Reset CSS html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big,
cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, u, i, center,dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td,article, aside, canvas, details, embed,figure,
figcaption,footer, header, hgroup,menu, nav, output, ruby,section, summary,time, mark, audio, video
{margin: 0;padding: 0;border: 0;font-size: 100%;font: inherit;vertical-align: baseline;}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,footer, header, hgroup, menu, nav, section {display: block;}
body {line-height: 1;}
ol, ul {list-style: none;}
blockquote, q {quotes: none;}
blockquote:before, blockquote:after,q:before, q:after {content: '';content: none;}
table {border-collapse: collapse;border-spacing: 0;}
CSS3 Selector
* 모든 엘리먼트
E 태그 명이 E인 모든 엘리먼트
E F E의 자손이면서 태그명이 F인 모든 엘리먼트
E>F E의 바로 아래 자식이면서 태그 명이 F인 모든 엘리먼트
E+F E의 형제 엘리먼트로 바로 다음에 오는 엘리먼트 F
E~F E의 형제 엘리먼트로 다음에 나오는 모든 엘리먼트 F
E:has(F) 태그 명이 F인 자손을 하나 이상 가지는 태그 명이 E인 모든 엘리먼트
E.C 클래스 명 C를 가지는 태그 명이 E인 모든 엘리먼트. E의 생략은 *.C와 동일함
E#I 아이디가 I인 태그 명이 E인 엘리먼트. E의 생략은 *#I와 동일
E[A=V] 값이 V인 에트리뷰트 A를 가지는 태그 명이 E인 엘리먼트
E[A=V] 값이 V로 시작하는 에트리뷰트 A를 가지는 태그 명이 E인 엘리먼트
E[A$=V] 값이 V로 끝나는 에트리뷰트 A를 가지는 태그 명이 E인 엘리먼트
E[A*=V] 값이 V를 포함하는 에트리뷰트 A를 가지는 태그 명이 E인 엘리먼트
E[A] 에트리뷰트 A를 가지는 태그 명이 E인 모든 엘리먼트
E:first 모든 엘리먼트 E 중에서 첫 번째인 엘리먼트
E:last 모든 엘리먼트 E 중에서 마지막인 엘리먼트
E:first-child 엘리먼트 E의 자식 엘리먼트 중에서 첫 번째인 엘리먼트
E:last-child 엘리먼트 E의 자식 엘리먼트 중에서 마지막인 엘리먼트
E:only-child 엘리먼트 E의 자식 엘리먼트 중에서 형제가 없는 엘리먼트
E:nth-child(n) 엘리먼트 E의 n번째 자식 엘리먼트
E:nth-child(even or odd) 엘리먼트 E의 홀수 or 짝수 자식 엘리먼트
E:even or E:odd 페이지 전체의 짝수 or 홀수 엘리먼트
E:eq(n) 태그 값이 E인 모든 엘리먼트 중에서 n번째로 일치하는 엘리먼트
E:gt(n) 태그 값이 E인 모든 엘리먼트 중에서 n번째 엘리먼트(포함 X) 이후의 엘리먼트
E:lt(n) 태그 값이 E인 모든 엘리먼트 중에서 n번째 엘리먼트 이전의 엘리먼트
:animated 현재 애니매이션이 적용되고 있는 엘리먼트 선택
:button 모든 버튼 선택
:checkbox 체크 박스 엘리먼트만 선택한다. (input[type=checkbox])
:checked 선택된 체크 박스나 라디오 버튼만을 선택한다.
:contains(foo) 텍스트 foo를 포함하는 엘리먼트만 선택한다.
:disabled 인터페이스에서 비활성화 상태인 모든 폼 엘리먼트를 선택한다.
:enabled 인터페이스에서 활성화 상태인 모든 폼 엘리먼트를 선택한다.
:file 모든 파일 엘리먼트를 선택한다. (input[type=file])
:header 헤더 엘리먼트 선택한다. (<h1>~<h6>)
:hidden 감춰진 엘리먼트만 선택한다.
:image 폼 이미지만 선택한다. (input[type=image])
:input 폼 엘리먼트만 선택한다. (input, select, textarea, button)
:not(filter) 필터의 값을 반대로 변경한다.
:parent 빈 엘리먼트를 제외하고, 텍스트도 포함해서 자식 엘리먼트를 가지는 엘리먼트
:password 패스워드 엘리먼트 선택한다. (input[type=password])
:radio 라디오 엘리먼트 선택한다. (input[type=radio])
:reset 리셋 버튼을 선택한다. (input[type=reset] or button[type=reset])
:selected 선택된 엘리먼트만 선택한다.
:submit 전송 버튼을 선택한다. (input[type=submit] or button[type=submit])
:text 텍스트 엘리먼트만 선택한다. (input[type=text])
:visible 보이는 엘리먼트만 선택한다.
엘리먼트 조작 each(Function) 선택된 엘리먼트가 다수일 경우에 each 함수를 사용하여 차례대로 엘리먼트를 선택한다.
에트리뷰트 조작 attr(name, value) 선택된 엘리먼트의 name 에트리뷰트의 값을 value로 설정한다.
attr(name) 선택된 엘리먼트의 name 에트리뷰트의 값을 얻어온다.
attr(Attributes) 선택된 엘리먼트를 프로퍼티(json)형태로 설정할 수 있다.
val() 엘리먼트의 value 에트리뷰트 값을 얻어옴. attr("value")와 동일하다.
val(content) 엘리먼트의 value 에트리뷰트 값을 content로 설정한다.
에트리뷰트 제거 removeAttr(name) 해당 어트리뷰트의 값이 초기화 된다.
스타일 변경 addClass(names) 선택된 엘리먼트에 CSS Class를 적용한다.
만약에 다수의 Class를 적용하려면 공백으로 구분하여 할당하면 된다.
removeClass(names) 선택된 엘리먼트들을 제거한다.
toggleClass(names) 특정 Class를 적용하지 않은 상태면 적용하고, 적용한 상태면 제거한다.
스타일 얻고 설정 css(name, value) 선택된 엘리먼트의 name 에트리뷰트 값을 value로 설정한다.
css(properties) {"name1:" value1", "name2": "value2", } 와 같은 형태로 설정한다.
css(name) 특정 name의 프로퍼티의 스타일 값을 얻을 수 있다.
width(value) 선택된 엘리먼트의 width 값을 설정한다.
height(value) 선택된 엘리먼트의 height 값을 설정한다.
width() 선택된 엘리먼트의 width 값을 얻어온다.
height() 선택된 엘리먼트의 height 값을 얻어온다.
offset() 선택된 엘리먼트의 left 값과 top 값을 E.offset().left, E.offset().top과 같은 방법으로 얻을 수 있다.
엘리먼트 내용 설정 html() 선택된 엘리먼트 태그 내용을 얻을 수 있다.
html(content) 선택된 엘리먼트의 태그 내용을 content로 설정한다.
text() 선택된 엘리먼트의 태그 내용 중 텍스트 값만 얻을 수 있다.
text(content) 선택된 엘리먼트의 태그 내용을 content로 설정한다.
엘리먼트 복사&이동 append(content) 선택된 엘리먼트의 내용 마지막에 새로운 content를 추가한다.
appendTo(target) 선택된 엘리먼트가 단일이면 target으로 이동시키고 다수라면 복사된다.
prepend(content) append와 달리 앞으로 추가한다.
prependTo(target) appendTo와 달리 앞으로 복사 또는 이동한다.
before(),insertBefore() 엘리먼트를 대상의 첫 번째 자식으로 삽입하는 대신에 대상의 바로 앞 형제로 추가한다.
after(),insertAfter() 엘리먼트를 대상의 마지막 자식으로 삽입하는 대신에 대상의 바로 뒤 형제로 추가한다.
엘리먼트 감싸기 wrap(wrapper) 매개 변수로는 String과 엘리먼트 타입이 올 수 있으며, "<DIV CLASS='hello'></DIV>" 형태로 매개 변수 값을 넘기면 된다.
wrapAll(wrapper) 선택된 모든 엘리먼트를 wrapper로 감싼다.
엘리먼트 제거 remove() 페이지 DOM에서 확장 집합의 모든 엘리먼트를 삭제한다.
empty() 일치하는 집합의 모든 엘리먼트의 Content를 제거한다.
엘리먼트 복사 clone(copyHandlers) 일반적으로 엘리먼트를 복사한 확장 집합을 만들면 이들은 DOM 어딘가에 덧붙일 수 있다.
확장 집합 크기 얻기 size() 해당 엘리먼트의 개수를 반환한다.
확장 집합에서 특정 엘리먼트 얻기 get(index) 확장 집합에서 index번째의 엘리먼트를 가져온다. (배열과 유사하다.)
get() 모든 확장 엘리먼트를 일반 자바스크립트 배열로 얻는다.
index(element) 확장 집합에서 특정 엘리먼트의 index 값을 가져온다.
확장 집합 재편성 하기 add(element) 기존의 확장 집합에 다른 엘리먼트를 추가한다.
not(expression) 기존의 확장 집합에서 expression와 일치하는 엘리먼트를 제외시킨다.
filter(expression) 기존의 확장 집합에서 expression와 일치하는 엘리먼트만 가져온다.
확장 집합의 부분 집합 얻기 slice(begin, end) 기존의 확장 집합에서 begin번째부터 end번째까지의 엘리먼트만 가져온다.
확장 집합 관련 그 밖에 함수들 find(selector) 기존의 확장 집합에서 selector와 일치하는 엘리먼트들로 새로운 확장 집합을 생성한다.
is(selector) 기존의 확장 집합에서 selector와 일치하는 엘리먼트가 있다면 true, 없다면 false를 반환한다.
jQuery 체인 관리하기 end() 이전 확장 집합을 반환한다.
andSelf() 커맨드 체인에서 이전 확장 집합 두 개를 하나로 합친다.
관계를 이용하여 확장 집합 얻기 children() 확장 엘리먼트의 고유한 자식으로 구성된 확장 집합 반환한다.
contents() 엘리먼트의 콘텐츠로 구성된 확장 집합을 반환한다.
next() 확장 집합 내의 각 확장 엘리먼트 바로 다음에 나오는 형제로 구성된 확장 집합을 반환한다.
nextAll() 확장 집합 내의 각 확장 엘리먼트 바로 다음에 나오는 모든 형제로 구성된 확장 집합을 반환한다.
parent() 바로 위 부모로 구성된 확장 집합을 반환한다.
parents() 바로 위 부모와 모든 조상이 포함하는 확장 집합을 반환한다.
prev() 바로 이전에 나오는 형제로 구성된 확장 집합을 반환한다.
prevAll() 이전에 나오는 모든 형제로 구성된 확장 집합을 반환한다.
siblings() 확장 엘리먼트 내에 모든 형제를 포함한 확장 집합을 반환한다.
CSS3 Selector
전체 셀렉터 (Universal Selector) * HTML 문서 내의 모든 요소를 선택한다. html 요소를 포함한 모든 요소가 선택된다. (head 요소도 포함된다)
*{color:red;}
태그 셀렉터 (Type Selector) 태그명 지정된 태그명을 가지는 요소를 선택한다.
ID 셀렉터 (ID Selector) #id 어트리뷰트 값 id 어트리뷰트 값을 지정하여 일치하는 요소를 선택한다. id 어트리뷰트 값은 중복될 수 없는 유일한 값이다.
클래스 셀렉터 (Class Selector) .class 어트리뷰트 값 class 어트리뷰트 값을 지정하여 일치하는 요소를 선택한다. class 어트리뷰트 값은 중복될 수 있다.
어트리뷰트 셀렉터 (Attribute Selector) 셀렉터[어트리뷰트] 지정된 어트리뷰트를 갖는 모든 요소를 선택한다.
/* a 요소 중에 href 어트리뷰트를 갖는 모든 요소 */
a[href]{color:red;}
셀렉터[어트리뷰트="값"] 지정된 어트리뷰트를 가지며 지정된 값과 어트리뷰트의값이 일치하는 모든요소를 선택한다.
/* a 요소 중에 target 어트리뷰트의 값이 "_blank"인 모든 요소 */
a[target="_blank"]{color: red;}
셀렉터[어트리뷰트~="값"] 지정된 어트리뷰트의 값이 지정된 값을 (공백으로 분리된) 단어로 포함하는 요소를 선택한다.
/* h1 요소 중에 title 어트리뷰트 값에 "first"를 단어로 포함하는 요소 */
h1[title~="first"] {color:red;}
< h1 title="heading first">Heading first< /h1> //적용됨
< h1 title="heading-first">Heading-first< /h1> //적용안됨
셀렉터[어트리뷰트|="값"] 지정된 어트리뷰트의 값과 일치하거나 지정 어트리뷰트 값 뒤 연이은 하이픈("값-")으로 시작하는 요소를 선택한다.
/* p 요소 중에 lang 어트리뷰트 값이 "en"과 일치하거나 "en-"로 시작하는 요소 */
p[lang|="en"]{color:red;}
셀렉터[어트리뷰트^="값"] 지정된 어트리뷰트 값으로 시작하는 요소를 선택한다.
/* a 요소 중에 href 어트리뷰트 값이 "https://"로 시작하는 요소 */
a[href^="https://"]{color:red;}
셀렉터[어트리뷰트$="값"] 지정된 어트리뷰트 값으로 끝나는 요소를 선택한다.
/* a 요소 중에 href 어트리뷰트 값이 ".html"로 끝나는 요소 */
a[href$=".html"]{color:red;}
셀렉터[어트리뷰트*="값"] 지정된 어트리뷰트 값을 포함하는 요소를 선택한다.
/* div 요소 중에서 class 어트리뷰트 값에 "test"를 포함하는 요소 */
div[class*="test"]{color:red;}
/* div 요소 중에서 class 어트리뷰트 값에 "test"를 단어로 포함하는 요소 */
div[class~="test"]{background-color:yellow;}
<DIV class="first_test">The first div element.</DIV>
<DIV class="test">The third div element.</DIV>
복합 셀렉터 (Combinator)
후손 셀렉터 (Descendant Combinator) 셀렉터A 셀렉터B /* div 요소의 후손요소 중 p 요소 */
div p{color:red;}
자식 셀렉터 (Child Combinator) 셀렉터A > 셀렉터B /* div 요소의 자식요소 중 p 요소 */
div > p{color:red;}
인접 형제 셀렉터(Adjacent Sibling Combinator) 셀렉터A + 셀렉터B /* p 요소의 형제 요소 중에 p 요소 바로 뒤에 위치하는 ul 요소를 선택한다. */
p + ul{color:red;}
일반 형제 셀렉터(General Sibling Combinator) 셀렉터A ~ 셀렉터B /* p 요소의 형제 요소 중에 p 요소 뒤에 위치하는 ul 요소를 모두 선택한다.*/
p ~ ul{color:red;}
가상 클래스 셀렉터 (Pseudo-Class Selector)
링크 셀렉터(Link pseudo-classes), 동적 셀렉터(User action pseudo-classes)
:link 셀렉터가 방문하지 않은 링크일 때 /* a 요소가 방문하지 않은 링크일 때 *
a:link{color:orange;}
/* a 요소가 방문한 링크일 때 */
a:visited{color:green;}
/* a 요소에 마우스가 올라와 있을 때 */
a:hover{font-weight:bold;}
/* a 요소가 클릭된 상태일 때 */
a:active{color:blue;}
/* text input 요소와 password input 요소에 포커스가 들어와 있을 때 */
input[type=text]:focus,input[type=password]:focus{color:red;}
:visited 셀렉터가 방문한 링크일 때
:hover 셀렉터에 마우스가 올라와 있을 때
:active 셀렉터가 클릭된 상태일 때
:focus 셀렉터에 포커스가 들어와 있을 때
UI 요소 상태 셀렉터(UI element states pseudo-classes)
:checked 셀렉터가 체크 상태일 때 /* input 요소가 사용 가능한 상태일 때,
input 요소 바로 뒤에 위치하는 인접 형제 span 요소를 선택 */
input:enabled + span{color:blue;}
/* input 요소가 사용 불가능한 상태일 때,
input 요소 바로 뒤에 위치하는 인접 형제 span 요소를 선택 */
input:disabled + span{color:gray;text-decoration:line-through;}
/* input 요소가 체크 상태일 때,
input 요소 바로 뒤에 위치하는 인접 형제 span 요소를 선택 */
input:checked + span{color:red;}
:enabled 셀렉터가 사용 가능한 상태일 때
:disabled 셀렉터가 사용 불가능한 상태일 때
구조 가상 클래스 셀렉터(Structural pseudo-classes)
:first-child 셀렉터에 해당하는 모든 요소 중 첫번째 자식인 요소를 선택한다. /* p 요소 중에서 첫번째 자식을 선택 */
p:first-child {color:red;}
/* p 요소 중에서 마지막 자식을 선택 */
/* body 요소의 두번째 p 요소는 마지막 자식 요소가 아니다.
body 요소의 마지막 자식 요소는 div 요소이다. */
p:last-child{color:blue;}
:last-child 셀렉터에 해당하는 모든 요소 중 마지막 자식인 요소를 선택한다.
:nth-child(n) 셀렉터에 해당하는 모든 요소 중 앞에서 n번째 자식인 요소를 선택한다. /* ol 요소의 자식 요소인 li 요소 중에서 짝수번째 요소만을 선택 */
ol > li:nth-child(2n){color:orange;}
/* ol 요소의 자식 요소인 li 요소 중에서 홀수번째 요소만을 선택 */
ol > li:nth-child(2n+1){color:green;}
/* ol 요소의 자식 요소인 li 요소 중에서 첫번쨰 요소만을 선택 */
ol > li:first-child{color:red;}
/* ol 요소의 자식 요소인 li 요소 중에서 마지막 요소만을 선택 */
ol > li:last-child{color:blue;}
/* ol 요소의 자식 요소인 li 요소 중에서 4번째 요소 요소만을 선택 */
ol > li:nth-child(4){background:brown;}
/* ul 요소의 모든 자식 요소 중에서 뒤에서부터 시작하여 홀수번째 요소만을 선택 */
ul > :nth-last-child(2n+1){color:red;}
/* ul 요소의 모든 자식 요소 중에서 뒤에서부터 시작하여 짝수번째 요소만을 선택 */
ul > :nth-last-child(2n){color:blue;}
:nth-child(n) : n은 0부터 시작하는 정수이다.
n 2n+1 2n-1 3n-2 3n+1 -n+5
0 1 -1 -2 1 5
1 3 1 1 4 4
2 5 3 4 7 3
3 7 5 7 1 2
4 9 7 10 13 1
5 11 9 13 16 0
:nth-last-child(n) 셀렉터에 해당하는 모든 요소 중 뒤에서 n번째 자식인 요소를 선택한다.
:first-of-type 셀렉터에 해당하는 요소의 부모 요소의 자식 요소 중 첫번째 등장하는 요소를 선택한다. /* p 요소의 부모 요소의 자식 요소 중 첫번째 등장하는 p 요소 */
p:first-of-type{color:red;}
/* p 요소의 부모 요소의 자식 요소 중 마지막 등장하는 p 요소 */
p:last-of-type{color:blue;}
/* p 요소의 부모 요소의 자식 요소 중 앞에서 2번째에 등장하는 p 요소 */
p:nth-of-type(2){color:green;}
/* p 요소의 부모 요소의 자식 요소 중 뒤에서 2번째에 등장하는 p 요소 */
p:nth-last-of-type(2){color:orange;}
/* p 요소 중에서 첫번째 자식을 선택 */
p:first-child{background:brown;}
:last-of-type 셀렉터에 해당하는 요소의 부모 요소의 자식 요소 중 마지막에 등장하는 요소를 선택한다.
:nth-of-type(n) 셀렉터에 해당하는 요소의 부모 요소의 자식 요소 중 앞에서 n번째에 등장하는 요소를 선택한다.
:nth-last-of-type(n) 셀렉터에 해당하는 요소의 부모 요소의 자식 요소 중 뒤에서 n번째에 등장하는 요소를 선택한다.
:not(셀렉터) 셀렉터에 해당하지 않는 모든 요소를 선택한다. /* input 요소 중에서 type 어트리뷰트의 값이 password가 아닌 요소를 선택 */
input:not([type=password]){background:yellow;}
가상 요소 셀렉터 (Pseudo-Element Selector)
::first-letter 콘텐츠의 첫글자를 선택한다. /* p 요소 콘텐츠의 첫글자를 선택 */
p::first-letter{font-size:3em;}
/* p 요소 콘텐츠의 첫줄을 선택 */
p::first-line{color:red;}
/* h1 요소 콘텐츠의 앞 공간에 content 어트리뷰트 값을 삽입한다 */
h1::before{content:" HTML!!! ";color:blue;}
/* h1 요소 콘텐츠의 뒷 공간에 content 어트리뷰트 값을 삽입한다 */
h1::after{content:" CSS3!!!";color:red;}
/* 드래그한 콘텐츠를 선택한다 */
::selection{color:red;background:yellow;}
::first-line 콘텐츠의 첫줄을 선택한다. 블록 요소에만 적용할 수 있다.
::after 콘텐츠의 뒤에 위치하는 공간을 선택한다. 일반적으로 content 어트리뷰트와 함께 사용된다.
::before 콘텐츠의 앞에 위치하는 공간을 선택한다. 일반적으로 content 어트리뷰트와 함께 사용된다.
::selection 드래그한 콘텐츠를 선택한다. iOS Safari 등 일부 브라우저에서 동작 않는다.
CSS 프로퍼티 값의 단위
크기 단위 px px은 픽셀(화소) 단위이다. 1px은 화소 1개 크기를 의미한다. 22인치 LCD 모니터의 경우 해상도가 1680 * 1050 인데 이것은 가로에 1680개의 픽셀, 세로에 1050개의 픽셀을 가진다는 의미이다. 200만 화소(픽셀)의 디지털 카메라로 찍은 사진은 1600 * 1200 = 1,920,000으로 통상 200만 화소라 한다.
% %는 백분률 단위의 상대 단위이다. 요소에 지정된 사이즈(상속된 사이즈나 디폴트 사이즈)에 상대적인 사이즈를 설정한다.
em em은 배수(倍數) 단위로 상대 단위이다. 요소에 지정된 사이즈(상속된 사이즈나 디폴트 사이즈)에 상대적인 사이즈를 설정한다. 예를 들어 1em은 요소에 지정된 사이즈와 같고 2em은 요소에 지정된 사이즈의 2배이다.폰트 사이즈 설정이나 콘텐츠를 포함하는 컨테이너의 크기 설정에 사용하면 상대적인 설정이 가능하여 편리하다.
rem em의 기준은 상속의 영향으로 바뀔 수 있다. 즉, 상황에 따라 1.2em은 각기 다른 값을 가질 수 있다. rem은 최상위 요소(html)의 사이즈를 기준으로 삼는다. rem의 r은 root를 의미한다.
Viewport 단위(vh, vw, vmin, vmax) 반응형 웹디자인은 화면의 크기에 동적으로 대응하기 위해 % 단위를 자주 사용한다. 하지만 % 단위는 em과 같이 상속에 의해 부모 요소에 상대적 영향을 받는다.Viewport 단위는 상대적인 단위로 viewport를 기준으로 한 상대적 사이즈를 의미한다.
Viewport 단위 vw viewport 너비의 1/100
vh viewport 높이의 1/100
vmin viewport 너비 또는 높이 중 작은 쪽의 1/100
vmax viewport 너비 또는 높이 중 큰 쪽의 1/100
COLOR
IOS Palette
Dark Blue #5856d6 #5856d6 rgb(88,86,214)
Deep Blue #007aff #007aff rgb(0,122,255)
Blue #34aadc #34aadc rgb(52,170,220)
Light Blue #5ac8fa #5ac8fa rgb(90,200,250)
Green #4cd964 #4cd964 rgb(76,217,100)
Pink #ff2d55 #ff2d55 rgb(255,45,85)
Red #ff3b30 #ff3b30 rgb(255,59,48)
Orange #ff9500 #ff9500 rgb(255,149,0)
Yellow #ffcc00 #ffcc00 rgb(255,204,0)
Gray #8e8e93 #8e8e93 rgb(142,142,147)
IOS Palette
Dark Blue #5856d6 #5856d6 rgb(88,86,214)
Deep Blue #007aff #007aff rgb(0,122,255)
Blue #34aadc #34aadc rgb(52,170,220)
Light Blue #5ac8fa #5ac8fa rgb(90,200,250)
Green #4cd964 #4cd964 rgb(76,217,100)
Pink #ff2d55 #ff2d55 rgb(255,45,85)
Red #ff3b30 #ff3b30 rgb(255,59,48)
Orange #ff9500 #ff9500 rgb(255,149,0)
Yellow #ffcc00 #ffcc00 rgb(255,204,0)
Gray #8e8e93 #8e8e93 rgb(142,142,147)
Material Palette
Red #e51c23 #e51c23 rgb(229,28,35)
Pink #e91e63 #e91e63 rgb(233,30,99)
Purple #9c27b0 #9c27b0 rgb(156,39,176)
Deep Purple #673ab7 #673ab7 rgb(103,58,183)
Indigo #3f51b5 #3f51b5 rgb(63,81,181)
Blue #5677fc #5677fc rgb(86,119,252)
Light Blue #03a9f4 #03a9f4 rgb(3,169,244)
Cyan #00bcd4 #00bcd4 rgb(0,188,212)
Teal #009688 #009688 rgb(0,150,136)
Green #259b24 #259b24 rgb(37,155,36)
Light Green #8bc34a #8bc34a rgb(139,195,74)
Lime #cddc39 #cddc39 rgb(205,220,57)
Yellow #ffeb3b #ffeb3b rgb(255,235,59)
Amber #ffc107 #ffc107 rgb(255,193,7)
Orange #ff9800 #ff9800 rgb(255,152,0)
Deep Orange #ff5722 #ff5722 rgb(255,87,34)
Brown #795548 #795548 rgb(121,85,72)
Grey #9e9e9e #9e9e9e rgb(158,158,158)
Blue Grey #607d8b #607d8b rgb(96,125,139)
Black #000000 #000000 rgb(0,0,0)
White #ffffff #ffffff rgb(255,255,255)
Flat Palette
Turquoise #1abc9c #1abc9c rgb(26,188,156)
Emerald #2ecc71 #2ecc71 rgb(46,204,113)
Peter River #3498db #3498db rgb(52,152,219)
Amethyst #9b59b6 #9b59b6 rgb(155,89,182)
Wet Asphalt #34495e #34495e rgb(52,73,94)
Green Sea #16a085 #16a085 rgb(22,160,133)
Nephritis #27ae60 #27ae60 rgb(39,174,96)
Belize Hole #2980b9 #2980b9 rgb(41,128,185)
Wisteria #8e44ad #8e44ad rgb(142,68,173)
Midnight Blue #2c3e50 #2c3e50 rgb(44,62,80)
Sun Flower #f1c40f #f1c40f rgb(241,196,15)
Carrot #e67e22 #e67e22 rgb(230,126,34)
Alizatin #e74c3c #e74c3c rgb(231,76,60)
Clouds #ecf0f1 #ecf0f1 rgb(236,240,241)
Concrete #95a5a6 #95a5a6 rgb(149,165,166)
Orange #f39c12 #f39c12 rgb(243,156,18)
Pumpkin #d35400 #d35400 rgb(211,84,0)
Pomegrenade #c0392b #c0392b rgb(192,57,43)
Silver #bdc3c7 #bdc3c7 rgb(189,195,199)
Asbesthos #7f8c8d #7f8c8d rgb(127,140,141)
WP8 Palette
Lime #a4c400 #a4c400 rgb(164,196,0)
Green #60a917 #60a917 rgb(96,169,23)
Emerald #008a00 #008a00 rgb(0,138,0)
Tral #00aba9 #00aba9 rgb(0,171,169)
Cyan #1ba1e2 #1ba1e2 rgb(27,161,226)
Cobalt #0050ef #0050ef rgb(0,80,239)
Indigo #6a00ff #6a00ff rgb(106,0,255)
Violet #aa00ff #aa00ff rgb(170,0,255)
Magenta #d80073 #d80073 rgb(216,0,115)
Pink #f472d0 #f472d0 rgb(244,114,208)
Crimson #a20025 #a20025 rgb(162,0,37)
Red #e51400 #e51400 rgb(229,20,0)
Orange #fa6800 #fa6800 rgb(250,104,0)
Amber #f0a30a #f0a30a rgb(240,163,10)
Yellow #e3c800 #e3c800 rgb(227,200,0)
Brown #825a2c #825a2c rgb(130,90,44)
Olive #6d8764 #6d8764 rgb(109,135,100)
Steel #647687 #647687 rgb(100,118,135)
Mauve #76608a #76608a rgb(118,96,138)
Sienna #a0522d #a0522d rgb(160,82,45)
RGBA Palette
White rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)
rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.1)
Lightgray rgba(0,0,0,0.2) rgba(0,0,0,0.2) rgba(0,0,0,0.2)
Silver rgba(0,0,0,0.3) rgba(0,0,0,0.3) rgba(0,0,0,0.3)
Darkgray rgba(0,0,0,0.4) rgba(0,0,0,0.4) rgba(0,0,0,0.4)
Gray rgba(0,0,0,0.5) rgba(0,0,0,0.5) rgba(0,0,0,0.5)
Dimgrey rgba(0,0,0,0.6) rgba(0,0,0,0.6) rgba(0,0,0,0.6)
rgba(0,0,0,0.7) rgba(0,0,0,0.7) rgba(0,0,0,0.7) rgba(0,0,0,0.7)
rgba(0,0,0,0.8) rgba(0,0,0,0.8) rgba(0,0,0,0.8) rgba(0,0,0,0.8)
rgba(0,0,0,0.9) rgba(0,0,0,0.9) rgba(0,0,0,0.9) rgba(0,0,0,0.9)
Black rgba(0,0,0,1) rgba(0,0,0,1) rgba(0,0,0,1)
Gray Palette
White #ffffff #ffffff rgba(0,0,0,0)
Gainsboro #dcdcdc #dcdcdc rgb(220,220,220)
Lightgray #d3d3d3 #d3d3d3 rgb(211,211,211)
Silver #c0c0c0 #c0c0c0 rgb(192,192,192)
Darkgray #a9a9a9 #a9a9a9 rgb(169,169,169)
Gray #808080 #808080 rgb(128,128,128)
Dimgrey #696969 #696969 rgb(105,105,105)
Lightslategray #778899 #778899 rgb(119,136,153)
Slategray #708090 #708090 rgb(112,128,144)
Darkslategray #2f4f4f #2f4f4f rgb(47,79,79)
Black #000000 #8e8e93 rgb(0,0,0)
Decimal Red, Green, Blue, and Opacity Color Codes
ColorName rgb(R,G,B) a=1 a=0.9 a=0.8 a=0.7 a=0.6 a=0.5 a=0.4 a=0.3 a=0.2 a=0.1 a=0
Black rgb(0,0,0) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Navy rgb(0,0,128) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Blue rgb(0,0,255) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Green rgb(0,128,0) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Teal rgb(0,128,128) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Lime rgb(0,255,0) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Aqua rgb(0,255,255) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Maroon rgb(128,0,0) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Purple rgb(128,0,128) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Olive rgb(128,128,0) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Gray rgb(128,128,128) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Silver rgb(192,192,192) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Red rgb(255,0,0) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Fuchsia rgb(255,0,255) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
Yellow rgb(255,255,0) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
White rgb(255,255,255) TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT
CSS3 BOX MODEL
BORDER
border-style border-style 프로퍼티는 테두리 선의 스타일을 지정한다.
border-style: dashed;
border-style: dotted solid;
border-style: hidden double dashed;
border-style: none solid dotted dashed;

none | solid | dotted | dashed | double | groove | ridge | inset | outset | hidden
border-width border-width 프로퍼티는 테두리의 두께를 지정한다. 프로퍼티 값의 갯수에 따라 4개 방향(top, right, left, bottom)에 대하여 지정이 가능하다.
border-width 프로퍼티는 border-style과 함께 사용하지 않으면 적용되지 않는다.

border-width:top,right,bottom,left
border-width:3px 2px 1px 2px;
border-width:top,(right+left),bottom
border-width:3px 1px 2px;
border-width:(top+bottom),(right+left)
border-width:3px 2px;
border-방향-요소
border-top-width:3px;
border-right-style:dotted;
border-width: thin; /* 1px */
border-width: medium; /* 3px */
border-width: thick; /* 5px */
border-width: 15px;
border-width: 2px 10px 4px 20px;
border-color border-color 프로퍼티는 테두리의 색상을 지정한다. 프로퍼티 값의 갯수에 따라 4개 방향(top, right, left, bottom)에 대하여 지정이 가능하다.
border-color 프로퍼티는 border-style과 함께 사용하지 않으면 적용되지 않는다.
HEX,rgb(),colorname
border-bottom-color:#aaa;
border-color: red;
border-color: red green blue yellow;
border-radius border-radius 프로퍼티는 테두리 모서리를 둥글게 표현하도록 지정한다. 프로퍼티 값은 길이를 나타내는 단위(px, em 등)와 %를 사용한다. 각각의 모서리에 border-radius 프로퍼티를 개별적으로 지정할 수도 있고 4개의 모서리를 short-hand로 한번에 지정할 수도 있다. border-radius: 5px;
border-radius: 50%;
border-radius: 15px 75px;
border-radius: 10px 40px 40px 10px;
border-top-left-radius: 50px 25px;
border-radius: 50px 50px 0 0 / 25px 25px 0 0;

border-radius: 10px 20px 30px 40px / 5px 10px 15px 20px;
border-top-left-radius: 10px 5px;
border-top-right-radius: 20px 10px;
border-bottom-right-radius: 30px 15px;
border-bottom-left-radius: 40px 20px;
border border 프로퍼티는 border-width, border-style, border-color를 한번에 설정하기 위한 shorthand 프로퍼티이다. border: 5px solid red;
box-sizing 프로퍼티
box-sizing 프로퍼티는 width, height 프로퍼티의 대상 영역을 변경할 수 있다. box-sizing 프로퍼티의 기본값은 content-box이다. 이는 width, height 프로퍼티의 대상 영역이 content 영역을 의미한다. box-sizing 프로퍼티의 값을 border-box로 지정하면 마진을 제외한 박스 모델 전체를 width, height 프로퍼티의 대상 영역으로 지정할 수 있어서 CSS Layout을 직관적으로 사용할 수 있게 한다.
content-box width, height 프로퍼티 값은 content 영역을 의미한다. (기본값) .content-box {
width: 600px;border: 10px solid;padding: 50px;margin: 50px;background-color: red;}
border-box width, height 프로퍼티 값은 content 영역, padding, border가 포함된 값을 의미한다. .border-box {
box-sizing: border-box;
width: 600px;border: 10px solid;padding: 50px;margin: 50px;background-color: red;}
BORDER
margin,padding,width,height
padding:20px
width:200px,height:200px,padding:5px;
Box는 콘텐트(Content), 패딩(Padding), 테두리(Border), 마진(Margin)로 구성된다
Margin
Border
Padding
Content
CSS3 DISPLAY
display 프로퍼티 block block 특성을 가지는 요소(block 레벨 요소)로 지정
inline inline 특성을 가지는 요소(inline 레벨 요소)로 지정
inline-block inline-block 특성을 가지는 요소(inline-block 레벨 요소)로 지정
none 해당 요소를 화면에 표시하지 않는다 (공간조차 사라진다)
block 레벨 요소 div,h1 ~ h6,p,ol,ul,li,hr,table,form
block 특성을 가지는 요소(block 레벨 요소 또는 block 요소)는 아래와 같은 특징을 갖는다.
항상 새로운 라인에서 시작한다.
화면 크기 전체의 가로폭을 차지한다. (width: 100%)
width, height, margin, padding 프로퍼티 지정이 가능하다.
block 레벨 요소 내에 inline 레벨 요소를 포함할 수 있다.
inline 레벨 요소 span,a,strong,img,br,input,select,textarea,button
inline 특성을 가지는 요소(inline 레벨 요소 또는 inline 요소)는 아래와 같은 특징을 갖는다.
새로운 라인에서 시작하지 않으며 문장의 중간에 들어갈 수 있다. 즉, 줄을 바꾸지 않고 다른 요소와 함께 한 행에 위치한다.
content의 너비만큼 가로폭을 차지한다.
width, height, margin-top, margin-bottom 프로퍼티를 지정할 수 없다.
상, 하 여백은 line-height로 지정한다.
inline 레벨 요소 뒤에 공백(엔터, 스페이스 등)이 있는 경우, 정의하지 않은 space(4px)가 자동 지정된다.
inline 레벨 요소 내에 block 레벨 요소를 포함할 수 없다. inline 레벨 요소는 일반적으로 block 레벨 요소에 포함되어 사용된다.
inline-block 레벨 요소 block과 inline 레벨 요소의 특징을 모두 갖는다. inline 레벨 요소와 같이 한 줄에 표현되면서 width, height, margin 프로퍼티를 모두 지정할 수 있다. 기본적으로 inline 레벨 요소와 흡사하게 줄을 바꾸지 않고 다른 요소와 함께 한 행에 위치시킬 수 있다.
block 레벨 요소처럼 width, height, margin, padding 프로퍼티를 모두 정의할 수 있다. 상, 하 여백을 margin과 line-height 두가지 프로퍼티 모두를 통해 제어할 수 있다.
content의 너비만큼 가로폭을 차지한다.
inline-block 레벨 요소 뒤에 공백(엔터, 스페이스 등)이 있는 경우, 정의하지 않은 space(4px)가 자동 지정된다. 이것을 회피 방법은 Fighting the Space Between Inline Block Elements를 참조하기 바란다.
div,h1 ~ h6,p,ol,ul,li,hr,table,form 은 block 속성을 가지고,
span,a,strong,img,br,input,select,textarea,button 은 inline 속성을 가진다.
inline-block 사이에 공백이 생기게 되는데, parent 태그에 font-size: 0를 적용하면 해결된다.
inline-block 끼리 높이가 안맞을 때 상위 공백이 생기게 되는데 vertical-align: top을 적용하면 해결할 수 있다.
visibility 프로퍼티 visible 해당 요소를 보이게 한다 (기본값)
hidden 해당 요소를 보이지 않게 한다. display: none;은 해당 요소의 공간까지 사라지게 하지만 visibility: hidden;은 해당 요소의 공간은 사라지지 않고 남아있게 된다.
collapse table 요소에 사용하며 행이나 열을 보이지 않게 한다.
none table 요소의 row나 column을 보이지 않게 한다. IE, 파이어폭스에서만 동작하며 크롬에서는 hidden과 동일하게 동작한다.
opacity 프로퍼티 opacity 프로퍼티는 요소의 투명도를 정의한다. 0.0 ~ 1.0의 값을 입력하며 0.0은 투명, 1.0은 불투명을 의미한다.
DIV
display block | inline | inline-block | none | inherit
visibility visible | hidden | collapse(table td)
overflow visible | scroll | hidden | auto | inherit
float none | left | right | inherit
clear none | left | right | both | inherit
Display
display width height margine,padding,
border,line-height
inline auto auto 0 (top,bottom 변경안됨)
inline-block auto auto 0 (변경가능)
block 100% auto 0 (변경가능)


display 와 visibility 차이

display:none;
A
C
visibility:hidden;
A
C
display:none;
A B C
1 2 3
visibility:collapse;
A B C
1 2 3
CSS3 BACKGROUND
background-image 프로퍼티 요소에 배경 이미지를 지정한다. background-image: url("http://poiemaweb.com/img/bg/dot.png");
background-repeat 프로퍼티 배경 이미지의 반복을 지정한다. 수직, 수평 또는 수직과 수평 모두의 반복을 지정할 수 있다.
설정된 이미지의 크기가 화면보다 작으면 자동으로 이미지가 반복 출력되어 화면을 채우게 된다. 이것은 background-repeat 프로퍼티의 기본값이 repeat이기 때문이다.
x축으로만 배경 이미지를 반복할 경우, background-repeat 프로퍼티값에 repeat-x, y축으로만 배경 이미지를 반복할 경우, repeat-y를 설정한다.

repeat | repeat-x | repeat-y | no-repeat | inherit
background-repeat: repeat-x;
background-repeat: no-repeat;

background-image: url("http://poiemaweb.com/img/bg/dot.png"), url("http://poiemaweb.com/img/bg/paper.gif");
background-repeat: no-repeat, repeat;
background-size 프로퍼티 배경 이미지의 사이즈를 지정한다. 배경 이미지의 고유 비율을 유지하기 때문에 설정에 따라 이미지의 일부가 보이지 않을 수 있다.
프로퍼티값은 px, %, cover, contain 등을 사용한다.
배경이미지의 width, height를 모두 설정할 수 있다. 이때 첫번째 값은 width, 두번째 값은 height를 의미한다.하나의 값만을 지정한 경우, 지정한 값은 width를 의미하게 되며 height는 auto로 지정된다.
px값 지정 : 배경이미지 크기가 지정된 px값 그대로 설정된다. 첫번째 값은 width, 두번째 값은 height를 의미한다.
.bg {background-size: 700px 500px;}
%값 지정 : 배경이미지 크기가 지정된 %값에 비례하여 설정된다. 첫번째 값은 width, 두번째 값은 height를 의미한다.
.bg {background-size: 100% 100%;}
cover 지정 : 배경이미지의 크기 비율을 유지한 상태에서 부모 요소의 width, height 중 큰값에 배경이미지를 맞춘다. 따라서 이미지의 일부가 보이지 않을 수 있다.
.bg {background-size: cover;}
contain 지정 : 배경이미지의 크기 비율을 유지한 상태에서 부모 요소의 영역에 배경이미지가 보이지 않는 부분없이 전체가 들어갈 수 있도록 이미지 스케일을 조정한다.
.bg {background-size: contain;}
background-attachment 프로퍼티 일반적으로 화면을 스크롤하면 배경 이미지도 함께 스크롤된다. 화면이 스크롤되더라도 배경이미지는 스크롤되지 않고 고정되어 있게 하려면 background-attachment 프로퍼티에 fixed 키워드를 지정한다.

scroll | local | fixed | inherit
/* page-wrap 보다 bg-wrap이 작은 경우, page-wrap이 가리는 문제를 해결 */
.bg-wrap {
min-height: 600px;height: 100%;background-size: cover;background-position: center;background-repeat: no-repeat;overflow: auto;
} /* or padding: 0.1px; */
.parallax { /* parallax scrolling effect */
background-image: url("http://poiemaweb.com/img/bg/stock-photo-125979219.jpg");background-attachment: fixed;
}
.normal {background-image: url("http://poiemaweb.com/img/bg/stock-photo-155153867.jpg");}
#page-wrap {
width: 400px;margin: 50px auto;padding: 30px;background: white;box-shadow: 0 0 20px black;font: 15px/2 Georgia, Serif;
} /* size/line-height | family */
마진 상쇄 문제 해결을 위한 코드
https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Box_Model/Mastering_margin_collapsing
background-position 프로퍼티 일반적으로 background-image는 좌상단부터 이미지를 출력한다. 이때 background-position 프로퍼티를 사용하면 이미지의 좌표(xpos, ypos)를 지정 할 수 있다.
기본값은 background-position: 0% 0%;로 배경이미지는 우측 상단에 위치하게 된다.

px | % | left,right | top,bottom | center | inherit
background-position: top;
background-position: bottom;
background-position: center;
background-position: left;
background-position: right;
background-position: 25% 75%;
background-position: 10px 20px;
background-image: url("http://poiemaweb.com/img/bg/dot.png"), url("http://poiemaweb.com/img/bg/dot.png");
background-position: 0px 0px, center;
background-color 프로퍼티 background-color 프로퍼티는 요소의 배경 색상을 지정한다. 색상값 또는 transparent 키워드를 지정할 수 있다. .bg-col-white {background-color: rgb(255, 255, 255);}
.bg-col-red {background-color: red;}
background Shorthand background-color, background-image, background-repeat, background-position를 한번에 정의하기 위한 Shorthand Syntax이다.
background: color || image || repeat || attachment || position
/* background: color || image || repeat || attachment || position */
div {background: #FFEE99 url("http://poiemaweb.com/img/bg/dot.png") no-repeat center;width: 50vw;height: 300px;}
CSS3 FONT & TEXT
font-size 프로퍼티 텍스트의 크기를 정의한다. .font-size-40 { font-size: 40px; }
.font-size-2x { font-size: 2.0em; }
.font-size-150ps { font-size: 150%; }
.font-size-large { font-size: large; }
Font
color HEX,rgb(),colorname 글자색상
font-family font-family:'NanumSquareRound','Sans-serif'; 글자서체
font-size px(pixel),pt(point),em,%(percent) 글자크기
font-style normal | italic | oblique | initial | inherit 글자스타일
font-weight 100 - 900 | normal(400) | bold(700) | inherit 글자굵기
font-variant normal | small-caps | inherit 대소문자스타일
line-height px(lenght),%(percent) 줄간격
font font-style font-variant font-weight font-size/line-height font-family font:italic bold 12px/1.6 arial, helvetica, sans-serif;
point : 인쇄매체 고정단위(12pt = 100%)
pixel : 컴퓨터화면 고정단위(16pt = 100%)
Font Size
Size point example pixel example
Large
Title
34pt 큰제목 45px 큰제목
Title1 28pt 제목1 37px 제목1
Title2 22pt 제목2 29px 제목2
Title3 20pt 제목3 26px 제목3
Headline 17pt 표제 23px 표제
Body 17pt 본문 23px 본문
Callout 16pt 인용문 22px 인용문
Subhead 15pt 소제목 21px 소제목
Footnote 13pt 각주 17px 각주
Caption1 12pt 설명1 16px 설명1
Caption2 11pt 설명2 15px 설명2
Text5 10pt 내용5 13px 내용5
Text4 9pt 내용4 12px 내용4
Text3 8pt 내용3 11px 내용3
Text2 7pt 내용2 9px 내용2
Text1 6pt 내용1 8px 내용1
font-family 프로퍼티 폰트를 지정한다. 컴퓨터에 해당 폰트가 설치되어 있지 않으면 적용되지 않는다.
폰트는 여러 개를 동시에 지정이 가능하다. 첫번째 지정한 폰트가 클라이언트 컴퓨터에 설치되어 있지 않은 경우, 다음에 지정된 폰트를 적용한다. 따라서 마지막에 지정하는 폰트는 대부분의 OS에 기본적으로 설치되어 있는 generic-family 폰트(Serif, Sans-serif, Mono space)를 지정하는 것이 일반적이다.
.serif {font-family: "Times New Roman", Times, serif;}
.sans-serif {font-family: Arial, Helvetica, sans-serif;}
.monospace {font-family: "Courier New", Courier, monospace;}
font-style / font-weight 프로퍼티 font-style 프로퍼티는 이탤릭체의 지정, font-weight 프로퍼티는 폰트 굵기 지정에 사용된다. /* font-style : normal / italic / oblique */
.italic {font-style: italic;}

/* font-weight : 100 ~ 900 or normal / bold / lighter / bolder */
.light {font-weight: lighter;}
.thick {font-weight: bold;}
.thicker {font-weight: 900;}
font Shorthand font : font-style(optional) font-variant(optional) font-weight(optional) font-size(mandatory) line-height(optional) font-family(mandatory)
font: 2em "Open Sans", serif; /* size | family */
font: italic 2em "Open Sans", sans-serif; /* style | size | family */
font: italic small-caps bolder 16px/1.2 monospace; /* style | variant | weight | size/line-height | family */
/* font-variant: small-caps; 소문자를 대문자로 만든다. 단 크기는 일반 대문자에 비해 더 작다.*/
font: italic small-caps bolder 16px/3 cursive; /* style | variant | weight | size/line-height | family */
line-height 프로퍼티 텍스트의 높이를 지정한다. 텍스트 수직 정렬에도 응용되어 사용된다. .small {line-height: 70%;} /* 16px * 70% */
.big {line-height: 1.2;} /* 16px * 1.2 */
.lh-3x {line-height: 3.0;} /* 16px * 3 */
letter-spacing 프로퍼티 글자 사이의 간격을 지정한다. .loose {letter-spacing: 2px;}
.tight {letter-spacing: -1px;}
text-align 프로퍼티 텍스트의 수평 정렬을 정의한다.

left | right | center | justify
h1 { text-align: center; }
h3 { text-align: right; }
p.left { text-align: left; }
p.justify { text-align: justify; }
a { text-align: center; }
text-decoration 프로퍼티 text-decoration 프로퍼티를 사용하여 링크 underline을 제거할 수 있다. 또는 텍스트에 underline, overline, line-through를 추가할 수도 있다.

none | underline | overline | line-through
a { text-decoration: none; }
p:nth-of-type(3) { text-decoration: underline; }
underline

p:nth-of-type(1) { text-decoration: overline; }
overline

p:nth-of-type(2) { text-decoration: line-through; }
line-through
white-space 프로퍼티 white space는 공백(space), 들여쓰기(tab), 줄바꿈(line break)을 의미한다. html은 기본적으로 연속된 공백(space), 들여쓰기(tab)는 1번만 실행되며 줄바꿈(line break)은 무시된다. 또한 텍스트는 부모의 가로 영역을 벗어나지 않고 자동 줄바꿈(wrap)된다. white-space 프로퍼티는 이러한 기본 동작을 제어하기 위한 프로퍼티이다. .normal { white-space: normal; }
.nowrap { white-space: nowrap; }
.pre { white-space: pre; }
.pre-wrap { white-space: pre-wrap; }
.pre-line { white-space: pre-line; }
white-space
white-space 새줄변경 공백처리 줄바꿈 example
normal 공백1칸 공백1칸 자동줄바꿈
고구 마 는 맛있다
nowrap 공백1칸 공백1칸 줄바꿈안됨
고구 마 는 맛있다
pre 공백없음 공백유지 줄바꿈안됨
고구 마는 맛있다
pre-wrap 공백없음 모두유지 자동줄바꿈
고구 마 는 맛있다
pre-line 공백없음 공백1칸 자동줄바꿈
고구 마 는 맛있다
text-overflow 프로퍼티 부모 영역을 벗어난 wrapping(자동줄바꿈)이 되지 않은 텍스트의 처리 방법을 정의한다. 이 프로퍼티를 사용하기 위해서는 아래의 조건이 필요하다.
overflow 프로퍼티에 반드시 "visible" 이외의 값이 지정되어 있어야 한다.
width 프로퍼티가 지정되어 있어야 한다. 이를 위해 필요할 경우 block 레벨 요소로 변경하여야한다.
자동 줄바꿈을 방지하려면 white-space 프로퍼티를 nowrap으로 설정한다.
div {
width: 150px; /* width가 지정되어 있어야 한다. */
white-space: nowrap; /* 자동 줄바꿈을 방지 */
overflow: hidden; /* 반드시 "visible" 이외의 값이 지정되어 있어야 한다. */
}
.clip { text-overflow: clip; } /* 영역을 벗어난 부분을 표시하지 않는다. (기본값) */
.ellipsis { text-overflow: ellipsis; } /* 영역을 벗어난 부분을 잘라내어 보이지 않게 하고 말줄임표(…)를 표시한다. */
.string { text-overflow: '☺'; } /* only Firefox(9.0~) */
word-wrap 프로퍼티 한 단어의 길이가 길어서 부모 영역을 벗어난 텍스트의 처리 방법을 정의한다. link 등을 표기할 때(e.g. http://poiemaweb.com/css3-font-text) 그 길이가 매우 길어지는데 이 프로퍼티를 사용하지 않으면 부모 영역을 넘어가게 된다. .word-wrap { word-wrap: break-word; }
word-break 프로퍼티 한 단어의 길이가 길어서 부모 영역을 벗어난 텍스트의 처리 방법을 정의한다.
word-wrap 프로퍼티는 단어를 어느 정도는 고려하여 개행하지만(.,- 등을 고려한다) word-break: break-all;는 단어를 고려하지 않고 부모 영역에 맞추어 강제 개행한다.
.word-wrap { word-wrap: break-word; }
.word-break { word-break: break-all; }
text-transform none
capitalize
uppercase
lowercase
inherit
none
capitalize
uppercase
lowercase
inherit
text-indent px(lenght) (+)들여쓰기,(-)내어쓰기
word-spacing px(lenght) 단어간의간격
vertical-align baseline
sub
super
top
text-top
bottom
text-bottom
middle
px(lenght)
%(percent)
inherit
baseline
subsub
supersuper
toptop
text-toptext-top
bottombottom
text-bottomtext-bottom
middlemiddle
px(lenght)
%(percent)
inherit
CSS3 POSITION
position 프로퍼티
static (기본위치) 좌표 프로퍼티(top, bottom, left, right)를 같이 사용할 수 없으며 사용할 경우에는 무시된다. .static-box {position: static;background: #2E303D;}
relative (상대위치) 좌표 프로퍼티(top, bottom, left, right)를 사용하여 위치를 이동시킨다. .relative-box {position: relative;top: 50px; left: 50px;background: #2E303D;}
absolute (절대위치) relative, absolute, fixed 프로퍼티가 선언되어 있는 부모 또는 조상 요소를 기준으로 좌표 프로퍼티(top, bottom, left, right)만큼 이동한다.
absolute 선언 시, block 레벨 요소의 width는 inline 요소와 같이 content에 맞게 변화되므로 적절한 width를 지정하여야 한다.
.absolute-box {position: absolute;height: 200px; width: 200px;top: 50px; left: 50px;text-align: center;background: #2E303D;line-height: 200px;}
relative 프로퍼티와 absolute 프로퍼티의 차이점
relative 프로퍼티는 기본 위치(static으로 지정되었을 때의 위치)를 기준으로 좌표 프로퍼티(top, bottom, left, right)을 사용하여 위치를 이동시킨다. absolute 프로퍼티는 부모에 static 이외의 position 프로퍼티가 지정되어 있을 경우에만 부모를 기준으로 위치하게 된다. .relative-box {position: relative;top: 10px; left: 10px;width: 150px;height: 150px;background: #2E303D;}
.absolute-box {position: absolute;top: 10px; left: 10px;width: 150px;height: 150px;background: #2E303D;}
<div class="parent"><div class="absolute-box">absolute box</div></div>
<div class="parent"><div class="relative-box">relative box</div></div>
fixed (고정위치) 부모 요소와 관계없이 브라우저의 viewport를 기준으로 좌표프로퍼티(top, bottom, left, right)을 사용하여 위치를 이동시킨다.
스크롤이 되더라도 화면에서 사라지지 않고 항상 같은 곳에 위치한다.
fixed 프로퍼티 선언 시, block 요소의 width는 inline 요소와 같이 content에 맞게 변화되므로 적절한 width를 지정하여야 한다.
.fixed-box {position: fixed;background: #2E303D;}
.sidebar {width: 50px;height: 100%;top: 0;right: 0;padding-top: 100px;}
.footer {width: 200px;width: 100%;height: 50px;bottom: 0;left: 0;line-height: 50px;}
<div class="fixed-box sidebar">fixed box (side-bar)</div>
<div class="fixed-box footer">fixed box (footer)</div>
z-index 프로퍼티 z-index 프로퍼티에 큰 숫자값을 지정할수록 화면 전면에 출력된다. positon 프로퍼티가 static 이외인 요소에만 적용된다. .normal-box {width: 100px; height: 100px;}
.absolute-box {width: 100px; height: 100px;position: absolute;}
/* z-index는 positon 프로퍼티가 static 이외인 요소에만 적용된다. */
.orange {background-color: orange;z-index: 1000;}
.red {background-color: red;left: 50px; top: 50px;z-index: 100;}
.green {background-color: green;left: 100px; top: 100px;z-index: 10;}
.blue {background-color: blue;left: 150px; top: 150px;z-index: 1;}
overflow 프로퍼티 overflow 프로퍼티는 자식 요소가 부모 요소의 영역를 벗어났을 때 처리 방법을 정의한다.
visible : 영역을 벗어난 부분을 표시한다. (기본값)
hidden : 영역을 벗어난 부분을 잘라내어 보이지 않게 한다.
scroll : 영역을 벗어난 부분이 없어도 스크롤 표시한다.(현재 대부분 브라우저는 auto과 동일하게 작동한다)
auto : 영역을 벗어난 부분이 있을때만 스크롤 표시한다.
div {width: 150px;height: 150px;padding: 10px;margin: 30px;border-radius: 6px;border-color: gray;border-style: dotted;float: left;}
.visible { overflow: visible; }
.hidden { overflow: hidden; }
.scroll { overflow: scroll; }
.auto { overflow: auto; }
overflow 특정 방향으로만 스크롤을 표시하고자 할 때는 overflow-x 또는 overflow-y 프로퍼티를 사용한다. div { overflow-y: auto; }
visible
이 속성 값을 사용한 요소는 안에 콘텐츠들이 박스를 벗어나더라도 그대로 노출시킵니다.
scroll
이 속성 값을 사용한 요소는 스크롤로 내용을 확인할 수 있습니다.
hidden
당신은 이 박스를 벗어나는 내용을 볼 수 없습니다. 왜냐하면 hidden 처리되었기 때문이죠.
auto
내용이 짧으면 스크롤 안보인다.
auto
하지만 내부의 콘텐츠가 박스를 벗어나기 시작하면 스크롤을 노출시킵니다.
CSS3 Float
정렬 float 프로퍼티를 사용하지 않은 블록 요소들은 수직으로 정렬된다. float:left; 프로퍼티를 사용하면 왼쪽부터 가로 정렬되고, float:right; 프로퍼티를 사용하면 오른쪽부터 가로 정렬된다. .d1, .d2 {float: left;}
.d1 {background: red;}
.d2 {background: orange;}
.d3, .d4 {float: right;}
.d3 {background: red;}
.d4 {background: orange;}
width width 프로퍼티의 기본값은 100%이므로 width 프로퍼티값을 지정하지 않은 block 요소는 부모 요소의 가로폭을 가득 채운다. .box {color: white;padding: 10px;margin:10px;}
.d1 {background: red;}
.d2 {background: orange;}
box d1
box d2
.d1 {float: left;background: red;}
box d1
box d2
float 프로퍼티 관련 문제 해결 방법
float 프로퍼티가 선언된 요소와 float 프로퍼티가 선언되지 않은 요소간 margin이 사라지는 문제
두 요소는 차례대로 정렬된 것처럼 보이지만 사실은 float 프로퍼티가 선언된 요소가 다음 요소 위에 떠 있는(부유하고 있는) 상태이다.
이것은 두번째 요소에 float 프로퍼티를 선언하지 않았기 때문에 발생하는 박스 모델 상의 문제이다.
이 문제를 해결하는 가장 쉬운 방법은 float 프로퍼티를 선언하지 않은 요소(.d2)에 overflow: hidden 프로퍼티를 선언하는 것이다.
overflow: hidden 프로퍼티는 자식 요소가 부모 요소의 영역보다 클 경우 넘치는 부분을 안보이게 해주는 역할을 하는데 여기서는 float 프로퍼티가 없어서 제대로 표현되지 못하는 요소를 제대로 출력해준다.
.d2 {background: orange;}
box d1
box d2
.d2 {overflow: hidden;background: orange;}
box d1
box d2
float 프로퍼티가 선언된 자식 요소를 포함하는 부모 요소의 높이가 정상적으로 반영되지 않는 문제
float 프로퍼티가 선언된 두개의 자식 요소를 포함하는 부모 요소의 높이가 정상적인 값을 가지지 못하는 문제가 발생한다.
float 요소는 일반적인 흐름 상에 존재하지 않기 때문에 float 요소의 높이를 알 수 없기 때문인데 이 문제는 부모 요소 이후에 위치하는 요소의 정렬에 문제를 발생시킨다.
.container {overflow: visible ;}
1
2
3
.container {overflow: hidden;}
1
2
3
<div STYLE="height: 0;clear: both;"></div>
1
2
3
.clearfix:after {content: '';display: block;clear: both;}
1
2
3
.d1, .d2 {display: inline-block;}
1
2
3
.d1, .d2 {display: inline-block;font-size: 1rem;}
1
2
3
overflow:visible;
<DIV STYLE="overflow:visible;">
A
B
C
D
overflow:hidden;
<DIV STYLE="overflow:hidden;">
A
B
C
D
float 요소내부의 float:left;
<DIV STYLE="float:left;">
A
B
C
D
CSS3 Inheritance & Cascading
상속(Inheritance) 상속되는 스타일

color
font
line-height
opacity
text-align
visibility
white-space
상속되지않는 스타일

background
border
box-sizing
display
float
margin
overflow
padding
text-decoration
top/right/bottom/left
vertical-align
width/height
z-index
캐스캐이딩(Cascading) 중요도
CSS가 어디에 선언 되었는지에 따라서 우선순위가 달라진다.
head 요소 내의 style 요소
head 요소 내의 style 요소 내의 @import 문
<link> 로 연결된 CSS 파일
<link> 로 연결된 CSS 파일 내의 @import 문
브라우저 디폴트 스타일시트
명시도
대상을 명확하게 특정할수록 명시도가 높아지고 우선순위가 높아진다.
!important > 인라인 스타일 > 아이디 선택자 > 클래스/어트리뷰트/가상 선택자 > 태그 선택자 > 전체 선택자 > 상위 요소에 의해 상속된 속성
선언순서
선언된 순서에 따라 우선 순위가 적용된다. 즉, 나중에 선언된 스타일이 우선 적용된다.
CSS3 Vendor Prefix CSS3 표준으로 확정되기 이전 또는 브라우저 개발사가 실험적으로 제공하는 기능을 사용하기 위해서는 벤더 프리픽스(Vendor Prefix)를 사용하여야 한다.
Can I use?에서 제공하는 브라우저별 CSS 지원 정보를 보면 텍스트와 요소의 선택을 방지하는 user-select 프로퍼티는 모든 브라우저에 벤더 프리픽스를 사용하여야 한다.
브라우저의 버전이 올라감에 따라 벤더 프리픽스를 사용하지 않아도 될 수 있다. 그러나 구형 브라우저를 지원하기 위하여 벤더 프리픽스를 사용하여야 할 필요가 있다.

많은 브라우저를 위한 벤더 프리픽스를 사용하는 것은 코드의 양을 늘게 하고 또한 브라우저는 거의 매달 업데이트가 이루어지고 있어 불필요한 벤더 프리픽스를 사용할 가능성이 크다.
사용하지 않아도 되는 벤더 프리픽스를 사용하는 것은 성능에도 영향을 주기 때문에 Prefix Free 라이브러리 를 사용하는 것은 매우 유용한 방법이다.
사용법은 매우 간단하다. Prefix Free 사이트에서 라이브러리를 다운로드하고 include 하기만 하면 이 후에는 벤더 프리픽스없이 모든 CSS를 사용할 수 있다.
http://leaverou.github.io/prefixfree/

<script src="prefixfree.min.js"></script>
IE or Edge : -ms-
Chrome : -webkit-
Firefox : -moz-
Safari : -webkit-
Opera : -o-
iOS Safari : -webkit-
Android Browser : -webkit-
Chrome for Android : -webkit-
* {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
user-select: none; /* Likely future */
}
CSS3 Shadow
TEXT-SHADOW 그림자를 텍스트의 오른쪽으로 지정값만큼 이동시킨다.
선택자 { text-shadow: Horizontal-offset Vertical-offset Blur-Radius Shadow-Color; }
Horizontal-offset 그림자를 텍스트의 오른쪽으로 지정값만큼 이동시킨다.(px) h1:nth-child(1) {text-shadow: 5px 5px;}
h1:nth-child(2) {text-shadow: 5px 5px red;}
h1:nth-child(3) {text-shadow: 5px 5px 3px red;}
h1:nth-child(4) {color: white;text-shadow: 5px 5px 3px black;}
h1:nth-child(5) {text-shadow: 0 0 3px red;}
/*Multiple Shadows*/
h1:nth-child(6) {text-shadow: 0 0 3px red, 0 0 10px blue;}
/*Multiple Shadows*/
h1:nth-child(7) {color: white;text-shadow: 1px 1px 2px black, 0 0 25px blue, 0 0 5px darkblue;}
Vertical-offset 그림자를 텍스트의 아래로 지정값만큼 이동시킨다.(px)
Blur-Radius 그림자의 흐림정도를 지정한다. 지정값만큼 그림자가 커지고 흐려진다.(px)
Shadow-Color 그림자의 색상을 지정한다.(color)
BOX-SHADOW 요소에 그림자 효과를 부여하는 프로퍼티이다.
선택자 { box-shadow: Inset Horizontal-offset Vertical-offset Blur-Radius Spread Shadow-Color; }
Inset inset 키워드를 지정하면 그림자가 요소 안쪽에 위치한다.(inset) /*box-shadow: Inset Horizontal-offset Vertical-offset Blur-Radius Spread Shadow-Color;*/
/* Horizontal-offset Vertical-offset */
div:nth-of-type(1) {box-shadow: 10px 10px;}
/* Horizontal-offset Vertical-offset Shadow-Color */
div:nth-of-type(2) {box-shadow: 10px 10px blue;}
/* Horizontal-offset Vertical-offset Blur-Radius Shadow-Color */
div:nth-of-type(3) {box-shadow: 10px 10px 5px blue;}
/* Horizontal-offset Vertical-offset Blur-Radius Spread Shadow-Color */
div:nth-of-type(4) {box-shadow: 10px 10px 5px 5px blue;}
/* Inset Horizontal-offset Vertical-offset Blur-Radius Spread Shadow-Color */
div:nth-of-type(5) {box-shadow: inset 10px 10px 5px 5px blue;}
/* Horizontal-offset Vertical-offset Blur-Radius Spread Shadow-Color */
div:nth-of-type(6) {background-color: white;box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);}
Horizontal-offset 그림자를 텍스트의 오른쪽으로 지정값만큼 이동시킨다.(px)
Vertical-offset 그림자를 텍스트의 아래로 지정값만큼 이동시킨다.(px)
Blur-Radius 그림자의 흐림정도를 지정한다. 지정값만큼 그림자가 커지고 흐려진다.(px)
Spread 그림자를 더 크게 확장시킨다.(px)
Shadow-Color 그림자의 색상을 지정한다.(color)
CSS3 Transition
div {width: 100px;height: 100px;background: red;}
div:hover {border-radius: 50%;background: blue;}
/* 트랜지션 효과: 모든 프로퍼티의 변화를 2초에 걸쳐 전환한다. */
div {width: 100px;height: 100px;background: red;transition: all 2s;}
div:hover {border-radius: 50%;background: blue;}
div {width: 100px;height: 100px;background: red;}
/* hover on에서만 발동한다. */
div:hover {border-radius: 50%;background: blue;transition: all 2s;}
div {width: 100px;height: 100px;background: red;transition: all 2s;}
.hover {border-radius: 50%;background: blue;}
<script>
const elem = document.querySelector('div');
elem.addEventListener('mouseover', function () {this.classList.add('hover');});
elem.addEventListener('mouseleave', function () {this.classList.remove('hover');});
</script>
TRANSITION transition-property 트랜지션의 대상이 되는 CSS 프로퍼티를 지정한다.
transition-duration 트랜지션이 일어나는 지속시간(duration)을 초 단위(s) 또는 밀리 초 단위(ms)로 지정한다.
transition-timing-function 트랜지션 효과를 위한 수치 함수를 지정한다.
transition-delay 프로퍼티가 변화한 시점과 트랜지션이 실제로 시작하는 사이에 대기하는 시간을 초 단위(s) 또는 밀리 초 단위(ms)로 지정한다.
transition 모든 트랜지션 프로퍼티를 한번에 지정한다. (shorthand syntax)
transition-property transition-property 프로퍼티는 트랜지션의 대상이 되는 CSS 프로퍼티명을 지정한다.
지정하지 않는 경우 모든 프로퍼티가 트랜지션의 대상이 된다. 복수의 프로퍼티를 지정하는 경우 쉼표(,)로 구분한다.
div {width: 100px;height: 50px;background-color: red;transition-property: width, background-color;transition-duration: 2s, 2s;}
div:hover {width: 300px;background-color: blue;}
transition-duration transition-duration 프로퍼티는 트랜지션에 일어나는 지속시간(duration)을 초 단위(s) 또는 밀리 초 단위(ms)로 지정한다. 프로퍼티값을 지정하지 않을 경우 기본값 0s이 적용되어 어떠한 트랜지션 효과도 볼 수 없다. div {width: 100px;height: 50px;color: white;background-color: red;margin-bottom: 10px;transition-property: width, opacity;}
div {transition-duration: 0.5s;}
0.5s
div {transition-duration: 2s, 1s;}
2s, 1s
div {transition-duration: 5s, 2.5s;}
5s, 2.5s
transition-timing-function
ease 기본값. 느리게 시작하여 점점 빨라졌다가 느리지면서 종료한다. div {transition-timing-function: ease;}
ease
linear 시작부터 종료까지 등속 운동을 한다. div {transition-timing-function: linear;}
linear
ease-in 느리게 시작한 후 일정한 속도에 다다르면 그 상태로 등속 운동한다. div {transition-timing-function: ease-in;}
ease-in
ease-out 일정한 속도의 등속으로 시작해서 점점 느려지면서 종료한다. div {transition-timing-function: ease-out;}
ease-out
ease-in-out ease와 비슷하게 느리게 시작하여 느리지면서 종료한다. div {transition-timing-function: ease-in-out;}
ease-in-out
transition-delay 프로퍼티가 변화한 시점과 트랜지션이 실제로 시작하는 사이에 대기하는 시간을 초 단위(s) 또는 밀리 초 단위(ms)로 지정한다.
즉, transition-delay로 대기 사간을 지정하여 프로퍼티의 값이 변화하여도 즉시 트랜지션이 실행되지 않고, 일정 시간 대기한 후 트랜지션이 실행되도록 한다.
transition transition: property duration function delay
all 0 ease 0
/* property duration function delay */
div:nth-of-type(1) {transition: width 1s ease-in 1s;}
/* duration */
div:nth-of-type(2) {transition: 1s}
/* property duration */
div:nth-of-type(3) {transition: width 1s}
/* duration function */
div:nth-of-type(4) {transition: 1s ease-in;}
/* duration delay*/
div:nth-of-type(5) {transition: 1s 1s;}
div {transition: width 1s ease-in 1s;}
width 1s ease-in 1s
div {transition: 1s;}
1s
div {transition: width 1s;}
width 1s
div {transition: 1s ease-in 1s;}
1s ease-in 1s
div {transition: 1s 1s;}
1s 1s
CSS3 Animation
animation-name @keyframes 애니메이션 이름을 지정한다.
animation-duration 한 싸이클의 애니메이션에 소요되는 시간을 초 단위(s) 또는 밀리 초 단위(ms)로 지정한다. 0s
animation-timing-function 애니메이션 효과를 위한 타이밍 함수를 지정한다. ease
animation-delay 요소가 로드된 시점과 애니메이션이 실제로 시작하는 사이에 대기하는 시간을 초 단위(s) 또는 밀리 초 단위(ms)로 지정한다. 0s
animation-iteration-count 애니메이션 재생 횟수를 지정한다. 1
animation-direction 애니메이션이 종료된 이후 반복될 때 진행하는 방향을 지정한다. normal
animation-fill-mode 애니메이션 미실행 시(종료 또는 대기) 요소의 스타일을 지정한다.
animation-play-state 애니메이션 재생 상태(재생 또는 중지)를 지정한다. running
animation 모든 애니메이션 프로퍼티를 한번에 지정한다. (shorthand syntax)

Loader 1

loader 10

@keyframes CSS 애니메이션과 트랜지션 방식의 주된 차이는 @keyframes rule에 있다. 이 rule을 사용하면 애니메이션의 흐름(sequence) 중의 여러 시점(breakpoint)에서 CSS 프로퍼티값을 지정할 수 있다.
animation-name @keyframes 뒤에 애니메이션을 대표하는 임의의 이름를 부여하였다.
animation-duration 한 싸이클의 애니메이션에 소요되는 시간을 초 단위(s) 또는 밀리 초 단위(ms)로 지정한다.
animation-duration은 반드시 지정해야 한다. 지정하지 않는 경우 기본값 0s가 셋팅되어 어떠한 애니메이션도 실행되지 않는다.
animation-duration: .5s;
animation-duration: 500ms;
animation-timing-function 애니메이션 효과를 위한 수치 함수를 지정한다.
수치 함수에 대한 설명은 트랜지션 transition-timing-function 프로퍼티를 참조하기 바란다.
animation-delay 요소가 로드된 시점과 애니메이션이 실제로 시작하는 사이에 대기하는 시간을 초 단위(s) 또는 밀리 초 단위(ms)로 지정한다.
animation-delay: 2s;
animation-iteration-count 애니메이션 주기의 재생 횟수를 지정한다. 기본값은 1이며 infinite로 무한반복 할 수 있다.
animation-iteration-count: 3;
animation-direction 애니메이션이 종료된 이후 반복될 때 진행하는 방향을 지정한다.
normal 기본값으로 from(0%)에서 to(100%) 방향으로 진행한다.
reverse to에서 from 방향으로 진행한다.
alternate 홀수번째는 normal로, 짝수번째는 reverse로 진행한다.
alternate-reverse 홀수번째는 reverse로, 짝수번째는 normal로 진행한다.
animation-fill-mode 애니메이션 미실행 시(대기 또는 종료) 요소의 스타일을 지정한다.
none 대기 시작 프레임(from)에 설정한 스타일을 적용하지 않고 대기한다.
종료 애니메이션 실행 전 상태로 애니메이션 요소의 프로퍼티값을 되돌리고 종료한다.
forwards 대기 시작 프레임(from)에 설정한 스타일을 적용하지 않고 대기한다.
종료 종료 프레임(to)에 설정한 스타일을 적용하고 종료한다.
backwards 대기 시작 프레임(from)에 설정한 스타일을 적용하고 대기한다.
종료 애니메이션 실행 전 상태로 애니메이션 요소의 프로퍼티값을 되돌리고 종료한다.
both 대기 시작 프레임(from)에 설정한 스타일을 적용하고 대기한다.
종료 종료 프레임(to)에 설정한 스타일을 적용하고 종료한다.
animation-play-state 애니메이션 재생 상태(재생 또는 중지)를 지정한다. 기본값은 running이다.
animation 모든 애니메이션 프로퍼티를 한번에 지정한다. 값을 지정하지 않은 프로퍼티에는 기본값이 지정된다. 지정 방법은 다음과 같다.
animation: name duration timing-function delay iteration-count direction fill-mode play-state
animation-duration은 반드시 지정해야 한다. 지정하지 않는 경우 기본값 0s가 셋팅되어 어떠한 애니메이션도 실행되지 않는다. 기본값은 아래와 같다.
none 0 ease 0 1 normal none running
CSS3 Transform
2D 트랜스폼 (2D Transform) 2D 트랜스폼은 프로퍼티값으로 변환함수(transform function)를 사용한다. 변환함수는 다음과 같다.
translate(x,y) 요소의 위치를 X축으로 x만큼, Y축으로 y만큼 이동시킨다. px, %, em 등
translateX(n) 요소의 위치를 X축으로 x만큼 이동시킨다. px, %, em 등
translateY(n) 요소의 위치를 Y축으로 y만큼 이동시킨다. px, %, em 등
scale(x,y) 요소의 크기를 X축으로 x배, Y축으로 y배 확대 또는 축소 시킨다. 0과 양수
scaleX(n) 요소의 크기를 X축으로 x배 확대 또는 축소 시킨다. 0과 양수
scaleY(n) 요소의 크기를 Y축으로 y배 확대 또는 축소 시킨다. 0과 양수
skew(x-angle,y-angle) 요소를 X축으로 x 각도만큼, Y축으로 y 각도만큼 기울인다. +/- 각도(deg)
skewX(x-angle) 요소를 X축으로 x 각도만큼 기울인다. +/- 각도(deg)
skewY(y-angle) 요소를 Y축으로 y 각도만큼 기울인다. +/- 각도(deg)
rotate(angle) 요소를 angle만큼 회전시킨다. +/- 각도(deg)
transform 변환함수를 프로퍼티값으로 쉼표없이 나열한다. 나열순서에 따라 차례대로 효과가 적용된다.
translate
scale
skew
rotate
complex
transform-origin 요소의 기본기준점을 설정할 때 사용된다. 기본기준점은 요소의 정중앙이다(50%,50%). 이동은 기준점을 변경하여도 일정 거리만큼 이동하므로 의미가 없다.
설정값으로 %, px, top left, bottom right을 사용할 수 있다. 0, 0은 top left, 100% 100%는 bottom right과 같은 값이다.
scale1
scale2
scale3
translate
3D 트랜스폼 (3D Transform) 3D 트랜스폼은 프로퍼티값으로 변환함수(transform function)를 사용한다. 사용할 수 있는 변환함수는 다음과 같다.
translate3d(x,y,z) 요소의 위치를 X축으로 x만큼, Y축으로 y만큼 Z축으로 z만큼 이동시킨다. px, %, em 등
translateX(n) 요소의 위치를 X축으로 x만큼 이동시킨다. px, %, em 등
translateY(n) 요소의 위치를 Y축으로 y만큼 이동시킨다. px, %, em 등
translateZ(n) 요소의 위치를 Z축으로 z만큼 이동시킨다. px, %, em 등
scale3d(x,y) 요소의 크기를 X축으로 x배, Y축으로 y배, Z축으로 z배 확대 또는 축소 시킨다. 0과 양수
scaleX(n) 요소의 크기를 X축으로 x배 확대 또는 축소 시킨다. 0과 양수
scaleY(n) 요소의 크기를 Y축으로 y배 확대 또는 축소 시킨다. 0과 양수
scaleZ(n) 요소의 크기를 Z축으로 z배 확대 또는 축소 시킨다. 0과 양수
rotate3d(x,y,z) 요소를 X축으로 x각도, Y축으로 y각도, Z축으로 z각도 회전시킨다. +/- 각도(deg)
rotateX(x) 요소를 X축으로 x각도 회전시킨다. +/- 각도(deg)
rotateY(y) 요소를 Y축으로 y각도 회전시킨다. +/- 각도(deg)
rotateZ(z) 요소를 Z축으로 z각도 회전시킨다. +/- 각도(deg)
CSS3 Web Font
CDN(Content Delivery Network) 링크 방식 웹폰트를 사용하는 방법 중 가장 간단한 방법은 CDN 링크를 사용하는 것이다. 다음은 구글에서 제공하는 웹폰트를 사용하는 방법이다. Google Font 에서 사용하고자 하는 웹폰트를 선택한다. 한글 웹페이지에 자주 사용되는 나눔고딕은 Google Font Early Access에서 찾을 수 있다.

@import url(http://fonts.googleapis.com/earlyaccess/nanumgothic.css);
* { font-family: 'Nanum Gothic', sans-serif; }

구글이 제공하는 나눔 고딕, 나눔 명조, 나눔 붓, 나눔 펜 웹폰트 다운로드 하는 방법
https://www.cmsfactory.net/node/40025
https://github.com/typekit/webfontloader
https://hackya.com/kr/올바르게-웹폰트-로딩하기/
서버 폰트 로딩 방식 Google Font를 사용하기 위해 CDN 링크를 사용하는 방법은 간편한 방법이지만 로딩 속도가 느린 단점이 있다.
(로컬 폰트를 사용하는 것에 비해 느리다는 의미이다. 서버 폰트 로딩 방식보다는 빠를수 있다.)
여러 개의 폰트를 사용한다면 로딩에 더욱 시간이 걸릴 것이다. 또한 CDN 링크를 제공하지 않는 폰트는 사용할 방법이 없다.
이러한 단점을 보완한 방법이 서버 폰트 로딩 방식이다.

@font-face 규칙으로 폰트를 등록하고 font-family 프로퍼티로 폰트를 선택하여 사용할 수 있다.
/* IE 9~ & all browsers */
@font-face {font-family: myFontName;src: url("myFont.woff");}
* { font-family: myFontName, sans-serif; }

@font-face {
font-family:"Nanum Gothic";
src:url("NanumGothic.eot"); /* IE 9 호환성 보기 모드 대응 */
src:local("☺"), /* local font 사용 방지. 생략 가능 */
url("NanumGothic.eot?#iefix") format('embedded-opentype'), /* IE 6~8 */
url("NanumGothic.woff") format('woff'); /* 표준 브라우저 */
}

* { font-family: "Nanum Gothic", sans-serif; }
영문과 한글을 혼용하는 경우 먼저 영문 폰트, 그 다음 한글 폰트를 지정하여야 한다.
한글 폰트부터 지정하면 영문에도 한글 폰트가 지정된다.
font-family: 'Lora', 'KoPub Batang', 'Times New Roman', serif;
CSS3 Layout
Header & Navigation Bar Navigation Bar는 기본적으로 링크들의 리스트이다. 따라서 ul, li tag를 이용하여 작성하는 것이 일반적이다.
다음은 최소한의 Reset CSS를 추가한 링크들의 리스트이다.
주의할 점은 직관적인 box model을 위해 box-sizing: border-box;을 사용했다는 것이다.
실제 웹사이트를 구축할 시에는 Reset CSS를 좀 더 정교하게 초기화할 필요가 있다.
Section & Aside 콘텐츠의 영역을 Section, 콘텐츠에 대한 Navigation item이나 부가 정보 영역을 Aside라 한다.
Section 영역은 다시 article 영역으로 구분할 수 있다.
이 두개의 영역은 float 프로퍼티를 사용하여 수평 정렬하는 것이 일반적이다.
header 요소 뒤에 aside, section, article을 포함하는 content-wrap 요소를 정의한다.
Footer footer도 고정되어 있을 필요가 있지만 본문을 가리는 것은 곤란하다. 따라서 fixed 프로퍼티를 설정해서는 않된다.
fixed 프로퍼티는 스크롤이 되어도 언제나 그자리를 고수하기 때문이다.footer는 absolute 프로퍼티를 설정한다.
absolute를 사용하면 다른 요소가 먼저 위치를 점유하고 있어도 뒤로 밀리지 않고 덮어쓰게 된다. (이런 특성을 부유 또는 부유 객체라 한다)
CSS3 Responsive Web Design
Responsive Web Design 개요 사용자가 어떤 디바이스로 웹사이트를 방문할 지 알 수 없다. 데스크탑용, 테블릿용, 모바일용 웹사이트를 별도 구축할 수도 있지만 One Source Multi Use의 관점에서 올바른 해결책은 아니다.
반응형 웹디자인(Responsive Web Design)이다. 화면 해상도에 따라 가로폭이나 배치를 변경하여 가독성을 높이는 것이다.
즉, 하나의 웹사이트를 구축하여 다양한 디바이스의 화면 해상도에 최적화된 웹사이트를 제공하는 것이다.
Viewport Meta Tag viewport란 웹페이지의 가시영역을 의미한다. viewport는 디바이스에 따라 차이가 있다.
viewport를 이용하여 디바이스의 특성과 디바이스의 화면 크기 등을 고려하여 각종 디바이스 사용자에게 최적화된 웹페이지를 제공할 수 있다. meta tag는 브라우저 혹은 검색엔진최적화(SEO)를 위해 검색엔진에게 메타데이터를 전달하기 위해 사용된다.
viewport meta tag는 브라우저의 화면 설정과 관련된 정보를 제공한다.

meta tag에서는 px단위를 사용하며 단위 표현은 생략한다. 복수개의 프로퍼티를 사용할 때는 쉼표(,)로 구분한다.
일반적으로 viewport meta tag는 모바일 디바이스에서만 적용된다.
<meta name="viewport" content="width=device-width, initial-scale=1.0">

width viewport 너비(px). 기본값: 980px width=240
width=device-width
height viewport 높이(px) height=800
width=device-height
initial-scale viewport초기 배율 initial-scale=1.0
user-scale 확대 축소 가능 여부 user-scale=no
maximum-scale viewport 최대 배율 maximum-scale=2.0
minimum-scale viewport 최소 배율 minimum-scale=1.0
@media 반응형 웹디자인에 사용되는 핵심 기술은 @media이다.
@media을 사용하여 미디어 별로 style을 지정하는 것을 Media Query라 한다. 디바이스를 지정하는 것뿐만 아니라 디바이스의 크기나 비율까지 구분할 수 있다.

@media screen {* { color: red; }}
@media print {* { color: blue; }}
@media screen and (min-width: 480px) {body {background-color: lightgreen;}}

width viewport 너비(px)
height viewport 높이(px)
device-width 디바이스의 물리적 너비(px)
device-height 디바이스의 물리적 높이(px)
orientation 디바이스 방향 (가로 방향: landscape, 세로방향: portrait)
device-aspect-ratio 디바이스의 물리적 width/height 비율
color 디바이스에서 표현 가능한 최대 색상 비트수
monochrome 흑백 디바이스의 픽셀 당 비트수
resolution 디바이스 해상도
일반적으로 반응형 웹 디자인은 viewport 너비(width 프로퍼티)를 기준으로 한다.
viewport의 width 프로퍼티를 이용하여 viewport 너비에 따라 반응하는 범위(breakpoint)를 지정할 수 있다.

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
@media only screen and (min-width : 320px) {} /* Custom, iPhone Retina : 320px ~ */
@media only screen and (min-width : 480px) {} /* Extra Small Devices, Phones : 480px ~ */
@media only screen and (min-width : 768px) {} /* Small Devices, Tablets : 768px ~ */
@media only screen and (min-width : 992px) {} /* Medium Devices, Desktops : 992px ~ */
@media only screen and (min-width : 1200px) {} /* Large Devices, Wide Screens : 1200px ~ */
/*========== Non-Mobile First Method ==========*/
/* All Device */
@media only screen and (max-width : 1200px) {} /* Large Devices, Wide Screens : ~ 1200px */
@media only screen and (max-width : 992px) {} /* Medium Devices, Desktops : ~ 992px */
@media only screen and (max-width : 768px) {} /* Small Devices, Tablets : ~ 768px */
@media only screen and (max-width : 480px) {} /* Extra Small Devices, Phones : ~ 480px */
@media only screen and (max-width : 320px) {} /* Custom, iPhone Retina : ~ 320px */
</style>

해상도를 3단계로 구분하여 breakpoint를 정의한 예제이다.
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
* { color: black; } /* 801px ~ */
@media screen and (max-width: 800px) {* { color: blue; }} /* ~ 800px */
@media screen and (max-width: 480px) {* { color: red; }} /* ~ 480px */
</style>

데스크탑은 언제나 가로 화면이기 때문에 device-width로 스마트폰의 해상도를 지정하지 않으면 데스크탑에서도 가로화면 시 style이 적용되는 문제가 발생한다.
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
/* 세로 */
* { color: black; }
/* 가로 */
@media screen and (orientation: landscape) {{ color: blue; }}
/* Desktop의 화면은 가로화면(landscape)이므로 아래 rule이 적용된다. */

/* Landscape */
@media screen and (max-device-width: 760px) /* 디바이스가 모바일일때(device-width 0 ~ 768px) */
/* 가로 */
and (orientation: landscape) {* { color: blue; }}
</style>
Section & Aside & Footer article을 2열로 배치하기 위해서 width 값을 지정하여야 한다. %로 width 값을 지정하여 viewport에 상대적인 너비를 갖도록 한다. 이때 margin도 %로 지정한다. 그리고 float: left;를 지정하여 2열로 정렬되도록 한다.
Responsive Navigation Bar <meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
/* Media Query */
/* for Desktop: 801px ~ */
@media screen and (max-width: 800px) {} /* for tablet: ~ 800px */
@media screen and (max-width: 480px) {} /* for smartphone: ~ 480px */
</style>
Responsive Navigation Bar - Tablet 데스크탑 layout에서 화면이 작아질 때 header navigation bar가 header 영역 아래로 내려오는 현상이 발생하였다. 이를 보완하기 위해 다음과 같이 태블릿에서의 layout을 정의한다.
viewport width가 800px 이하가 되면 header 영역을 2단(logo영역과 navigation bar영역)으로 구분하기 위하여 header 영역의 높이를 현재(60px)의 2배로 넓힌다. 그리고 logo image과 navigation bar를 centering한다.

@media screen and (max-width: 800px) {
header {height: 120px;text-align: center;}
nav {float: none;} /*margin-right: 0;*/
#wrap {margin-top: 120px;} /* margin-top = header height */
aside {top: 120px;}
}
Responsive Navigation Bar - Smartphone
.navicon1 {float:left;cursor: pointer;padding: 25px 15px;top: 0;border:1px solid gray;margin-right:20px;}
.navicon1-bar {display: block;width: 20px;height: 3px;background-color: #000;}
.navicon2-bar::before,.navicon2-bar::after {background-color: #000;content: '';display: block;width: 20px;height: 3px;position: absolute;}
.navicon2-bar::before {top: -7px;}
.navicon2-bar::after {top: 7px;}
.navicon2-bar {background-color: #000;display: block;position: relative;width: 20px;height: 3px;}
.navicon3-bar {display: block;width: 20px;height: 3px;background-color: #000;}
.navicon3-bar {background: transparent;}
.navicon3-bar::before,.navicon3-bar::after {background-color: #000;content: '';display: block;width: 30px;height: 3px;position: absolute;margin-left:10px;}
.navicon3-bar::before {transform:translate(-50%,-50%) rotate(-45deg)}
.navicon3-bar::after {transform:translate(-50%,-50%) rotate(45deg)}
.navicon-box{float:left;border:1px solid silver;margin-right:20px;}

.up_arrow{position:relative;width:50px;height:50px;}
.up_arrow:before{content:'';position:absolute;left:50%;top:40%;width:32%; height:32%;transform:translateX(-50%) rotate(45deg);}
.up_arrow1:before{border-left:3px solid #fff;border-top:3px solid #fff;}
.up_arrow2:before{border-left:2px solid #000;border-top:2px solid #000;}
.up_round{position:relative;width:50px;height:50px;border-radius:50%;}
.up_round:before,.up_round:after{content:'';width:32%;position:absolute;top:48%;border-radius:5px;}
.up_round:before{left:44%;transform:translateY(-50%) rotate(45deg)}
.up_round:after{right:44%;transform:translateY(-50%) rotate(-45deg)}
.up_round1:before,.up_round1:after{height:3px;background:#fff;}
.up_round2:before,.up_round2:after{height:2px;background:#000;}
.right_arrow{position:relative;width:50px;height:50px;}
.right_arrow:before{content:'';position:absolute;left:50%;top:50%;width:40%; height:40%;transform:translate(-50%,-50%) rotate(135deg);}
.right_arrow:after{content:'';position:absolute;right:20%;top:50%;width:60%; height:2px;transform:translateY(-50%);}
.right_arrow1:before{border-left:2px solid #fff;border-top:2px solid #fff;}
.right_arrow1:after{background:#fff;}
.right_arrow2:before{border-left:2px solid #000;border-top:2px solid #000;}
.right_arrow2:after{background:#000;}
.form-close{position:relative;width:50px;height:50px;}
.form-close:before,.form-close:after{content:'';position:absolute;left:50%;top:50%;width:72%; height:2px;}
.form-close:before{transform:translate(-50%,-50%) rotate(-45deg)}
.form-close:after{transform:translate(-50%,-50%) rotate(45deg)}
.form-close1:before,.btn_close1:after{background:#fff;}
.form-close2:before,.btn_close2:after{background:#000;}
.check-mark{width:50px;height:50px;}
.check-mark:hover{border:1px solid gray;}
.check-mark:before{content:'';position:relative;left:35%;top:-15%;display:block;width:40%; height:80%;border:solid gray;border-width:0 2px 2px 0;transform:rotate(45deg);}
.check-mark1:before{border-color:#fff;}
.check-mark2:before{border-color:tomato;box-shadow:5px 1px 0px 0px #fff;}
.menu-mark{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);}
.menu-mark,.menu-mark:before,.menu-mark:after{content:'';position:absolute;display:block;width:30px;height:3px;}
.menu-mark:before{top:-10px;}
.menu-mark:after{top:10px;}
.menu-mark1,.menu-mark2{position:relative;width:50px;height:50px;}
.menu-mark1 > .menu-mark,.menu-mark1 > .menu-mark:before,.menu-mark1 > .menu-mark:after{background:#fff;}
.menu-mark2 > .menu-mark,.menu-mark2 > .menu-mark:before,.menu-mark2 > .menu-mark:after{background:#000;}
.search{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);margin:-2px 0 0 -2px;width:20px;height:20px;border:2px solid;border-radius:50%;} .search:after{content:'';position:absolute;margin:20px 0 0 15px;width:12px;border-top:2px solid;transform:rotate(45deg);} .search1,.search2{position:relative;width:50px;height:50px;} .search1 > .search,.search1 > .search:after{border-color:#fff;} .search2 > .search,.search2 > .search:after{border-color:#000;}

https://poiemaweb.com/css3-responsive-web-design <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <style> /* Simple Reset CSS */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; color: #58666e; background-color: #f0f3f4; -webkit-font-smoothing: antialiased; -webkit-text-size-adjus: 100%; /* iphone font size 변경 방지 */ } li { list-style: none; } a { text-decoration: none; } h1, h2, h3, h4, h5, h6, p { margin: 10px 5px; } h1 { font-size: 1.8em; } #wrap { width: 100%; /* margin-top = header height */ margin-top: 60px; } /* Navigation bar */ header { /* for sticky header */ position: fixed; top: 0; width: 100%; height: 60px; z-index: 2000; background-color: #fff; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05); } .logo { display: inline-block; height: 36px; margin: 12px 0 12px 25px; } .logo>img { height: 36px; } nav { float: right; } .nav-items { margin-right: 20px; } .nav-items>li { display: inline-block; /* 가로정렬 */ } .nav-items>li>a { line-height: 60px; /* for Vertical Centering */ padding: 0 30px; /* nav item간 간격 */ color: rgba(0, 0, 0, 0.4); } .nav-items>li>a:hover { color: rgba(0, 0, 0, 0.8); } /* navigation icon for Mobile Layout */ .navicon { cursor: pointer; height: 60px; padding: 28px 15px; position: absolute; top: 0; right: 0; -webkit-user-select: none; /* Chrome all / Safari all */ -moz-user-select: none; /* Firefox all */ -ms-user-select: none; /* IE 10+ */ user-select: none; /* Likely future */ } /* nav icon의 내부 막대 */ .navicon-bar { background-color: #333; display: block; position: relative; /* navigation icon animation */ transition: background-color .2s ease-out; width: 20px; height: 3px; } .navicon-bar::before, .navicon-bar::after { background-color: #333; content: ""; display: block; height: 100%; position: absolute; /* navigation icon animation */ transition: all .2s ease-out; width: 100%; } .navicon-bar::before { top: -7px; } .navicon-bar::after { top: 7px; } /* toggle navigation icon */ .nav-toggle:checked~.navicon>.navicon-bar { background: transparent; } .nav-toggle:checked~.navicon>.navicon-bar::before { transform: rotate(45deg); top: 0; } .nav-toggle:checked~.navicon>.navicon-bar::after { transform: rotate(-45deg); top: 0; } /* contents */ /* clearfix */ #content-wrap:after { content: ""; display: block; clear: both; } aside { /* for fixed side bar */ position: fixed; top: 60px; bottom: 0; width: 200px; /* 너비 고정 */ padding-top: 25px; background-color: #333; } /* aside navigation */ aside>ul { width: 200px; } aside>ul>li>a { display: block; color: #fff; padding: 10px 0 10px 20px; } aside>ul>li>a.active { background-color: #4CAF50; } aside>ul>li>a:hover:not(.active) { background-color: #555; } aside>h1 { padding: 20px 0 20px 20px; color: #fff; } /* Section */ section { float: right; margin-left: 200px; /*aside width*/ } article { width: 48.5%; margin: 1%; padding: 25px; background-color: white; float: left; } article:nth-of-type(2n) { margin-left: 0; } article:nth-of-type(n+3) { margin-top: 0; } /* footer */ footer { /* footer를 aside위에 올리기 위해 사용(부유객체) */ position: absolute; height: 60px; width: 100%; padding: 0 25px; line-height: 60px; color: #8a8c8f; border-top: 1px solid #dee5e7; background-color: #f2f2f2; } .nav-toggle { display: none; } .navicon { display: none; } /* Media Query */ /* for tablet: ~ 800px */ @media screen and (max-width: 800px) { header { height: 120px; text-align: center; } nav { float: none; margin-right: 0; } #wrap { /* margin-top = header height */ margin-top: 120px; } aside { top: 120px; } article { width: inherit; display: block; margin: 10px; float: none; } article:nth-of-type(2n) { margin: 10px; } article:nth-of-type(n+2) { margin-top: 0; } } /* for smartphone: ~ 480px */ @media screen and (max-width: 480px) { header { height: 60px; } .nav-items { display: none; } .navicon { display: block; } #wrap { /* margin-top = header height */ margin-top: 60px; } aside { top: 60px; position: static; width: 100%; padding: 5px 0; } /* aside navigation */ aside>ul { width: 100%; } aside>h1 { padding: 5px 0 10px 20px; color: #fff; } section { float: none; margin-left: 0; } /* View navigation item */ .nav-toggle:checked~.nav-items { display: block; width: 100%; background-color: #fff; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05); } .nav-items>li { display: block; } .nav-items>li>a { line-height: 50px; } } </style> </head> <body> <div id="wrap"> <header> <a class="logo" href="#home"><img src="https://poiemaweb.com/img/logo.png"></a> <nav> <input class="nav-toggle" id="nav-toggle" type="checkbox"> <label class="navicon" for="nav-toggle"><span class="navicon-bar"></span></label> <ul class="nav-items"> <li><a href="#home">Home</a></li> <li><a href="#news">News</a></li> <li><a href="#contact">Contact</a></li> <li><a href="#about">About</a></li> </ul> </nav> </header> <div id="content-wrap"> <aside> <h1>Aside</h1> <ul> <li><a href="#" class="active">London</a></li> <li><a href="#">Paris</a></li> <li><a href="#">Tokyo</a></li> <li><a href="#">Newyork</a></li> </ul> </aside> <section> <article id="london"> <h1>London</h1> <p>London is the capital city of England. It is the most populous city in the United Kingdom, with a metropolitan area of over 13 million inhabitants.</p> <p>Standing on the River Thames, London has been a major settlement for two millennia,its history going back to its founding by the Romans, who named it Londinium.</p> <p>London, also referred to as Greater London, is one of 9 regions of England and the top-level subdivision covering most of the city's metropolis. The small ancient City of London at its core once comprised the whole settlement, but as its urban area grew, the Corporation of London resisted attempts to amalgamate the city with its suburbs, causing "London" to be defined in a number ways for different purposes.</p> </article> <article id="paris"> <h1>Paris</h1> <p>London is the capital city of England. It is the most populous city in the United Kingdom, with a metropolitan area of over 13 million inhabitants.</p> <p>Standing on the River Thames, London has been a major settlement for two millennia,its history going back to its founding by the Romans, who named it Londinium.</p> <p>London, also referred to as Greater London, is one of 9 regions of England and the top-level subdivision covering most of the city's metropolis. The small ancient City of London at its core once comprised the whole settlement, but as its urban area grew, the Corporation of London resisted attempts to amalgamate the city with its suburbs, causing "London" to be defined in a number ways for different purposes.</p> </article> <article id="tokyo"> <h1>Tokyo</h1> <p>London is the capital city of England. It is the most populous city in the United Kingdom, with a metropolitan area of over 13 million inhabitants.</p> <p>Standing on the River Thames, London has been a major settlement for two millennia,its history going back to its founding by the Romans, who named it Londinium.</p> <p>London, also referred to as Greater London, is one of 9 regions of England and the top-level subdivision covering most of the city's metropolis. The small ancient City of London at its core once comprised the whole settlement, but as its urban area grew, the Corporation of London resisted attempts to amalgamate the city with its suburbs, causing "London" to be defined in a number ways for different purposes.</p> </article> <article id="newyork"> <h1>Newyork</h1> <p>London is the capital city of England. It is the most populous city in the United Kingdom, with a metropolitan area of over 13 million inhabitants.</p> <p>Standing on the River Thames, London has been a major settlement for two millennia,its history going back to its founding by the Romans, who named it Londinium.</p> <p>London, also referred to as Greater London, is one of 9 regions of England and the top-level subdivision covering most of the city's metropolis. The small ancient City of London at its core once comprised the whole settlement, but as its urban area grew, the Corporation of London resisted attempts to amalgamate the city with its suburbs, causing "London" to be defined in a number ways for different purposes.</p> </article> </section> <!-- end of content-wrap --> </div> <footer>© Copyright 2016 ungmo2</footer> <!-- end of wrap --> </div> </body> </html>
CSS3 Flexbox Layout
https://heropy.blog/2018/11/24/css-flexible-box/
https://studiomeal.com/archives/197
flex 모던 웹을 위하여 제안된 기존 layout보다 더 세련된 방식의 니즈에 부합하기 위한 CSS3의 새로운 layout 방식이다.
요소의 사이즈가 불명확하거나 동적으로 변화할 때에도 유연한 레이아웃을 실현할 수 있다.
복잡한 레이아웃이라도 적은 코드로 보다 간단하게 표현할 수 있다.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Flexbox Layout Example</title> <style> .flex-container { margin: 10px; padding: 15px; border-radius: 5px; background: #60B99A; } .flex-item { margin: 10px; padding: 20px; color: #fff; text-align: center; border-radius: 5px; background: #4584b1; } </style> </head> <body> <div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2</div> <div class="flex-item">3</div> <div class="flex-item">4</div> <div class="flex-item">5</div> </div> </body> </html>
1
2
3
4
5
.flex-item {display: inline-block;} .flex-item {float: left;}
.flex-container {display: flex;justify-content: space-around;}
부모 요소가 inline 요소인 경우 inline-flex을 지정한다.
.flex-container {display: inline-flex;}
flexbox를 사용하기 위해서 HTML 부모 요소의 display 속성에 flex를 지정한다.
.flex-container {display: flex;}
1
2
3
4
5
flex-direction flex-direction 속성은 flex 컨테이너의 주축(main axis) 방향을 설정한다.
row 좌에서 우로(ltr) 수평 배치된다. flex-direction 속성의 기본값이다. .flex-container {flex-direction: row;}
row-reverse 우에서 좌로(rtl) 수평 배치된다. .flex-container {flex-direction: row-reverse;}
column 위에서 아래로 수직 배치된다. .flex-container {flex-direction: column;}
column-reverse 아래에서 위로 수직 배치된다. .flex-container {flex-direction: column-reverse;}
.flex-container {flex-direction: row;}
1
2
3
4
5
.flex-container {flex-direction: column;}
1
2
3
4
5
flex-wrap flex-wrap 속성은 flex 컨테이너의 복수 flex item을 1행으로 또는 복수행으로 배치한다. flex-wrap 속성은 flex 컨테이너의 width보다 flex item들의 width의 합계가 더 큰 경우, 한줄로 표현할 것인지, 여러줄로 표현할 것인지를 지정한다.
flex-wrap: nowrap; flex item을 개행하지 않고 1행에 배치한다.
flex-wrap 속성의 기본값이다.
각 flex item의 폭은 flex container에 들어갈 수 있는 크기로 축소된다.
.flex-container {flex-wrap: nowrap;}
.flex-container {display: flex;flex-wrap: nowrap;}
1
2
3
4
5
flex-flow flex-flow 속성은 flex-direction 속성과 flex-wrap 속성을 설정하기 위한 shorthand이다. 기본값은 row nowrap이다.
.flex-container {flex-flow: <flex-direction> || <flex-wrap>;}
justify-content flex container의 main axis를 기준으로 flex item을 수평 정렬한다.
flex-start main start(좌측)를 기준으로 정렬한다.
justify-content 속성의 기본값이다.
.flex-container {justify-content: flex-start;}
flex-end main end(우측)를 기준으로 정렬한다. .flex-container {justify-content: flex-end;}
center flex container의 중앙에 정렬한다. .flex-container {justify-content: center;}
space-between 첫번째와 마지막 flex item은 좌우 측면에 정렬되고 나머지와 균등한 간격으로 정렬된다. .flex-container {justify-content: space-between;}
space-around 모든 flex item은 균등한 간격으로 정렬된다. .flex-container {justify-content: space-around;}
.flex-container {display: flex;justify-content: flex-start;}
1
2
3
4
5
.flex-container {display: flex;justify-content: flex-end;}
1
2
3
4
5
.flex-container {display: flex;justify-content: center;}
1
2
3
4
5
.flex-container {display: flex;justify-content: space-between;}
1
2
3
4
5
.flex-container {display: flex;justify-content: space-around;}
1
2
3
4
5
align-items flex item을 flex container의 수직 방향(cross axis)으로 정렬한다.
align-items 속성은 모든 flex item에 적용된다.
stretch 모든 flex item은 flex container의 높이(cross start에서 cross end까지의 높이)에 꽉찬 높이를 갖는다. align-items 속성의 기본값이다. .flex-container {align-items: stretch;}
flex-start 모든 flex item은 flex container의 cross start 기준으로 정렬된다. .flex-container {align-items: flex-start;}
flex-end 모든 flex item은 flex container의 cross end 기준으로 정렬된다. .flex-container {align-items: flex-end;}
center 모든 flex item은 flex container의 cross axis의 중앙에 정렬된다. .flex-container {align-items: center;}
baseline 모든 flex item은 flex container의 baseline을 기준으로 정렬된다. .flex-container {align-items: baseline;}
.flex-container {display: flex;align-items: stretch;}
1
2
3
4
5
.flex-container {display: flex;align-items: flex-start;}
1
2
3
4
5
.flex-container {display: flex;align-items: flex-end;}
1
2
3
4
5
.flex-container {display: flex;align-items: center;}
1
2
3
4
5
.flex-container {display: flex;align-items: baseline;}
1
2
3
4
5
align-content flex container의 cross axis를 기준으로 flex item을 수직 정렬한다.
참고로 justify-content 속성은 flex container의 main axis를 기준으로 flex item을 수평 정렬한다.
stretch 모든 flex item은 flex item의 행 이후에 균등하게 분배된 공간에 정렬되어 배치된다. align-content 속성의 기본값이다. .flex-container {align-content: stretch;}
flex-start 모든 flex item은 flex container의 cross start 기준으로 stack 정렬된다. .flex-container {align-content: flex-start;}
flex-end 모든 flex item은 flex container의 cross end 기준으로 stack 정렬된다. .flex-container {align-content: flex-end;}
center 모든 flex item은 flex container의 cross axis의 중앙에 stack 정렬된다. .flex-container {align-content: center;}
space-between 첫번째 flex item의 행은 flex container의 상단에 마지막 flex item의 행은 flex container의 하단에 배치되며 나머지 행은 균등 분할된 공간에 배치 정렬된다. .flex-container {align-content: space-between;}
space-around 모든 flex item은 균등 분할된 공간 내에 배치 정렬된다. .flex-container {align-content: space-around;}
.flex-container {display: flex;align-content: stretch;}
1
2
3
4
5
6
7
8
9
10
.flex-container {display: flex;align-content: flex-start;}
1
2
3
4
5
6
7
8
9
10
.flex-container {display: flex;align-content: flex-end;}
1
2
3
4
5
6
7
8
9
10
.flex-container {display: flex;align-content: center;}
1
2
3
4
5
6
7
8
9
10
.flex-container {display: flex;align-content: space-between;}
1
2
3
4
5
6
7
8
9
10
.flex-container {display: flex;align-content: space-around;}
1
2
3
4
5
6
7
8
9
10
Flexbox item 속성 float, clear, vertical-align 속성은 flex item에 영향을 주지 않는다.
order flex item의 배치 순서를 지정한다. HTML 코드를 변경하지 않고 order 속성값을 지정하는 것으로 간단히 재배치할 수 있다.
기본 배치 순서는 flex container에 추가된 순서이다. 기본값은 0이다.
.flex-item {order: 정수값;}
flex-grow flex item의 너비에 대한 확대 인자(flex grow factor)를 지정한다. 기본값은 0이고 음수값은 무효하다. .flex-item {flex-grow: 양의 정수값;}
flex-shrink flex item의 너비에 대한 축소 인자(flex shrink factor)를 지정한다. 기본값은 1이고 음수값은 무효하다. 0을 지정하면 축소가 해제되어 원래의 너비를 유지한다. .flex-item {flex-shrink: 양의 정수값;}
flex-basis flex item의 너비 기본값을 px, % 등의 단위로 지정한다. 기본값은 auto이다. .flex-item {flex-basis: auto | <width>;}
flex flex-grow, flex-shrink, flex-basis 속성의 shorthand이다. 기본값은 0 1 auto이다. .flex-item {flex: none | auto | [ <flex-grow> <flex-shrink>? || <flex-basis> ];}
align-self align-items 속성(flex container속성으로 flex item을 flex container의 수직 방향(cross axis)으로 정렬한다.)보다 우선하여 개별 flex item을 정렬한다. 기본값은 auto이다. .flex-item {align-self: auto | flex-start | flex-end | center | baseline | stretch;}
.flex-container {overflow: hidden;}
5
3
1
2
4
.flex-item {order:0;}
5
3
1
2
4
.flex-item {flex: 0 0 0;} /*flex-grow,flex-shrink,flex-basis*/ .flex-item {flex-grow:0;}
1
2
3
4
5
.flex-item2 {flex-grow:3;}
1
flex-grow:3;
3
4
5
.flex-item2 {flex-shrink:0;}
1
2
3
4
5
.flex-item2 {flex-basis:auto;}
1
flex-basis:60px;
3
4
5
Grid
https://heropy.blog/2019/08/17/css-grid/
https://studiomeal.com/archives/533
grid {text}
{text} {text} {text}
.grid-container {display: grid;grid-template-columns:1fr 1fr 2fr;grid-template-rows:1fr 2fr 1fr;}
1
2
3
4
5
6
7
8
9
.grid-container {display: grid;grid-template-columns: repeat(5, 1fr);}
1
2
3
4
5
6
7
8
9
.grid-container {display: grid;row-gap:10px;column-gap: 20px;} .grid-container {display: grid;gap:10px 20px;}
1
2
3
4
5
6
7
8
9
.grid-template-columns1 {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
.grid-template-columns1 .flex-item1:nth-child(1) {
grid-column: 1 / span 3;
}
.grid-template-columns1 .flex-item1:nth-child(5) {
grid-column: span 3;
}
1
2
3
4
5
.grid-template-columns2 {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
.grid-template-columns2 .flex-item1:nth-child(1) {
grid-column: 1 / span 3;
}
.grid-template-columns2 .flex-item1:nth-child(2) {
grid-column: span 2;
grid-row: span 2;
border: 1px solid red;
}
.grid-template-columns2 .flex-item1:nth-child(5) {
grid-column: span 3;
}
1
2
3
4
5
.grid-template-areas {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(4, 1fr);
grid-template-areas:
"header header header"
"main . ."
"main . aside"
"footer footer footer";
}
flex-header
flex-main
flex-aside
CSS3 Horizontal & Vertical Centering
수평 정렬(Horizontal Align)
inline/inline-block 요소 정렬 대상 요소(텍스트 또는 링크 등의 inline 레벨 요소 또는 inline-block 레벨 요소)의 부모 요소에 text-align: center;를 지정한다. .container {text-align: center;}
block 요소 정렬 대상 요소에 너비를 명시적으로 지정하고 margin-right와 margin-left 프로퍼티에 auto를 지정한다.
정렬 대상 요소에 너비를 명시적으로 지정하지 않으면 너비는 full width가 되므로 중앙 정렬이 필요없다.
.item {width: 200px;margin: 20px auto;}
복수의 block 요소 복수의 block 요소는 기본적으로 수직 정렬된다. 이것을 수평정렬하기 위해서는 정렬 대상 block 요소를 inline-block 요소로 변경한 후 부모 요소에 text-align: center;를 지정한다.
정렬 대상 요소에 width를 지정하지 않으면 콘텐츠에 너비에 맞추어 너비가 결정되므로 명시적으로 너비를 지정한다.
.container {text-align: center;}
.item {width: 150px;display: inline-block;}
Flexbox flexbox를 사용할 수도 있다. 정렬 대상의 부모 요소에 아래의 룰셋을 선언한다. .flex-center {display: flex;justify-content: center;}
수직 정렬(Vertical Align)
inline/inline-block 요소
Single line 정렬 대상의 부모 요소에 padding-top과 padding-bottom 프로퍼티값을 동일하게 적용한다.
padding을 사용할 수 없는 경우, 요소의 height와 line-height 프로퍼티값을 동일하게 적용한다. 단 이 방법은 행간이 지나치게 넓어지거나 Click Dead Zone 이슈가 발생하는 등 여러 줄의 텍스트에는 사용할 수 없다.
.container {padding: 50px;}

.container {height: 100px;line-height: 100px;}
Multiple lines 여러 줄의 텍스트의 경우, padding-top과 padding-bottom 프로퍼티값을 동일하게 적용하는 방법도 가능하다. 또 다른 방법으로 vertical-align 프로퍼티를 사용한 방법도 가능하다. 이 방법은 table 속성을 사용하여야 한다. .parent {display: table;height: 100px;}
.child {display: table-cell;vertical-align: middle;}
Flexbox vertical-align 프로퍼티를 사용하는 방법은 table 프로퍼티를 사용하여야 하므로 번거로울 수 있다. 좀 더 간단한 방법은 flexbox를 사용하는 것이다. .container {display: flex;justify-content: center;flex-direction: column;height: 400px;}

block 요소
요소의 높이가 고정되어 있는 경우 부모 요소를 기준으로 절대 위치를 지정한다. .parent {position: relative;}
.child {position: absolute;top: 50%;height: 100px;margin-top: -50px;}
/*요소의 높이(100px)의 반 만큼 위로 이동*/
요소의 높이가 불확정 상태의 경우 부모 요소를 기준으로 절대 위치를 지정한다. .parent {position: relative;}
.child {position: absolute;top: 50%;transform: translateY(-50%);}
/*요소의 높이의 반(50%) 만큼 위로 이동*/
Flexbox 부모 요소에 Flexbox layout을 지정한다. /*위에서 아래로 수직 배치*/
.parent {display: flex;flex-direction: column;justify-content: center;}
/*중앙정렬*/
가운데정렬
<DIV STYLE="position:relative;">
<DIV STYLE="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);"></DIV>
</DIV>
position:relative;
position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);

<DIV CLASS="small-boxout" STYLE="position:relative;">
<DIV CLASS="small-box1" STYLE=" position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);"></DIV></DIV>
장점 : 가변적인 크기에 중앙정렬이 가능하다.
단점 : 없음
1234
5678
<DIV CLASS="small-boxout" STYLE="display:flex;">
<DIV CLASS="small-box1" STYLE="justify-content:center;align-items:center;"></DIV></DIV>
장점 : 가변적인 크기에 중앙정렬이 가능하다.
단점 : 없음
1234
5678
<DIV CLASS="small-boxout" STYLE="position:relative;">
<DIV CLASS="small-box1" STYLE="position:absolute;top:0;right:0;left:0;bottom:0;margin:auto;"></DIV></DIV>
장점 : 고정크기 박스에 중앙정렬이 가능하다.
단점 : smallbox 고정크기(width,height)값이 있어야 한다.
1234
5678
<DIV CLASS="small-boxout">
<DIV CLASS="small-box1" STYLE="margin:25%;"></DIV></DIV>
장점 : 고정크기 박스에 중앙정렬이 가능하다. 크로스브라우저를 지원한다.
단점 : margin 값을 조정해야 한다.
1234
5678
<DIV CLASS="small-boxout" STYLE="display:table-cell;vertical-align:middle;text-align:center;float:none;">
<DIV CLASS="small-box1" STYLE="display:inline-block;"></DIV></DIV></DIV>
장점 : 가변적인 크기에 중앙정렬이 가능하다.
단점 : float:none 지정해야 한다.
1234
5678
<DIV CLASS="small-boxout" STYLE="position:relative;">
<DIV CLASS="small-box1" STYLE="position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;"></DIV></DIV>
장점 : 고정크기 박스에 중앙정렬이 가능하다. 크로스브라우저를 지원한다.
단점 : smallbox 고정크기(width,height)값이 있어야 한다.
1234
5678
<DIV CLASS="small-boxout" STYLE="text-align:center;line-height:9;">
<DIV CLASS="small-box1" STYLE="display:inline-block;"></DIV></DIV>
장점 : 고정크기 박스에 중앙정렬이 가능하다.
단점 : line-height 값을 조정해야 한다.
1234
5678
<DIV CLASS="small-boxout small-before" STYLE="text-align:center;">
<DIV CLASS="small-box1" STYLE="display:inline-block;"></DIV></DIV>
장점 : 고정크기 박스에 중앙정렬이 가능하다.
단점 : height:140% 값을 조정해야 한다.
1234
5678
Typography
CSS3 List Style
List
list-style-type none
disc
circle
square
decimal
lower-alpha
upper-alpha
lower-roman
upper-roman
  • none
  • disc
  • circle
  • square
  • decimal
  • lower-alpha
  • upper-alpha
  • lower-roman
  • upper-roman
리스트블릿의타입
list-style-image list-stype-image:url('../img/dot.png'); 리스트블릿의이미지
list-style-position outside | inside | inherit 리스트블릿의위치
list-style list-style:square url('../img/dot.png') inside;
CSS3 Table Layout
Table http://webberstudy.com/html-css/css-2/table-style/
TABLE
<TABLE>,<TR>,<TH>,<TD>,<COLSPAN>,<ROWSPAN>
COLSPAN="2"
A B
C
ROWSPAN="3"
A B
C
D

Table Tag
<CAPTION>, <COLGROUP>, <THEAD>, <TBODY>, <TFOOT>, <SCOPE>(row,col,rowgroup,colgroup)

참가자별 점수표
thead 참가자 (colgroup) 항목 (colgroup)
이름 (col) 나이 (col) 100M 달리기 (col) 윗몸 일으키기 (col)
tbody 남성 (rowgroup)
홍길동 (row) 24 15.44 31
임꺽정 (row) 31 16.3 28
tbody 여성 (rowgroup)
장옥빈 (row) 29 18.12 20
심청이 (row) 21 17.1 33
tfoot 평균 (row) 16.74 28
scope 속성값 예시
table-style
border-collapse separate | collapse | initial | inherit
separate (기본값)셀을 분리시켜(separate) 사이의 공백을 만듭니다. 사이의 공백이 0이더라도, 테두리가 별개로 나타납니다.
collapse 셀을 합쳐서(collapse) 사이의 공백이 없습니다. 셀이 합쳐지면서 테두리도 합쳐집니다.
border-spacing border-collapse:separate일경우 셀간의 공백의 크기
px/em table 요소에만 적용될 수 있습니다. (tr,th,td 등의 요소에는 적용안됨.)
inherit 부모의 속성을 상속받습니다.
table-layout
auto 기본 값으로, 열의 너비를 자동적으로 잡아 줍니다. 셀의 내부 너비에 따라 너비가 달라지며,
내부 콘텐츠를 모두 읽고 나서 너비를 정해야 하기 때문에, 내부 콘텐츠가 너무 많은 경우 종종 느려질 수 있습니다.
fixed 고정된 방식으로 레이아웃을 잡아 줍니다. 내부 콘텐츠를 무시하고 너비를 잡기 때문에,
셀에 아무런 너비를 지정하지 않는 경우에는 셀의 너비가 동등하게 나타납니다.
inherit 부모의 속성을 상속받습니다.
vertical-align : top, middle, bottom
caption-side
top 기본 값으로, caption의 위치가 위에 위치합니다.
bottom caption의 위치를 도표의 아래에 위치하도록 합니다.
inherit 부모의 속성을 상속 받습니다.
display: table
table 요소를 table 요소처럼 만들어 줍니다.
table-caption 요소를 caption 요소처럼 만들어 줍니다.
table-row 요소를 tr 요소처럼 만들어 줍니다.
table-cell 요소를 td 요소처럼 만들어 줍니다.
table-column-group 요소를 colgroup 요소처럼 만들어 줍니다.
table-column 요소를 col 요소처럼 만들어 줍니다.
table-header-group 요소를 thead 요소처럼 만들어 줍니다.
table-footer-group 요소를 tfoot 요소처럼 만들어 줍니다.
table-row-group 요소를 tbody 요소처럼 만들어 줍니다.

table-layout 적용전
CAPTION TEXT
A
B
1
2
table-layout 적용후
CAPTION TEXT
A
B
1
2
사용하지 않는 요소 <FONT>,<CENTER>,<BLINK>,<MARQUEE> 사용을 제한하는 요소 <IFRAME>,<BIG>,<SMALL>,<I>,<B>,<S>
3.jQuery
참고 : http://www.devkuma.com/books/3
http://hohoya33.tistory.com/26?category=412040
1. jQuery 기초
jQuery 적용
(다운로드, CDN)
jQuery 파일을 다운로드 받아 로드하는 방법
http://jquery.com/download
CDN을 이용하여 로드하는 방법
jQuery.com CDN
<SCRIPT SRC="https://code.jquery.com/jquery-3.3.1.min.js"></SCRIPT>
구글 CDN
<SCRIPT src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></SCRIPT>
MS CDN
<SCRIPT src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></SCRIPT>
CDNJS CDN
<SCRIPT src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></SCRIPT>
sDelivr CDN
<SCRIPT src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></SCRIPT>
jQuery 문법 $(선택자).동작함수();
$() 함수
Document 객체의 ready() 메소드
window.onload = function(){}; //자바스크립트 코드
$(document).ready(function(){}); //jQuery 코드
$(function(){}); // jQuery 코드
$(document).ready(function(){}); //문서가 전부 로드되었을 때 실행된다.
$(window).load(function(){}); //모든 창이 모두 로드되었을 때 실행된다.
2. 요소의 선택
CSS 선택자(Selector) 태그 이름로 선택 $("span").css("fontSize","30px");
아이디로 선택 $("#devkuma").css("fontSize", "30px");
클래스로 선택 $(".devkuma").css("fontSize", "30px");
그밖에 선택 $("span[title=devkuma]").css("fontSize", "30px");
$(this).css("fontSize", "30px");
$("ul li:first").css("color", "red");
jQuery 선택자(Selectors) <ul>
<li>에스프레소</li>
<li><b>아메리카노</b></li>
<li>카페라떼</li>
</ul>
var coffees = $("li"); //선택한 요소를 변수에 저장
$("#length").text("커피의 종류는 총 " + coffees.length + "가지 입니다.");
//선택한 요소를 변수에 저장
$("li:has(b)").append(" - 추천 메뉴입니다."); //선택한 요소의 필터링
선택한 요소의 필터링
:eq(n) $("ul li:eq(3)") 선택한 요소 중에서 인덱스가 n인 요소를 선택한다.
:gt(n) $("ul li:gt(3)") 선택한 요소 중에서 인덱스가 n보다 큰 요소를 모두 선택한다.
:lt(n) $("ul li:lt(3)") 선택한 요소 중에서 인덱스가 n보다 작은 요소를 모두 선택한다.
:even $("tr:even") 선택한 요소 중에서 인덱스가 짝수인 요소를 모두 선택한다.
:odd $("tr:odd") 선택한 요소 중에서 인덱스가 홀수인 요소를 모두 선택한다.
:first $("p:first") 선택한 요소 중에서 첫 번째 요소를 선택한다.
:last $("p:last") 선택한 요소 중에서 마지막 요소를 선택한다.
:animated $(":animated") 선택한 요소 중에서 애니메이션 효과가 실행 중인 요소를 모두 선택한다.
:header $(":header") 선택한 요소 중에서 <h1>부터 <h6>까지의 요소를 모두 선택한다.
:lang(언어) $("p:lang(ko)") 선택한 요소 중에서 지정한 언어의 요소를 모두 선택한다.
:not(선택자) $("input:not(:empty)") 선택한 요소 중에서 지정한 선택자와 일치하지 않는 요소를 모두 선택한다.
:root $(":root") 선택한 요소 중에서 최상위 루트 요소를 선택한다.
target $("a[target='_blank']") 선택한 요소 중에서 웹 페이지 URI의 fragment 식별자와 일치하는 요소를 모두 선택한다.
:contains(텍스트) $(":contains('Hello')") 선택한 요소 중에서 지정한 텍스트를 포함하는 요소를 모두 선택한다.
:has(선택자) $("p:has(span)") 선택한 요소 중에서 지정한 선택자와 일치하는 자손 요소를 갖는 요소를 모두 선택한다.
:empty $(":empty") 선택한 요소 중에서 자식 요소를 가지고 있지 않은 요소를 모두 선택한다.
:parent $(":parent") 선택한 요소 중에서 자식 요소를 가지고 있는 요소를 모두 선택한다.
input 요소의 선택
:button $(":button") type 속성값이 "button"인 요소를 모두 선택한다.
:checkbox $(":checkbox") type 속성값이 "checkbox"인 요소를 모두 선택한다.
:file $(":file") type 속성값이 "file"인 요소를 모두 선택한다.
:image $(":image") type 속성값이 "image"인 요소를 모두 선택한다.
:password $(":password") type 속성값이 "password"인 요소를 모두 선택한다.
:radio $(":radio") type 속성값이 "radio"인 요소를 모두 선택한다.
:reset $(":reset") type 속성값이 "reset"인 요소를 모두 선택한다.
:submit $(":submit") type 속성값이 "submit"인 요소를 모두 선택한다.
:text $(":text") type 속성값이 "text"인 요소를 모두 선택한다.
:input $(":input") <input>, <textarea>, <select>, <button>요소를 모두 선택한다.
:checked $(":checked") type 속성값이 "checkbox" 또는 "radio"인 요소 중에서 체크되어 있는 요소를 모두 선택한다.
:selected $(":selected") <option>요소 중에서 선택된 요소를 모두 선택한다.
:focus $(":focus") 현재 포커스가 가지고 있는 요소를 선택한다.
:disabled $(":disabled") 비활성화되어있는 요소를 모두 선택한다.
:enabled $(":enabled") 활성화되어있는 요소를 모두 선택한다.
선택된 요소에 접근(getter / setter)
.html() 해당 요소의 HTML 콘텐츠를 반환하거나 설정한다. 메소드 체이닝(method chaining)
<ul>
<li>에스프레소</li>
<li>아메리카노</li>
<li>카페라떼</li>
</ul>
$("ul").find("li").eq(1).append(" - 추천 메뉴입니다.")
$("ul").find("li").eq(1).append(" - 추천 메뉴입니다.").end().eq(2).append(" - 추천 메뉴입니다.");

.width() 메소드와 .height() 메소드
$("img").width(300); //setter
$("img").height(300); //setter
var imgWidth = $("img").width(); //getter
var imgHeight = $("img").height(); //getter
$("p").html("가로 길이:" + imgWidth + ", 높이 :" + imgHeight);

.attr() 메소드
$("img").attr("width", "300"); //setter
var imgWidth = $("img").attr("width"); //getter
$("p").html("변경된 이미지 너비:" + imgWidth);
.text() 해당 요소의 텍스트 콘텐츠를 반환하거나 설정한다.
.width() 선택한 요소 중에서 첫 번째 요소의 너비를 픽셀 단위의 정수로 반환하거나 설정한다.
.height() 선택한 요소 중에서 첫 번째 요소의 높이를 픽셀 단위의 정수로 반환하거나 설정한다.
.attr() 해당 요소의 명시된 속성의 속성값을 반환하거나 설정한다.
.position() 선택한 요소 중에서 첫 번째 요소에 대해 특정 위치에 존재하는 객체를 반환한다(getter 메소드)
.val() <form>요소의 값을 반환하거나 설정한다.
3. 요소의 조작
기존 요소의 내부에 추가
.append() 선택된 요소의 마지막에 새로운 요소나 콘텐츠를 추가한다. 두번째 <li> 뒤에 새로운 HTML 요소를 추가할 수 있다.
$("#list").append("<li>새로 추가된 아이템</li>");
.prepend() 선택된 요소의 첫번째에 새로운 요소나 콘텐츠를 추가한다. 첫번째 <li>에 앞에 새로운 HTML 요소를 추가할 수 있다.
$("#list").prepend("<li>새로 추가된 아이템</li>");
.appendTo() 선택된 요소를 해당 요소의 마지막에 추가한다. 첫번째 <p>에 뒤에 새로운 HTML 요소를 추가할 수 있다.
$("<span>jQuery입니다.</span>").appendTo("p");
.prependTo() 선택된 요소를 해당 요소의 첫번째에 추가한다. <p>요소 앞에 새로운 HTML 요소를 추가할 수 있다.
$("<span>jQuery입니다.</span>").prependTo("p");
기존 요소의 외부에 추가
.before() 선택한 요소의 바로 앞쪽에 새로운 요소나 콘텐츠를 추가한다. <p>요소 앞에 새로운 HTML 요소를 추가할 수 있다.
$("p").before("<div>" + (++i) + "번째 문장입니다.</div>");
.after() 선택한 요소의 바로 뒤쪽에 새로운 요소나 콘텐츠를 추가한다. 첫번째 <p>에 뒤에 새로운 HTML 요소를 추가할 수 있다.
$("p").after("<div>" + (++i) + "번째 문장입니다.</div>");
.insertBefore() 선택한 요소를 해당 요소의 앞쪽에 추가한다. <p>요소 앞에 새로운 HTML 요소를 추가할 수 있다.
$("<div>" + (++i) + "번째 문장입니다.</div>").insertBefore("p");
.insertAfter() 선택한 요소를 해당 요소의 뒤쪽에 추가한다. <p>요소 뒤에 새로운 HTML 요소를 추가할 수 있다.
$("<div>" + (++i) + "번째 문장입니다.</div>").insertAfter("p");
기존 요소를 포함하는 요소의 추가
.wrap() 선택한 요소를 포함하는 새로운 요소를 추가한다. 각각의 <p>요소를 새로운 HTML 요소로 감쌀 수 있다.
$("p").wrap("<div class='wrap'></div>");
.wrapAll() 선택한 모든 요소를 포함하는 새로운 요소를 추가한다. <p>요소를 모두 한번에 새로운 HTML 요소로 감쌀 수 있다.
$("p").wrapAll("<div class='wrap'></div>");
.wrapInner() 선택한 요소에 포함되는 새로운 요소를 추가한다. <p>요소의 안을 새로운 HTML 요소로 감쌀 수 있다.
$("p").wrapInner("<div class='wrap'></div>");
기존 요소의 내부 변경
.html() 해당 요소의 HTML 콘텐츠를 반환하거나 설정한다. <p> 요소의 내용을 새로운 HTML 요소로 변경할 수 있다.
$("p").html("<div class='wrap'>devkuma입니다.</div>");
.text() 해당 요소의 텍스트 콘텐츠를 반환하거나 설정한다. <p> 요소의 내용을 새로운 text로 변경할 수 있다.
$("p").text("devkuma입니다.");
요소의 복사
.clone() 선택한 요소를 복사하여 새로운 요소를 생성한다. hello 요소를 복사해서, .appendTo() 메소드를 사용하여 붙여넣기 한다.
$("#hello").clone().appendTo("#devkuma");
요소의 대체
.replaceAll() 선택한 요소를 지정된 요소로 대체한다. 요소를 생성해서 다른 요소를 그 요소로 대체할 수 있다.
$("<div>devkuma입니다.</div>").replaceAll("p");
//객체를 다른 요소를 그 객체의 요소로 대체할 수 있다.
$("#two").replaceAll($("#one"));
.replaceWith() 선택한 모든 요소를 지정된 요소로 대체한다.
(.replaceAll() 메소드와 .replaceWith() 메소드는 제거된 요소와 관련된 모든 데이터와 이벤트 핸들러도 같이 제거한다.)
요소를 생성해서 다른 요소를 그 요소로 대체할 수 있다.
$("p").replaceWith("<div>devkuma입니다.</div>");
//객체를 다른 요소를 그 객체의 요소로 대체할 수 있다.
$("#one").replaceWith($("#two"));
요소의 삭제
.remove() 선택한 요소를 DOM 트리에서 삭제한다. 삭제된 요소와 연관된 jQuery 데이터나 이벤트도 같이 삭제된다. <p> 요소 중에 id가 one, two인 요소를 삭제한다.
$("p").remove("#one, #two");
.detach() 선택한 요소를 DOM 트리에서 삭제한다.
삭제된 요소와 연관된 jQuery 데이터나 이벤트는 유지된다.
class가 "hello"인 요소를 모두 삭제한다.
data = $(".hello").detach();
detach() 메소드로 삭제되었던 모든 요소를 다시 추가한다.
$("p").after(data);
.empty() 선택한 요소의 자식 요소를 모두 삭제한다. $("#container").empty(); //id가 "hello"인 요소의 자식 요소를 모두 삭제한다.
.unwrap() 선택한 요소의 부모 요소를 삭제한다. $("p").unwrap(); //<p> 요소의 부모 요소를 삭제한다.
4. 요소의 탐색
상위(ancestor:조상) 요소의 탐색
.parent() 선택한 요소의 부모(parent) 요소를 선택한다. <ul> 요소의 부모 요소를 선택하여, 해당 요소의 CSS 스타일을 변경한다.
$("ul").parent().css({"border": "2px solid red"});
.parents() 선택한 요소의 상위(ancestor) 요소를 모두 선택한다. <ul>요소의 상위 요소 중에서 <div>요소를 모두 선택하여, 해당 요소의 CSS 스타일을 변경한다.
$("ul").parents("div").css({"border": "2px solid red"});
.parentsUntil() 선택한 요소의 상위 요소 중에서 지정한 선택자에 해당하는 요소 바로 이전까지의 요소를 모두 선택한다. <li>요소의 상위 요소 중에서 첫 번째 <div>요소의 바로 이전까지의 요소를 모두 선택하여, 해당 요소의 CSS 스타일을 변경한다.
$("li").parentsUntil("div").css({"border": "2px solid red"});
.closest() 선택한 요소를 포함한 상위 요소 중에서 지정한 선택자에 해당하는 요소 중 가장 첫 번째 요소를 선택한다. 클래스 "me"을 가진 요소 자신과 상위 요소 중에서 첫 번째 <li>요소를 선택하여, 해당 요소의 CSS 스타일을 변경한다.
$(".me").closest("li").css({"border": "2px solid red"});
하위(descendant:자손) 요소의 탐색
.children() 선택한 요소의 자식(child) 요소를 모두 선택한다. <ul>요소의 자식 요소를 모두 선택하고, 해당 요소의 CSS 스타일을 변경한다.
$("ul").children().css({"border": "2px solid red"});
.find() 선택한 요소의 자손(descendant) 요소 중에서 전달받은 선택자에 해당하는 요소를 모두 선택한다. <ul>요소의 자손 요소를 모두 선택하고, 해당 요소의 CSS 스타일을 변경한다.
$("ul").find("*").css({"border": "2px solid red"});
형제(sibling) 요소의 선택
.siblings() 선택한 요소의 형제(sibling) 요소 중에서 지정한 선택자에 해당하는 요소를 모두 선택한다. me 클래스를 가진 요소의 같은 선상에 요소를 모두 선택하여, 해당 요소의 CSS 스타일을 변경한다.
$(".me").siblings().css({"border": "2px solid red"});
.next() 선택한 요소의 바로 다음에 위치한 형제 요소를 선택한다. me 클래스를 가진 요소의 바로 다음 형제 요소 하나를 선택하여, 해당 요소의 CSS 스타일을 변경한다.
$(".me").next().css({"border": "2px solid red"});
.nextAll() 선택한 요소의 다음에 위치한 형제 요소를 모두 선택한다. me 클래스를 가진 요소의 다음에 있는 형제 요소를 모두 선택, 해당 요소의 CSS 스타일을 변경한다.
$(".me").nextAll().css({"border": "2px solid red"});
.nextUntil() 선택한 요소의 형제 요소 중에서 지정한 선택자에 해당하는 요소 바로 이전까지의 요소를 모두 선택한다. me 클래스를 가진 요소의 이후 형제 요소 중에서 <li> 요소의 마지막 바로 이전까지의 모든 요소를 선택하여, 해당 요소의 CSS 스타일을 변경한다.
$(".me").nextUntil("li:last").css({"border": "2px solid red"});
.prev() 선택한 요소의 바로 이전에 위치한 형제 요소를 선택한다. me 클래스를 가진 요소의 바로 이전 형제 요소 하나를 선택하여, 해당 요소의 CSS 스타일을 변경한다.
$(".me").prev().css({"border": "2px solid red"});
.prevAll() 선택한 요소의 이전에 위치한 형제 요소를 모두 선택한다. me 클래스를 가진 요소의 이전에 있는 형제 요소를 모두 선택, 해당 요소의 CSS 스타일을 변경한다.
$(".me").prevAll().css({"border": "2px solid red"});
.prevUntil() 선택한 요소의 형제 요소 중에서 지정한 선택자에 해당하는 요소 바로 다음까지의 요소를 모두 선택한다. me 클래스를 가진 요소의 이전 형제 요소 중에서 <li> 요소의 첫번째 바로 이전까지의 모든 요소를 선택하여, 해당 요소의 CSS 스타일을 변경한다.
$(".me").prevUntil("li:first").css({"border": "2px solid red"});
기타 탐색 메소드
.add() 선택한 요소에 다른 요소를 추가 선택한다. <p> 요소를 탐색하여 선택하고, 추가로 <div>를 선택하여 css 스타일을 설정한다.
$("p").add("div").css({"border": "2px solid green"});
$("p, div").css({"border": "2px solid green"});
.addBack() 선택한 요소의 집합에 바로 전에 선택했던 요소를 추가한다.
요소에서 find()를 이용하여 <p>를 선택하고, 추가로 .addBack()로
를 선택하여 CSS 스타일를 설정한다.
$("div#after").find("p").addBack().css({"backgroundColor": "aqua"});
.each() 선택한 요소들을 각 요소마다 전달받은 콜백 함수를 반복 실행한다. <li> 요소를 선택하여 반복하면서 콜백 함수를 실행한다. 여기서 콜백 함수는 index를 전달 받아 짝수인 경우만 class를 추가하고 있다.
$("li").each(function(index){
if(index % 2 == 0){$(this).addClass("even");}
});
.end() 마지막으로 실행한 메소드의 실행 전 상태로 선택한 요소의 집합을 복원한다. <p id="after"> 요소에서 find()를 이용하여 <span>를 선택했다가 .end()로 .find()를 취소하고 <p id="after">를 선택하여 css 스타일를 설정한다.
$("p#after").find("span").end().css({"border": "2px solid green"});
.offsetParent() DOM 트리에 존재하는 부모요소들 중 위치(positioned)요소를 기준으로 가장 가까운 요소를 찾아서 요소를 선택한다. 클래스가 me인 요소에서 기준이 되는 부모 요소는 CSS 스타일이 position:relative; 로 설정된 <ul>요소이다.
$(".me").offsetParent().css("border", "2px solid red");
.contents() 선택한 요소의 자식(child) 요소를 모두 선택한다. (텍스트 노드와 주석 노드까지 모두 포함함) <iframe> 요소의 모든 자식 요소를 선택하고, 그 안에서 <a> 요소만의 CSS 스타일을 변경한다. 버튼을 누르면, <iframe> 요소에 로드된 모든 자식 요소 중 <a> 요소의 배경색이 변경될 것이다.
$("iframe") .contents().find("a").css("backgroundColor", "#BADA55");
필터링(filtering) 메소드
.first() 선택한 요소 중에서 첫 번째 요소를 선택한다. .first() 메소드는 선택한 요소 중에서 첫 번째 요소가 선택된다.
$("li").first().css("background-color", "red");
.last() 선택한 요소 중에서 마지막 요소를 선택한다. .last() 메소드는 마지막 요소가 선택된다.
$("li").last().css("background-color", "yellow");
.eq() 선택한 요소 중에서 전달받은 인덱스에 해당하는 요소를 선택한다. 인덱스는 선택된 요소들의 첫번째 요소를 인덱스 0으로 놓고, 앞에서부터 검색된다. 인덱스가 음수인 경우에는 선택한 요소 집합의 맨 마지막 요소를 인덱스 -1로 놓고, 뒤에서부터 검색된다.
$("li").eq(0).css("background-color", "red");
$("li").eq(-1).css("background-color", "yellow");
.filter() 선택한 요소 중에서 전달받은 선택자에 해당하거나, 함수 호출의 결과가 참(true)인 요소를 모두 선택한다. :odd 선택자는 인덱스가 홀수인 요소를 모두 선택하는 선택자이기에, 두 번째와 네 번째 요소가 선택된다.
주의할 점은 jQuery의 인덱스가 언제나 0부터 시작하기 때문이다.
:odd나 :even 선택자를 사용할 때는 언제나 인덱스가 0부터 시작한다.
$("li").filter(":odd") .css("background-color", "yellow");

$("li").filter(function(index){return $("strong",this).length === 1;})
.css("background-color","red");
$("li").filter(function(index){return index % 3 === 2;})
.css( "background-color", "red" );
$("div").css("background","#c8ebcc").filter(".middle").css("border-color","red");
.not() 선택한 요소 중에서 전달받은 선택자에 해당하거나, 함수 호출의 결과가 참(true)인 요소를 제외한 나머지 요소를 모두 선택한다. .not() 메소드는 선택한 요소 중에서 전달받은 선택자에 해당하거나, 함수 호출의 결과가 참(true)인 요소를 제외한 나머지 요소가 모두 선택된다. 즉, .filter() 메소드와는 정반대로 동작하여 요소가 선택된다.
$("li").not(":odd").css("background-color", "yellow");
.has() 선택한 요소 중에서 전달받은 선택자에 해당하는 요소를 자손 요소로 가지고 있는 요소를 모두 선택한다. <li>요소 중에서 하위 요소로 요소를 가지고 있는 요소만의 CSS 속성을 변경한다.
$("li").has("b").css("background-color", "yellow");
.is() 선택한 요소 중에서 전달받은 선택자에 해당하는 요소가 하나라도 존재하면 참(true)을 반환한다. 요소의 상위 요소를 선택하여, 선택된 상위 요소 중에 <ul> 요소가 존재하는지 여부를 .is()로 체크하고 있다.
if($("b").parents().is("ul")){
$("p").text("<b> 요소의 상위 요소로 <ul> 요소가 존재한다.");
}
.map() 선택한 요소 집합의 각 요소마다 콜백 함수를 실행하고, 그 반환값으로 구성된 jQuery 객체를 반환한다. <li> 요소들의 각 요소마다 해당 요소의 html 값을 반환하는 콜백함수를 실행한다. 콜백함수의 실행으로 반환되는 값들은 .get() 메소드를 통해 배열로 반환되며, 다시 .join() 메소드를 통해 문자열로 반환된다.
var val = $("li").map(function(){return $(this).html();})
.get() //반환된 값을 배열로 반환된다.
.join(", "); //배열의 모든 요소를 쉼표(,)로 구분하여 문자열로 반환된다.
$("p").html(val);
.slice() 선택한 요소 중에서 전달받은 인덱스 범위에 해당하는 요소만을 선택한다. 첫번째 줄에서는 선택한 <li>요소 중에서 인덱스가 2과 같거나 그 이상인 요소만의 CSS 속성을 변경하고, 두번째 줄에서는 선택한 <li>요소 중에서 인덱스가 1과 같거나 3이하인 요소만의 CSS 속성을 변경한다.
$("li").slice(2).css("background-color", "yellow");
$("li").slice(1, 3).css("border", "2px solid green");
find() 와 filter() 메서드의 차이
find() jQuery 객체에 포함된 각요소의 하위요소를 선택해서 수정한다. //$('div .text')라는 요소를 가진 jQuery 객체가 된다.
var $find = #('div').find('.text');
filter() jQuery 객체에 포함된 각요소를 선택해서 수정한다. //$('div.text')라는 요소를 가진 jQuery 객체가 된다.
var $find = #('div').filter('.text');
5. 요소의 영역
요소의 크기
.width() 선택한 요소 집합의 첫 번째 요소의 너비를 반환하거나, 선택된 요소의 너비를 인수로 전달받은 값으로 설정한다. .width()와 .height() 메소드는 선택한 요소의 크기를 반환한다.
$("p").html("요소의 너비:" + $("div").width() + "px
요소의 높이:" + $("div").height() + "px" );
.height() 선택한 요소 집합의 첫 번째 요소의 너비를 반환하거나, 선택된 요소의 너비를 인수로 전달받은 값으로 설정한다.
.innerWidth() 선택한 요소 집합의 첫 번째 요소의 너비에 패딩 영역을 포함한 너비를 반환한다. 브라우저의 뷰포트(viewport)나 HTML 문서의 크기도 알아낼 수 있다.
var str = "";
str += "document 너비는 " + $(document).width() + "px이고, 높이는 " + $(document).height() + "px 이고,";
str += "window 너비는 " + $(window).width() + "px이고, 높이는 " + $(window).height() + "px 이다.";
$("p").html(str);
.innerHeight() 선택한 요소 집합의 첫 번째 요소의 높이에 패딩 영역을 포함한 높이를 반환한다.
.outerWidth() 선택한 요소 집합의 첫 번째 요소의 너비에 패딩 영역과 테두리를 포함한 너비를 반환한다. 또는 인수로 true를 전달받으면 마진 영역까지 포함한 너비를 반환한다. var text = "";
text += "요소의 크기는 너비:" + $("div").width() + "px, 높이:" + $("div").height() + "px"
text += "요소의 크기 + 패딩은 너비:" + $("div").innerWidth() + "px, 높이:" + $("div").innerHeight() + "px";
text += "요소의 크기 + 패딩 + 테두리는 너비:" + $("div").outerWidth() + "px, 높이:" + $("div").outerHeight() + "px";
text += "요소의 크기 + 패딩 + 테두리 + 마진은 너비:" + $("div").outerWidth(true) + "px, 높이:" + $("div").outerHeight(true) + "px";
$("p").html(text);
.outerHeight() 선택한 요소 집합의 첫 번째 요소의 높이에 패딩 영역과 테두리를 포함한 높이를 반환한다. 또는 인수로 true를 전달받으면 마진 영역까지 포함한 높이를 반환한다.
요소의 위치
.offset() 선택한 요소 집합의 첫 번째 요소의 위치를 HTML 문서를 기준으로 반환하거나, 선택한 요소의 위치를 인수로 전달받은 값으로 설정한다. var p = $("p:first").offset();
$("span").text("top: " + p.top + "xp, left: " + p.left + "xp");
.position() 선택한 요소 집합의 첫 번째 요소의 위치를 해당 요소가 웹 페이지에 위치할 때 기준이 되었던 부모 요소를 기준으로 하는 상대 위치를 반환한다. .position() 메소드와 .offset()를 한번에 위치를 반환한다.
$("p").offset({ top: 200, left: 10 });
var p = $("p:first").offset();
$("span").text("top: " + p.top + "xp, left: " + p.left + "xp");
.offset() 메소드와 .position() 메소드의 차이점
.offset() 메소드 HTML 문서(HTML document)를 기준으로 한다. var o = $("p").offset();
$("#offset").text("offset - top: " + o.top + "xp, left: " + o.left + "xp");
.position() 메소드 선택한 요소가 웹 페이지에 위치할 때 기준이 되는 부모 요소를 기준으로 한다. var p = $("p").position();
$("#position").text("position - top: " + p.top + "xp, left: " + p.left + "xp");
요소의 스크롤 위치
.scrollLeft() 선택한 요소 집합의 첫 번째 요소의 수평 스크롤 바의 위치를 얻거나, 선택된 요소의 수평 스크롤 바의 위치를 인수로 전달받은 값으로 설정한다. 선택한 요소의 스크롤 바의 위치를 반환한다.
var left = $(".box").scrollLeft();
var top = $(".box").scrollTop();
$("span").text("Left:" + left + ", Top" + top);
선택한 요소의 스크롤 바의 위치를 설정한다.
$(".box").scrollLeft(70);
$(".box").scrollTop(20);
var left = $(".box").scrollLeft();
var top = $(".box").scrollTop();
$("span").text("Left:" + left + ", Top" + top);
.scrollTop() 선택한 요소 집합의 첫 번째 요소의 수직 스크롤 바의 위치를 얻거나, 선택된 요소의 수직 스크롤 바의 위치를 인수로 전달받은 값으로 설정한다. 스크롤 바의 위치 정보를 실시간 구하기
var left = $(this).scrollLeft();
var top = $(this).scrollTop();
$("span").text("Left:" + left + ", Top" + top);
6. CSS 스타일 및 프로퍼티 설정
프로퍼티 설정
.attr() 선택한 요소 집합의 첫 번째 요소의 지정된 속성(attribute)값을 반환하거나, 선택한 요소의 지정된 속성을 전달받은 값으로 설정한다. $("span").attr("title", (++count) + "번 클릭했습니다."); //속성값 설정
$("p").text($("span").attr("title")); //속성값 반환
$("span").removeAttr("title"); //속성 제거
.removeAttr() 선택한 요소에서 지정된 속성(attribute)을 제거한다.
.prop() 선택한 요소 집합의 첫 번째 요소의 지정된 프로퍼티(property)값을 반환하거나, 선택한 요소의 지정된 프로퍼티를 전달받은 값으로 설정한다. $('input[type="checkbox"]').prop({checked: true}); //프로퍼티 설정
$("p").text($('input[type="checkbox"]').prop("checked")); //프로퍼티 반환
$('input[type="checkbox"]').removeProp("checked"); //프로퍼티 제거
.removeProp() 선택한 요소에서 지정된 프로퍼티(property)를 제거한다.
속성(attribute)과 프로퍼티(property)의 차이점
<input type="checkbox" name="chk" checked="checked">
<input>요소는 checked라는 속성(attribute)을 가지고 있으며, 그 속성값은 "checked"이다.
해당 체크박스가 체크되면 checked 프로퍼티 값은 "true"이다.
$('input[type="checkbox"]').change(function() {
var html = "checked 속성값: " + $(this).attr("checked");
html += "checked 프로퍼티값: " + $(this).prop("checked");
$("p").html(html);
}).change();
CSS 스타일 설정
.css() css() 메소드는 선택한 요소 집합의 첫 번째 요소의 스타일 속성값을 반환하거나, 선택한 요소의 스타일 속성을 인수로 전달받은 값으로 설정한다. $("p").css("backgroundColor", "#00ff00")
$("p").css("backgroundColor")
$("p").css({"fontSize": "30px","backgroundColor": "yellow"});
클래스 설정
.addClass() 선택된 요소에 인수로 전달받은 클래스를 추가한다. $("#one, #two").addClass("blue");
.removeClass() 선택된 요소에서 인수로 전달받은 클래스를 제거한다. $("#one, #two").removeClass("blue");
.toggleClass() 선택된 요소에 클래스가 없으면 인수로 전달받은 클래스를 추가하고, 전달받은 클래스가 이미 추가되어 있으면 제거한다. $("#one, #two").toggleClass("blue");
.hasClass() 인수로 전달받은 값이 선택된 요소의 클래스가 존재하는지 여부를 확인한다. $("#one, #two").toggleClass("blue");
7. 이벤트 처리
이벤트의 개념
이벤트 핸들러(event handler) 특정 요소에서 발생하는 이벤트를 처리하기 위해서는 이벤트 핸들러(event handler)라는 함수를 작성하여 연결해야만 한다. 이벤트 핸들러가 연결된 특정 요소에서 지정된 타입의 이벤트가 발생하면, 웹 브라우저는 연결된 이벤트 핸들러를 실행한다. $("p").on({
mouseenter: function() {$(this).css("background-color", "yellow");},
mouseleave: function() {$(this).css("background-color", "blue");},
click: function() {$(this).css("background-color", "red");}
});
이벤트 객체(event object) type : 이벤트 종류
pageX : 브라우저 화면을 기준으로 한 마우스 X 좌표 위치
pageY : 브라우저 화면을 기준으로 한 마우스 Y 좌표 위치
preventDefault() : 기본 이벤트를 제거합니다.
stopPropagation() : 이벤트 전달을 제거합니다.
$("#text2").on("click", function(e){
$(this).css('color', 'green');
//preventDefault()를 사용하여 <a> 태그의 기본 이벤트를 제거한다.
e.preventDefault();
//stopPropagation()를 사용하여
태그에 이벤트가 전달되는 것을 막는다.
e.stopPropagation();
});
이벤트의 연결(event binding)
jQuery 1.7부터는 .bind()나 .click() 메소드를 사용해도, 내부적으로 .on() 메소드를 이용하여 이벤트 핸들러와 바인딩한다. $("#btn").click(function(event) {});
$("#btn").bind("click", function(event) {});
$("#btn").on("click", function(event) {});
$("body").on({click: function(event) {}}, "#btn");
$("body").on("click", "#btn", function(event) {});
.on() 선택한 요소에 어떤 타입의 이벤트라도 연결할 수 있다.하나의 이벤트 핸들러에 여러 개의 이벤트를 동시에 연결할 수 있다.

선택한 요소에 여러 개의 이벤트 핸들러와 여러 개의 이벤트를 같이 연결할 수 있다.
사용자 지정 이벤트(custom event)를 위해 이벤트 핸들러로 데이터를 넘길 수 있다.
$("p").on("click", function(){alert("문장이 클릭되었습니다.");});
$("p").on("mouseenter mouseleave", function() {
$("div").append("마우스 커서가 문장 위로 들어오거나 빠져 나갔습니다.");
});

$("p").on({
click: function() {$("div").append("마우스가 문장을 클릭했습니다.");},
mouseenter: function() {$("div").append("마우스가 커서가 문장 위로 들어왔습니다.");},
mouseleave: function() {$("div").append("마우스가 커서가 문장을 빠져 나갔습니다.");}
});
.off() .off() 메소드는 더 이상 사용하지 않는 이벤트와의 바인딩(binding)을 제거한다. $("#btn").on("click", function() {alert("버튼을 클릭했습니다.");});
$("#btnBind").on("click", function() {$("#btn").on("click").text("버튼 클릭 가능");});
$("#btnUnbind").on("click", function() {$("#btn").off("click").text("버튼 클릭 불가능");});
.one() .one() 메소드는 바인딩(binding)된 이벤트 핸들러가 한번만 실행되고 나서는, 더는 실행되지 않는다. $("button").one("click", function() {$("div").append("이제 클릭이 되지 않습니다.");});
.on() 메소드 mouseenter 요소에 마우스포인터를 올려놓았을때
mouseleave 요소에 마우스포인터가 벗어날때
mouseover 요소에 마우스포인터를 올려놓았을때
mouseout 요소에 마우스포인터가 벗어날때
mousedown 요소에 마우스포인터를 올려놓은 상태에서 해당요소를 클릭할때
mouseup 요소에 마우스포인터를 올려놓은 상태에서 해당요소를 클릭했다가 뗄때
mousemove 요소안에서 마우스포인터를 움직일때
click 요소를 클릭했을때
dbclick 요소를 더블클릭했을때
keydown 요소에 초점을 맞춘상태에서 키보드의키를 눌렀을때
keyup 요소에 초점을 맞춘상태에서 키보드의키를 뗄때
focus 요소에 포커스가 일치했을때
blur 요소에 포커스를 잃어버렸을때
change 입력내용이 변경되었을때
resize 요소의 크기를 다시설정했을때
scroll 요소를 스크롤했을때
이벤트의 위임(event delegation) <ul id="linkList">
<li><a href="//www.devkuma.com">첫번째 링크</a></li>
<li><a href="//www.devkuma.com">두번째 링크</a></li>
$("#linkList a").on("click", function(event) {
event.preventDefault();alert("이 링크는 동작하지 않습니다!");
});
//이벤트의 위임을 이용하면, 새롭게 추가된 <a>요소에도 연결할 수 있다.
$("#linkList").on("click", "a", function(event) {
event.preventDefault();alert("이 링크는 동작하지 않습니다!");
});
마우스 이벤트와 관련된 메소드
.click() 자바스크립트의 "click" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "click" 이벤트가 발생되었을 때 설정한 함수가 실행된다. $("button").click(function() {$("div").text("클릭이 되었습니다.");});
.dblclick() 자바스크립트의 "dblclick" 이벤트 핸들러를 연결되고, 해당 요소에 "dblclick" 이벤트가 발생되었을 때 설정한 함수가 실행된다. $("button").dblclick(function() {$("div").text("더블 클릭이 되었습니다.");});
.hover() 자바스크립트의 "mouseenter"와 "mouseleave" 이벤트를 하나의 이벤트 핸들러와 연결되고, 해당 요소에 "mouseenter"와 "mouseleave" 이벤트가 발생되었을 때 설정한 함수가 실행된다. $("button").hover(function() {
$("#text").text("마우스가 올라왔습니다.");
}, function(){
$("#text").text("마우스가 빠져나갔습니다.");
});
.mousedown() 자바스크립트의 "mousedown" 이벤트 핸들러를 연결되고, 해당 요소에 "mousedown" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.mouseenter() 해당 요소 위로 마우스가 진입할 때 발생하는 이벤트가 이벤트 핸들러에 연결되고, 해당 요소에 마우스 진입 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.mouseleave() 해당 요소에서 마우스가 빠져나갈 때 발생하는 이벤트와 이벤트 핸들러에 연결되고, 해당 요소에 마우스가 빠져나가는 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.mousemove() 자바스크립트의 "mousemove" 이벤트와 이벤트 핸들러를 연결하거나, 해당 요소에 "mousemove" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.mouseout() 자바스크립트의 "mouseout" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "mouseout" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.mouseover() 자바스크립트의 "mouseover" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "mouseover" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.mouseup() 자바스크립트의 "mouseup" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "mouseup" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
키보드 이벤트와 관련된 메소드
.keydown() 자바스크립트의 "keydown" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "keydown" 이벤트가 발생되었을 때 설정한 함수가 실행된다. var i = 0;
$("input").keypress(function() {$("#text").text((++i) + "번 키보드가 눌렸습니다.");});
$("input").focusin(function() {$(this).css("background-color", "yellow");});
$("input").focusout(function() {$(this).css("background-color", "white");});
.keyup() 자바스크립트의 "keyup" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "keyup" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.keypress() 자바스크립트의 "keypress" 이벤트와 이벤트 핸들러를 연결하거나, 해당 요소에 "keypress" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
입력 양식 이벤트와 관련된 메소드
.blur() 자바스크립트의 "blur" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "blur" 이벤트를 발생시킴.
.change() 자바스크립트의 "change" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "change" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.select() 자바스크립트의 "select" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "select" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.submit() 자바스크립트의 "submit" 이벤트가 이벤트 핸들러를 연결되고 해당 요소에 "submit" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.focus() 자바스크립트의 "focus" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "focus" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.focusin() "focusin" 이벤트가 이벤트 핸들러를 연결되고, 해당 요소에 "focusin" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
.focusout() "focusout" 이벤트와 이벤트 핸들러를 연결하거나, 해당 요소에 "focusout" 이벤트가 발생되었을 때 설정한 함수가 실행된다.
8. 입력 요소의 제어
라디오 버튼(Radio button) radio selector jQuery( ":radio" )
체크된 radio value값 가져오기 var val = $(':radio[name="{{name}}"]:checked').val();
radio 값 체크하기 $(':radio[name={{name}}]:input[value={{value}}]').attr("checked", true);
선택 박스(Select box) 옵션 요소(option element)의 구조 <option value="{옵션 값}">{옵션 내용}</option>
선택된 옵션 값(value) 읽기 $("#{{id}} option:selected").val();
$("select[name=name]").val();
선택된 옵션 내용 읽기 $("#{{id}} option:selected").text()
체크 박스(Checkbox) id가 동일한 체크박스에 대하여 선택되어 있는지 확인 : true / false 반환 $("#chkBox").is(":checked");
$("input:checkbox[id='chkBox']").is(":checked");
$("#chkBox").prop("checked");
체크박스 갯수 가져오기 $("#chkBox:checked").length; //선택된 체크박스 갯수 구하기
$("#chkBox").length; //전체 체크박스 갯수 구하기
체크박스 전체 선택하기 / 해제하기 $("#chkBox").prop('checked', true); //전체 선택하기
$("#chkBox").attr('checked', true); //전체 선택하기
$("#chkBox").prop('checked', false); //전체 해제하기
$("#chkBox").attr('checked', false); //전체 해제하기
체크된 체크박스 value 가져오기 $('#chkBox:checked').each(function() {alert($(this).val());});
체크박스 클릭시 이벤트 주기 $("#chkBox").on("click", function() {alert('1');});
9. 이펙트(effect) 효과
요소의 표시와 숨김
.hide() 선택한 요소를 사라지게 한다. $("div").hide();
$("div").hide("fast");
$("div").hide("slow");
$("div").hide(1000);
.show() 선택한 요소를 나타나게 한다. $("div").show();
$("div").show("fast");
$("div").show("slow");
$("div").show(1000);
.toggle() 선택한 요소에 .show() 메소드와 .hide() 메소드를 번갈아가며 적용한다. $("div").toggle();
페이드 효과
.fadeIn() 선택한 요소의 CSS opacity 속성값을 높여가며 요소를 나타지게 한다. $("div").fadeIn();
$("div").fadeIn("fast");
$("div").fadeIn("slow");
$("div").fadeIn(1000);
.fadeOut() 선택한 요소의 CSS opacity 속성값을 높여가며 요소를 사라지게 한다. $("div").fadeOut();
$("div").fadeOut("fast");
$("div").fadeOut("slow");
$("div").fadeOut(1000);
.fadeToggle() 선택한 요소에 fadeIn() 메소드와 fadeOut() 메소드를 번갈아가며 적용한다. $("div").fadeToggle();
.fadeTo() 페이드 효과에서 사용하는 opacity 속성값을 직접 설정한다. $("#first").fadeTo(1000, 0.2);
$("#second").fadeTo(1000, 0.5);
$("#third").fadeTo(1000, 0.8);
슬라이드 효과
.slideUp() 선택한 요소의 CSS height 속성값을 높여가며 사라지게 한다. // 인스를 지정하지 않으면 400(0.4초) 동안 올라가면서 사라진다.
$("#divBox1").slideUp();
// id가 "divBox2"인 요소를 0.5초 동안 올라가면서 사라지게 한다.
("#divBox2").slideUp(500);
$("#divBox3").slideUp("fast");
.slideDown() 선택한 요소의 CSS height 속성값을 낮춰가며 나타나게 한다. // 인스를 지정하지 않으면 0.4초(400) 동안 내려오면서 나타나게 한다.
$("#divBox1").slideDown();
// id가 "divBox2"인 요소를 0.5초 동안 내려오면서 나타나게 한다.
$("#divBox2").slideDown(500);
$("#divBox3").slideDown("fast");
.slideToggle() 선택한 요소에 .slideUp() 메소드와 .slideDown() 메소드를 번갈아가며 적용한다. $("#divBox1").slideToggle();
$("#divBox2").slideToggle(500); // id가 "divBox2"인 요소를 0.5초 동안 올라가면서 사라지거나 내려오면서 나타나게 한다.
$("#divBox3").slideToggle("fast"); // id가 "divBox3"인 요소를 빠르게 올라가면서 사라지거나 내려오면서 나타나게 한다.
애니메이션 효과
.animate() $(선택자).animate(스타일 [,지속시간] [,시간당속도함수] [,콜백 함수]);

스타일 : 필수이며, 이펙트 효과를 구성할 CSS 스타일 속성을 정의한다.
지속 시간 : 이펙트 효과가 지속될 시간을 전달한다.
시간당 속도 함수(easing function): 이펙트 효과의 시간당 속도를 전달한다.
콜백 함수: 이펙트 효과의 동작이 완료된 후에 실행할 함수를 정의한다.
$("div").animate({width:"200px",height:"200px",opacity:0.5},1000,function() {
$("#text").text("애니메이션 효과 실행이 완료되었습니다.");
});
.animate() 메소드 .animate() 메소드 - 사용할 수 있는 CSS 속성 backgroundPositionX, backgroundPositionY, borderWidth, borderBottomWidth, borderLeftWidth, borderRightWidth, borderTopWidth, borderSpacing, margin, marginBottom, marginLeft, marginRight, marginTop, outlineWidth, padding, paddingBottom, paddingLeft, paddingRight, paddingTop, height, width, maxHeight, maxWidth, minHeight, minWidth, fontSize, bottom, left, right, top letterSpacing, wordSpacing, lineHeight, textIndent
.animate() 메소드 - 미리 정의된 값 $("div").animate({width: "toggle",height: "toggle",}, 1000);
.animate() 메소드 - 시간당 속도 함수 $(".bar").stop().animate({width: "400px"}, 2000, "linear");
// CSS width 프로퍼티의 값을 "400px"로 설정한다.
// 시간당 속도 함수를 "linear"으로 설정한다.
$(".bar").stop().animate({width: "1px"}, 2000, "swing");
// CSS width 프로퍼티의 값을 "1px"로 설정함
// 시간당 속도 함수를 "swing"으로 설정
이펙트 효과의 제어
.delay() 실행 중인 큐 안에서 연속적으로 실행되는 이펙트 효과 사이의 지연 시간을 설정한다. $("div.first").slideUp(300).fadeIn(400);
$("div.second").slideUp(300).delay(500).fadeIn(400);
$("div.third").slideUp(300).delay(1000).fadeIn(400);
.stop() 선택한 요소에서 실행 중인 모든 이펙트 효과를 즉시 중지시킨다. $("button#start").on("click", function() {$("div").animate({width: 300, height: 300}, 3000);});
$("button#stop").on("click", function() {$("div").stop();});
.finish() 선택한 요소에서 실행 중인 모든 이펙트 효과를 즉시 중지시키고, 선택한 요소가 포함된 큐까지 제거하여 모든 이펙트 효과를 전부 종료시킨다. $("button#start").on("click", function() {$("div").animate({width: 300, height: 300}, 3000);});
$("button#finish").on("click", function() {$("div").finish();});
.delay()와 .finish()의 차이점
.stop() 메소드와 .finish() 메소드는 실행 중인 이펙트 효과를 멈춘다는 점이 같다. 차이점은 .stop() 메소드는 일시적으로 중지를 시키는 반면에 .finish() 메소드는 중지가 아닌 아예 종료시킨다는 점이 다르다.
즉, .stop() 메소드로 중지를 시키면 다시 재개할 수 있지만 .finish() 메소드는 다시 재개할 수 없고 처음부터 다시 실행을 시켜야 한다.
jQuery.fx 객체 프로퍼티
jQeury.fx.speeds 밀리초에 해당하는 "slow", "fast" 등의 값을 가지고 이펙트 효과의 속도를 나타낸다.
jQuery.fx 객체의 speeds 프로퍼티는 "slow", "normal", "fast" 값을 가지고 이펙트 효과의 속도를 나타낸다.
fast : 200밀리초(milisecond),normal : 400밀리초(milisecond),slow : 600밀리초(milisecond)
$(".box").toggle("slow");
jQuery.fx.speeds.slow = 100;
jQuery.fx.speeds.slow = 1000;
jQeury.fx.interval 이펙트 효과가 보여지는 동안의 초당 프레임 수를 나타낸다. $(".box").toggle(3000);
jQuery.fx.interval = 1000;
jQuery.fx.interval = 13;
jQeury.fx.off 모든 이펙트 효과를 사용할 수 없도록 비활성화시킨다. $("#toggleBtn").on("click", function() {$("#divBox").slideToggle(1000);});
// id가 "divBox"인 요소를 1초에 걸쳐 올라가면서 사라지거나 내려오면서 나타나게 한다.
$("#forbidBtn").on("click", function() {jQuery.fx.off = true;});
// jQuery.fx 객체의 off 프로퍼티를 true로 설정한다.
10. Ajax 사용
Ajax란? Ajax란 Asynchronous JavaScript and XML을 의미한다.
Ajax는 프로그램 언어가 아니다.
Ajax는 JavaScript와 XML을 이용한 비동기적 정보 교환 기법이다.
Ajax는 웹 페이지 전체를 다시 로딩하지 않고도, 웹 페이지의 일부분만을 갱신할 수 있게 해준다.
Ajax는 백그라운드 영역에서 서버와 데이터를 교환하여 웹 페이지에 표시 및 데이터를 로딩해 준다.
Ajax 프레임워크 Prototype 널리 알려져 있는 AJAX 프레임워크
script.aculo.us Prototype을 기반으로 하는 여러 인터페이스 제공
jQuery prototype만큼 많이 사용되는 AJAX 프레임워크
jQuery UI jQuery을 기반으로 하는 여러 인터페이스 제공
dojo 다양한 화면효과, 위젯등을 제공
Google Web Toolkit 구글에서 배포중인 AJAX 프레임워크
ASP.NET AJAX MS에서 공식 개발된 ASP.NET 지원용 AJAX 프레임워크
YUI Yahoo User Interface
Ajax : HTTP 요청 메소드
GET 메소드 캐시화(cached) 캐시될 수 있다.
브라우저 히스토리 히스토리에 쿼리 문자열이 기록됨.
데이터 길이 데이터의 길이가 URL 주소의 길이 이내로 제한됨. (익스플로러에서 URL 주소가 가질 수 있는 최대 길이는 2,083자이며, 이 중에서 순수 경로 길이는 2,048자까지만 허용됨)
데이터 타입 오직 ASCII 문자 타입의 데이터만 전송할 수 있다.
보안성 데이터가 URL 주소에 포함되어 전송되므로, 아무나 볼 수 있어 보안에 매우 취약한다.
POST 메소드 캐시화(cached) 캐시되지 않는다.
브라우저 히스토리 히스토리에 기록되지 않는다.
데이터 길이 제한 없다.
데이터 타입 제한 없다.
보안성 브라우저 히스토리에도 기록되지 않고, 데이터가 따로 전송되므로, GET 방식보다 보안성이 높다.
Ajax 메소드
$.ajax() 비동기식 Ajax를 이용하여 HTTP 요청을 전송한다.
jQuery.ajax( settings ) settings : key/value 쌍으로 된 Ajax 요청 Set ( optional )
url : 요청 URL (클라이언트가 HTTP 요청을 보낼 서버의 주소)
data : 요청과 함께 서버에 보내는 string 또는 json
success(data, textStatus, jqXHR) : 요청이 성공일때 실행되는 callback 함수
dataType : 서버에서 내려온 data 형식. ( default : xml, json, script, text, html )
$.ajax({
url: "/rest/1/pages/245", // 클라이언트가 HTTP 요청을 보낼 서버의 URL 주소
data: { name: "홍길동" }, // HTTP 요청과 함께 서버로 보낼 데이터
method: "GET", // HTTP 요청 메소드(GET, POST 등)
dataType: "json" // 서버에서 보내줄 데이터의 타입
}) // HTTP 요청이 성공하면 요청한 데이터가 done() 메소드로 전달됨.
.done(function(json) {
$("<h1>").text(json.title).appendTo("body");$("<div class=\"content\">").html(json.html).appendTo("body");
}) // HTTP 요청이 실패하면 오류와 상태에 관한 정보가 fail() 메소드로 전달됨.
.fail(function(xhr, status, errorThrown) {
$("#text").html("오류가 발생했다.").append("오류명: " + errorThrown + "").append("상태: " + status);})
.always(function(xhr, status) {$("#text").html("요청이 완료되었습니다!");});
done : HTTP 요청이 성공하면 요청한 데이터가 done() 메소드로 전달된다.
fail : HTTP 요청이 실패하면 오류와 상태에 관한 정보가 fail() 메소드로 전달된다.
always : HTTP 요청이 성공하거나 실패하는 것에 상관없이 언제나 always() 메소드가 실행된다.
var jqxhr = $.ajax("/rest/1/pages/245")
.done(function() {alert("성공");})
.fail(function() {alert("실패");})
.always(function() {alert("완료");});
jqxhr.always(function() {alert("두번째 성공");});
$.ajaxSetup() 공통적인 기본 ajax 요청을 미리 설정하는데 사용한다.
jQuery.ajaxSetup( options )
optional : default Ajax 요청의 설정값 ( key/value )
$.ajaxSetup({url: '/api/users',global: false,type: "POST"});
$.ajax({data: {'name': 'Dan'}}); // url not set here; uses '/api/users'
$.ajax({data: {'name': 'John'}}); // url not set here; uses '/api/users'
$.get() 전달받은 주소로 GET 방식의 HTTP 요청을 전송한다.
jQuery.get( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )
url : 요청 URL (클라이언트가 HTTP 요청을 보낼 서버의 주소)
data : 요청과 함께 서버에 보내는 string 또는 map
success(data,textStatus,jqXHR) : 요청이 성공일때 실행되는 callback 함수
dataType : 서버에서 내려온 data 형식. ( default : xml,json,script,text,html )
$.ajax({type: "GET",url: url, data: data, success: success, dataType: dataType});
// GET 방식으로 서버에 HTTP Request를 보냄.
$.get("/examples/media/request_ajax.php",
{ species: "고양이", name: "나비", age: 3, }, // 서버가 필요한 정보를 같이 보냄.
function(data, status) {$("#text").html(data + status);}
// 전송받은 데이터와 전송 성공 여부를 보여줌.
);});
$.post() 전달받은 주소로 POST 방식의 HTTP 요청을 전송한다.
$.post(URL주소[,데이터][,콜백함수]);
URL 주소 : 클라이언트가 HTTP 요청을 보낼 서버의 주소이다.
데이터 : HTTP 요청과 함께 서버로 보낼 데이터를 전달한다.
콜백 함수 : HTTP 요청이 성공했을 때 실행할 함수를 정의한다.
$.ajax({type: "POST",url: url, data: data, success: success, dataType: dataType });
// POST 방식으로 서버에 HTTP Request를 보냄.
$.post("/examples/media/request_ajax.php",
{ name: "홍길동", grade: "A" }, // 서버가 필요한 정보를 같이 보냄.
function(data, status) {$("#text").html(data + status);
// 전송받은 데이터와 전송 성공 여부를 보여줌.
});
$.getScript() 웹 페이지에 스크립트를 추가한다.
jQuery.getJSON( url [, data] [, success(data, textStatus, jqXHR)] )
url : 요청 Url
data : 요청과 함께 서버에 보내는 string 또는 map
success(data,textStatus,jqXHR) : 요청이 성공일때 실행되는 callback 함수
$.ajax({url: url, dataType: 'json', data: data, success: callback });
$.getJSON("example?foo=1",
{tags: "mount rainier",tagmode: "any",format: "json"},
function(data) { $.each(data.items, function(i,item) {
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 )return false;});
});
$.getJSON() 전달받은 주소로 GET 방식의 HTTP 요청을 전송하여, 응답으로 JSON 파일을 전송받는다.
.load() 서버에서 데이터를 읽은 후, 읽어 들인 HTML 코드를 선택한 요소에 배치한다.
.load( url [, data] [, complete(responseText, textStatus, XMLHttpRequest)] )
url : 요청 URL
data : 요청과 함께 서버에 보내는 string 또는 map
complete(responseText, textStatus, XMLHttpRequest) : 요청이 완료될때 실행되는 callback 함수
$('#result').load('ajax/test.html'); // Html Content 로딩
// Html Content 로딩 후 메시지
$('#result').load('ajax/test.html', function() {alert('Load was performed.');});
// Html Content #container Target 로딩
$('#result').load('ajax/test.html #container');
// array parameter 전달 후 Html Content 로딩
$("#objectID").load("test.asp", { 'choices[]': ["Jon", "Susan"] } );

$(function() {$("#btnRequest").on("click", function() {
// URL 주소에 존재하는 HTML 코드에서 <li>요소를 읽은 후에 id가 "list"인 요소에 배치한다.
$("#list").load("/examples.html li");});
});
Ajax와 Form 요소
직렬화(serialization) .serialize() 메소드는 HTML form 요소를 통해 입력된 데이터를 쿼리 문자열로 변환한다.
.serializeArray() 메소드는 serialize() 메소드와는 달리 입력된 데이터를 문자열이 아닌 배열 객체로 변환한다.
function showValues() {$("#text").text($("form").serialize());}
$("input[type='text']").on("keydown", showValues);
$("input[type='checkbox'], input[type='radio']").on("click", showValues);
$("select").on("change", showValues);
11. 유틸리티 메소드
타입 검사 메소드
$.type() 전달받은 값을 자바스크립트의 내부 클래스와 비교하여, 더욱 정확한 타입 검사를 제공한다. $("#text")
.append($.type(undefined)) // undefined
.append($.type()) // undefined
.append($.type(window.notDefined)) // undefined
.append($.type(null)) // null
.append($.type(true)) // boolean
.append($.type(new Boolean())) // boolean
.append($.type(3)) // number
.append($.type(new Number(3))) // number
.append($.type("test")) // string
.append($.type(new String("test"))) // string
.append($.type(function(){})) // function
.append($.type([])) // array
.append($.type(new Array())) // array
.append($.type(new Date())) // date
.append($.type(new Error())) // error - as of jQuery 1.9
.append($.type(Symbol())) // symbol - as of jQuery 1.9
.append($.type(Object(Symbol()))) // symbol - as of jQuery 1.12
.append($.type(/test/)); // regexp
$.isArray() 전달받은 값이 배열인지 아닌지를 검사한다. $("#text")
.append($.isArray([])) // true
.append($.isArray(10)) // false
.append($.isFunction(new Function())) // true
.append($.isFunction("문자열")) // false
.append($.isNumeric(10)) // true
.append($.isNumeric([10])) // false
.append($.isEmptyObject({})) // true
.append($.isEmptyObject({name: "text"})) // false
.append($.isPlainObject(new Object())) // true
.append($.isPlainObject(new Object("text"))) // false
.append($.isWindow(window)) // true
.append($.isXMLDoc(document)); // false
$.isFunction() 전달받은 값이 자바스크립트 함수 객체인지 아닌지를 검사한다.
$.isNumeric() 전달받은 값이 자바스크립트 Number 객체인지 아닌지를 검사한다.
$.isEmptyObject() 전달받은 값이 비어있는 객체(열거할 수 있는 프로퍼티를 가지고 있지 않은 객체)인지 아닌지를 검사한다.
$.isPlainObject() 전달받은 값이 기본 객체(plain object)인지 아닌지를 검사한다.
$.isWindow() 전달받은 값이 자바스크립트 Window 객체인지 아닌지를 검사한다.
$.isXMLDoc() 전달받은 DOM 노드가 XML 문서에 포함되어 있거나, XML 문서인지 아닌지를 검사한다.
기타 유틸리티
$.each() $.each() 메소드는 객체나 배열에서 모두 사용할 수 있는 범용적인 반복 함수(iterator function)이다. var arr = ["a", "b", "c"];
$.each(arr, function(index, value) {$("#text").append("index=" + index + ", value=" + value);}); var site = {"name" : "devkuma","url" : "www.devkuma.com"};
$.each(site, function(key, value) {$("#text").append("key=" + key + ", value=" + value);});
$.extend() $.extend() 메소드는 두 개 이상의 객체의 모든 프로퍼티를 하나의 객체로 병합한다. var obj1 = {"name" : "google",};
var obj2 = {"url" : "www.google.com","adc" : "def"};
var obj3 = {"name" : "devkuma","url" : "www.devkuma.com","book" : "jQuery"};
$.extend(obj1, obj2, obj3);
$.each(obj1, function(key, value) {$("#text").append("key=" + key + ", value=" + value);});
$.trim() $.trim() 메소드는 문자열의 시작과 끝에 위치한 공백 문자(whitespace)를 제거한다. var text = " 안녕하세요. 데브쿠마입니다. ";
$("#text").append("trim 전, '" + text);
$("#text").append("trim 후, '" + $.trim(text) + "'");
범용 유틸리티 메소드
$.contains() DOM 요소가 다른 DOM 요소의 자손(descendant) 요소인지 아닌지를 검사한다.
$.unique() DOM 요소 배열을 정렬하고, 중복된 요소를 제거한다.
$.each() 객체나 배열에서 모두 사용할 수 있는 범용적인 반복 함수(iterator function)이다.
$.data() 선택한 요소와 관련된 데이터를 저장하거나, 저장된 데이터값을 읽어옴.
$.removeData() 저장된 데이터를 제거한다.
$.queue() 선택한 요소의 실행될 함수 큐(queue)를 참조하거나 조작한다.
$.dequeue() 선택한 요소의 함수 큐에서 다음 함수를 실행한다.
$.extend() 두 개 이상의 객체의 콘텐츠를 하나의 객체로 병합한다.
$.noop() 빈 함수를 의미한다.
$.proxy() 함수를 전달받은 후, 특정 콘텍스트(context)를 가지는 새로운 함수를 반환한다.
$.now() 현재 시각을 나타내는 숫자를 반환한다.
$.trim() 문자열의 시작과 끝에 위치한 공백 문자(whitespace)를 제거한다.
배열에 관련된 메소드
$.makeArray() 배열과 같은 객체(array-like object)를 자바스크립트 Array 객체로 변환한다.
$.inArray() 전달받은 값을 배열에서 검색한 후, 값이 일치하는 요소의 인덱스를 반환한다. 만약 일치하는 요소가 없으면 -1을 반환한다. var arr = ["devkuma", 123, "abc"];
$("#text").append("devkuma : " + $.inArray("devkuma", arr));
$("#text").append("123 : " + $.inArray(123, arr));
$("#text").append("abc : " + $.inArray("abc", arr));
$("#text").append("def : " + $.inArray("def", arr));
$.map() 배열이나 객체의 모든 요소를 새로운 배열로 변환한다.
$.merge() 두 개의 배열의 콘텐츠를 하나의 배열로 병합한다.
$.grep() 배열에서 필터 함수를 만족하는 요소를 검색한다. 원본 배열은 변경되지 않는다.
파싱에 관련된 메소드
$.parseHTML() DOM 노드 배열을 문자열로 파싱한다.
$.parseJSON() 잘 구성된(well-formed) JSON 문자열을 전달받은 후, 자바스크립트 객체로 반환한다.
$.parseXML() XML 문서를 문자열로 파싱한다.
jQuery 노드 찾기 (요소 탐색)
jQuery 노드 찾기 (요소 탐색)
jQuery 셀렉터
$("*") //모든 엘리먼트 선택
$("div") //Tag 이름으로 노드 찾기
$("#idName") //id 이름으로 노드 찾기
$(".className") //class 이름으로 노드 찾기
$("ul.className") //ul 엘리먼트 중 class 이름이 className 인 엘리먼트 선택
$("ul, div") //ul 및 div 태그 선택
$("div img") //div 의 자손노드 중 Tag이름이 img인 모든 엘리먼트 선택
$("ul .className") //ul의 자손노드 중 class 이름이 className 인 엘리먼트 선택
$("ul>li") //ul Tag 의 바로 아래 자식노드 중 li Tag 인 엘리먼트 선택
$("prev+next")
$("prev~siblings")

필터
:not(selector) //셀렉터와 일치하지 않는 요소들 리턴
:first //선택된 요소 중 첫 번째 요소
:last //선택된 요소 중 마지막 요소
:even //선택된 요소 중 짝수 인덱스 요소들
:odd //선택된 요소 중 홀수 인덱스 요소들
:eq(index) //선택된 요소 중 지정된 index 번호를 가진 요소
:gt(index) //선택된 요소 중 지정된 index 번호보다 큰 인덱스 요소들
:lt(index) //선택된 요소 중 지정된 index 번호보다 작은 인덱스 요소들
:header //<h1> ~ <h6> 요소들
:animated //애니메이션이 적용된 모든 요소들
:focus //현재 포커스를 가지고 있는 요소
:contains("text") //"text"를 가지고 있는 요소들
:empty	 //자식 요소가 없는 모든 요소들
:parent	 //자식 요소를 가지고 있는 모든 요소들
:has(selector) //selector에 부합하는 요소를 하나 이상 가지고 있는 요소들
:hidden	 //화면에서 숨겨진 모든 요소들
:visible //공간을 차지하고 있는 모든 요소들
:nth-child(expr) //expr 순번의 자식 요소
:first-child //첫번째 자식 요소
:last-child //마지막 자식 요소
:only-child //요소의 자식 요소가 하나뿐인 요소

// 예시
$('div:not("#summary")') //#summary를 제외한 나머지 div 태그들을 선택
$("li").eq(3)	 //찾은 노드 중 4 번째 노드에 접근하기
$("div:has(p)")	 //<p> 요소를 가진 모든 <div> 요소들
$("ul li:nth-child(2)") //두 번째 <li> 요소

속성옵션 필터
$("[attr]")	 //attr 속성을 가진 모든 요소들
$("el[attr]") //속성 attr 를 포함한 모든 el 노드 찾기
$("el[attr=val]") //속성 attr 의 값이 val 인 모든 el 노드 찾기
$("el[attr!=val]") //속성 attr 의 값이 val이 아닌 모든 el 노드 찾기
$("el[attr^=val]") //속성 attr 의 값이 val 로 시작하는 모든 el 노드 찾기
$("el[attr$=val]") //속성 attr 의 값이 val 로 끝나는 모든 el 노드 찾기
$("el[attr*=val]") //속성 attr 의 값이 val 을 포함하고 있는 모든 el 노드 찾기
$("[attribute|='value']") //속성값이 value값과
일치하거나 value- 으로 시작하는 요소들
$("[attr1][attr2]") //지정된 속성중 하나를 가진 모든 요소들

// 예시
$("div[class*=test]") //class의 값이 test를 포함하고 있는 모든 div 노드

폼 요소
// 폼 요소의 값 조회하기
// <input>,<textarea>,<select> 요소의 값을 알아낸다.
.val()

/** 폼 필터
:input, :text, :password, :radio, :checkbox, :submit,
:image, :reset, :button, :file, :selected
:enabled, :disabled, :checked
*/

노드 Traversing
// DOM 객체에 직접 접근하기
$el.get(index)
var li_1 = $("ul li").get(1);

// 선택한 객체집합 내의 정보를 탐색, 조작하기
$elements.each(function(index, element) {});

// 예시
$("li").each(function (index){
  var ids = this.id; //그 노드의 id 속성에 접근할 때
  var $target = $(this); //그 요소에 jQuery 메서드를 사용할 때
  $target.append("<em class='order'>" + ids + "</em>");
  // or
  var $target = $("li").eq(index);
});

// 현재 노드들의 조건 검사
$("li").is(".item")
//
$li.each(function() {
  var $this = $(this);
  if ($this.is(".item")) { // <li> 요소의 class값이 item인지 확인한다.
    // code...
  }
});

// 노드가 위치한 index 값 구하기
$(this).index()
$list.index($obj)
$list.index(DOM)

// 자식노드 탐색
$("ul").children() //모든 자식 노드 찾기
$("ul").children(".select") //특정 자식 노드 찾기

$("ul").children().first() //첫번째 자식노드 찾기
$("ul").children(":first") //첫번째 자식노드 찾기
$("ul").children().eq(0) //첫번째 자식노드 찾기

$("ul").children().last() //마지막 자식노드 찾기
$("ul").children(":last") //마지막 자식노드 찾기
$("ul").children().eq(-1) //마지막 자식노드 찾기

$("ul").children().eq(index) //n번째 자식노드 찾기

// 부모노드 탐색
$("ul.menu").parent() //부모노드 찾기
$("ul.menu").parents() //조상노드 찾기
$("ul.menu").parents(".header") //특정 조상노드 찾기

// 형제노드 탐색
$("li.select").prev()           // 특정 노드의 이전 형제노드 찾기
$("li.select").prevAll()        // 특정 노드의 모든 이전 형제노드 찾기
$("li.select").prevAll("#info") // 이전 형제노드 중 #info를 가진 노드 찾기
$("li.select").next()           // 특정 노드의 다음 형제노드 찾기
$("li.select").nextAll()        // 특정 노드의 모든 다음 형제노드 찾기
$("li.select").nextAll("#info") //다음 형제노드 중 #info를 가진 노드 찾기
$("li.select").siblings('.txt') // 형제 노드를 선택

요소 필터링
// 찾은 노드 중에서 특정 노드만 필터링 하기
$("li").filter(".select")
$liList.filter(".select").css('text-align', 'center');

// 현재 노드의 자손노드 중 특정 노드 찾기
$("ul").find("li.select")
$("#content").find('.test1').css('text-align', 'right');

// index 번호에 해당하는 요소를 리턴
$("li").eq(index)
jQuery 노드 수정 (요소 변경)
노드 Manipulation
// 신규노드 생성
var $li = $("<li>new menu</li>");

// 신규노드를 첫번째 자식노드로 추가
$("ul.menu").prepend($li);
$li.prependTo("ul.menu");

// 신규노드를 마지막 자식노드로 추가
$("ul.menu").append($li);
$li.appendTo("ul.menu");

// 신규노드를 특정노드의 이전 위치에 추가
$li.insertBefore("li.select");
$("li.select").before("$li");

// 신규노드를 특정노드의 다음 위치에 추가
$li.insertAfter("li.select");
$("li.select").after("$li");

// 특정노드를 첫번째 자식노드로 이동
$("ul.menu").prepend($(this));
$(this).prependTo("ul.menu");

// 특정노드를 마지막 자식노드로 이동
$("ul.menu").append($(this));
$(this).appendTo("ul.menu");

// 특정노드를 특정노드의 이전 노드로 이동
$(this).insertBefore("li.select");
$("li.select").before($(this));

// 특정노드를 특정노드의 다음 노드로 이동
$(this).insertAfter("li.select");
$("li.select").after($(this));

// 특정 노드의 자손노드 내용을 문자열로 읽기
$("ul").html()
// 특정 노드의 텍스트노드 내용을 문자열로 읽기
$("li").text()
// 일치하는 모든 요소에 새로운 콘텐츠를 추가한다.
리턴: 교체된 요소들
.replaceWith()
// 노드 내용 수정하기
$("ul").html("<li>new text</li>")
$("li").text("new text")

// 특정 노드 삭제
$("ul.menu li.select").remove();

// 모든 자식노드 삭제
$("ul").children().remove();
$("ul").html("");

// Ctrl + X
$("ul").detach()
// Ctrl + C
$("ul").clone();

/* 예시 */
var $ulMenu = $("ul.menu");
$("ul.menu li").click(function() {
    $ulMenu.prepend($(this));
});
// 클릭한 요소 삭제
$("ul.menu li").click(function() {
    $(this).remove();
});
// 각 요소의 텍스트에 <em>태그 추가하기
$("li.hot").html(function() {
  return "<em>" + $(this).text() + "</em>";
});

속성 조작하기 (attribute & style)
// 스타일값 구하기
.css("font-size");
// 여러 스타일값 구하기
.css(["font-size", "color"]);

// 스타일값 설정하기
.css("color", "red");
.css({ left: 50, top: 50 });

// 선택한 대상에 클래스 추가
.addClass("select info");

// 선택한 대상의 모든 클래스 삭제
.removeClass();
// 선택한 대상의 특정 클래스 삭제
.removeClass("select info");

// 선택한 대상에 특정 클래스 추가/제거 토글
.toggleClass("select");

// 선택한 대상의 특정 속성값 구하기
.attr("href");
// 선택한 대상의 모든 data- 속성값 구하기
.data();
// 선택한 대상의 특정 data- 속성값 구하기
.data("name");

// 선택한 대상의 속성값 설정/변경하기
.attr("src", "./images/02.jpg");
// 선택한 대상의 data- 속성값 설정/변경하기
.data("tel", "1234");
4.응용
브라우저 크기에 따라 사이즈 자동 조절되는 이미지 div 배너
https://kindkimyoung.tistory.com/25

1. 3*2 구조의 이미지 배너.
2. 브라우저 크기에 따라 배열과 정렬을 유지하며 이미지가 잘리지 않고 자동으로 축소되고 확대될 것.
3. 이미지 위에 마우스 오버시 제목, 요약 설명, 보러 가기 버튼, 이미지 오파시티가 동시에 나타나기.

{outer-div} : width:100%;height:auto (width값 기준 높이값 자동)
{inner-div} : width:30%;height:30vw (이미지의 비율이 1:1이기 때문에 inner-div의 width 값 기준 동일한 값으로 30vw)
{inner-hover-div} : width,height: 100% (트랜지션을 위해)

{outer-div}
{inner-div}
{inner-hover-div}
{font-div span}
{font-div span}
{click-div span a}
{inner-div}
{inner-div}
{inner-div}
{inner-div}
{inner-div}
.outer-div{
 width:100%;
 height:auto;
 background:#212121;
 text-align:center;
 padding-top: 10%;
 padding-bottom: 10%;
 margin:0;
 font-size:0;
}

.inner-div{
 display:inline-block;
 width:30%;
 height:30vw;
 margin:0;
}

.inner-hover{
 width:100%;
 height:100%;
 transition-property: background-color;
 transition-duration: 1s;
 transition-timing-function: ease-out;
 transition-delay: 50ms
}
<div class="outer-div">

<div class="inner-div" style="background:url(.jpg) no-repeat center/cover;">
 <div class="inner-hover">
  <div class="font-div"><span class="name-span">{font-div span}</span></div>
  <div class="font-div"><span class="inner-span">{font-div span}</span></div>
  <div class="click-div"><span class="inner-span-view"><a href="#">{click-div span}</a></span></div>
 </div>
</div>

<div class="inner-div" style="background:url(.jpg) no-repeat center/cover;">
 <div class="inner-hover">
  <div class="font-div"><span class="name-span">{font-div span}</span></div>
  <div class="font-div"><span class="inner-span">{font-div span}</span></div>
  <div class="click-div"><span class="inner-span-view"><a href="#">{click-div span}</a></span></div>
 </div>
</div>

<div class="inner-div" style="background:url(.jpg) no-repeat center/cover;">
 <div class="inner-hover">
  <div class="font-div"><span class="name-span">{font-div span}</span></div>
  <div class="font-div"><span class="inner-span">{font-div span}</span></div>
  <div class="click-div"><span class="inner-span-view"><a href="#">{click-div span}</a></span></div>
 </div>
</div>

</div>

jQuery를 사용하여 :: before 및 :: after와 같은 CSS 의사 요소 선택 및 조작
http://daplus.net/javascript-jquery%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-before-%EB%B0%8F-after%EC%99%80-%EA%B0%99%EC%9D%80-css-%EC%9D%98%EC%82%AC-%EC%9A%94%EC%86%8C-%EC%84%A0%ED%83%9D-%EB%B0%8F/
1) 소정의 클래스 추가/제거

이 접근 방식에서는 이미 CSS에 다른 :after또는 :before스타일을 사용하여 클래스를 만들었습니다 . 이 "새" 클래스를 나중에 스타일시트에 배치하여 재정의하는지 확인합니다. 그런 다음 jQuery(또는 바닐라 JavaScript)를 사용하여 이 클래스를 쉽게 추가하거나 제거할 수 있습니다.

장점: jQuery로 구현하기 쉽습니다. 한 번에 여러 스타일을 빠르게 변경합니다. 관심사의 분리를 시행합니다(HTML에서 CSS와 JS를 분리)
단점 : CSS는 내용 때문에, 미리 작성해야 :before하거나 :after완전히 동적이지

p:before {
 content: "foo";
}
p.special:before {
 content: "bar";
}
--
$('p').on('click', function() {
    $(this).toggleClass('special');
});
2) 문서의 스타일시트에 직접 새 스타일 추가

JavaScript를 사용하여 :after및 :before스타일을 포함하여 문서 스타일시트에 직접 스타일을 추가할 수 있습니다 . jQuery는 편리한 단축키를 제공하지 않지만 다행히 JS는 그렇게 복잡하지 않습니다.
변형으로 jQuery를 사용하여 문서에 완전히 새로운 스타일시트를 추가할 수도 있지만 필요한 코드는 더 깔끔하지 않습니다.
값을 추가하는 것이 아니라 값을 "조작"하는 것에 대해 이야기 하는 경우 다른 접근 방식을 사용하여 기존 또는 스타일 을 읽을:after:before 수도 있습니다 .
약간 더 짧은 코드를 위해 jQuery document.querySelector('p')를 $('p')[0]사용할 때 로 바꿀 수 있습니다 .

장점: 모든 문자열을 스타일에 동적으로 삽입할 수 있습니다. 단점: 원래 스타일은 변경되지 않고 무시됩니다. 반복적인 (ab) 사용으로 인해 DOM이 임의로 커질 수 있습니다.

var str = "bar";
document.styleSheets[0].addRule('p.special:before','content: "'+str+'";');
---
var str = "bar";
$('').appendTo('head');
---
var str = window.getComputedStyle(document.querySelector('p'),':before')
 .getPropertyValue('content');
3) 다른 DOM 속성 변경

CSS 에서 특정 DOM 속성을 읽는 데 사용할attr() 수도 있습니다 . ( 브라우저가 지원하는 경우 :before, 그것은 지원 attr()뿐만 아니라. ) 이것을 결합하여 content:몇 가지주의 깊게 준비 CSS, 우리는 (그러나 내용 변경 되지 않은 다른 특성, 마진 또는 색상 등)의 :before및 :after동적 :
CSS를 미리 준비할 수 없는 경우 두 번째 기술과 결합할 수 있습니다.

장점: 끝없는 추가 스타일을 만들지 않음 단점: attr CSS에서는 URL 또는 RGB 색상이 아닌 콘텐츠 문자열에만 적용할 수 있습니다.

p:before {
 content: attr(data-before);
 color: red;
 cursor: pointer;
}
---
$('p').on('click', function () {
 $(this).attr('data-before','bar');
});
---
var str = "bar";
document.styleSheets[0].addRule('p:before', 'content: attr(data-before);');
$('p').on('click', function () {
 $(this).attr('data-before', str);
});

의사 요소를 조작하기 위해 사용자 정의 속성(일명 CSS 변수) 에 의존할 수도 있습니다 . 사양 에서 다음을 읽을 수 있습니다 . 사용자 정의 속성은 일반 속성이므로 모든 요소에서 선언할 수 있고 일반 상속 및 캐스케이드 규칙 으로 해결 되며 @media 및 기타 조건부 규칙으로 조건부로 만들 수 있으며 HTML의 스타일 속성 에서 사용할 수 있고 읽거나 설정할 수 있습니다. CSSOM 등을 사용하여 이를 고려하여 아이디어는 요소 내에서 사용자 정의 속성을 정의하는 것이며 의사 요소는 단순히 이를 상속합니다. 따라서 쉽게 수정할 수 있습니다.
1) 인라인 스타일 사용 :
.box:before {
 content:var(--content,"I am a before element");
 color:var(--color, red);
 font-size:25px;
}
---
<div class="box"></div>
<div class="box" style="--color:blue;--content:'I am a blue element'"></div>
<div class="box" style="--color:black"></div>
<div class="box" style="--color:#f0f;--content:'another element'"></div>
2) CSS 및 클래스 사용
.box:before {
  content:var(--content,"I am a before element");
  color:var(--color, red);
  font-size:25px;
}
.blue {
  --color:blue;
  --content:'I am a blue element';
}
.black {
  --color:black;
}
---
<div class="box"></div>
<div class="box black"></div>
<div class="box blue"></div>
3) 자바스크립트 사용
document.querySelectorAll('.box')[0].style.setProperty("--color", "blue");
document.querySelectorAll('.box')[1].style.setProperty("--content", "'I am another element'");
.box:before {
 content:var(--content,"I am a before element");
 color:var(--color, red);
 font-size:25px;
}
<div class="box"></div>
<div class="box"></div>
4) 제이쿼리 사용하기
$('.box').eq(0).css("--color", "blue");
/* the css() function with custom properties works only with a jQuery vesion >= 3.x
 with older version we can use style attribute to set the value. Simply pay
 attention if you already have inline style defined! 
*/
$('.box').eq(1).attr("style","--color:#f0f");
.box:before {
 content:"I am a before element";
 color:var(--color, red);
 font-size:25px;
}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>

복잡한 값과 함께 사용할 수도 있습니다.

.box {
  --c:"content";
  --b:linear-gradient(red,blue);
  --s:20px;
  --p:0 15px;
}

.box:before {
  content: var(--c);
  background:var(--b);
  color:#fff;
  font-size: calc(2 * var(--s) + 5px);
  padding:var(--p);
}
<div class="box"></div>