[html] 최신 웹 개발에 필요한 html5 태그 속성 및 css3 속성
by 한만섭
- HTML
- CSS (Cascading Style Sheets)
- CSS 문법
- 주석
- CSS를 작성하는 방식
- CSS 상속
- Cascading
- CSS Selector
- 속성-정의와 구문
- 길이 단위
- color
- font-size
- box-model
- border
- position
- float
- flex
- z-index
- Less
- less compile
- transition
- transform
- background
- padding
- margin
- margin & padding
- width
- height
- 타이포그래피
- font-family
- ilne-height
- font-weight
- font-style
- font-variant
- font
- vertical-align
- text-align
- text-indent
- text-indent
- text-decoration
- 단어 관련 속성
- display
- visibility
- float
- clear
- position
HTML
태그는 그 의미에 맞춰서 사용해야 한다.
빈태그
<br>
<img src="">
<input type="">
리스트 태그
<ul>
<li>
<ol>
- li
<dl>
<dt>
: 명청<dd>
: 명칭에 대한 정의
테이블 태그
-
<table>
: 표를 나타내는 태그 -
<tr>
: 행을 나타내는 태그 ( 1개 만들면 1행짜리 표 ) -
<th>
: 제목 셀을 나타내는 태그 -
<td>
: 셀을 나타내는 태그 ( 2개 만들면 2열짜리 표 ) -
<thead>
: 표의 제목을 나타내는 태그 -
<tfoot>
: 바닥 행을 그룹화하는 태그 -
<tbody>
: 본문 행을 그룹화하는 태그 -
HTML5.1 ~ 현재(5.2): <tfoot>이 <tbody> 뒤에 위치해야 합니다. <tfoot>의 위치가 <tbody> 앞에 나올 경우 웹 접근성의 키보드의 초점 이동 순서 항목에 문제가 있기 때문에 변경되었습니다.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> </head> <body> <table> <caption>specification value</caption> <thead> <tr> <th rowspan="2">Grade</th> <th rowspan="2">Point</th> <th colspan="2">Strength</th> <th rowspan="2">Percent</th> </tr> <tr> <th>kg/mm</th> <th>lb/in</th> </tr> </thead> <tbody> <tr> <td>Hard</td> <td>0.45</td> <td>56.2</td> <td>1</td> <td>2</td> </tr> <tr> <td>Medium</td> <td>123</td> <td>14</td> <td>14</td> <td>12</td> </tr> </tbody> <tfoot> <tr> <td>Large</td> <td>123</td> <td>12</td> <td>5123</td> <td>123124</td> </tr> </tfoot> </table> </body> </html>
input
- radio
- group 속성으로 radio버튼들을 묶을 수 있음.
- checked속성은 값이 없음
- file
- 파일을 업로드할 수 있도록 해주는 타입
- submit
- Reset
- image
- 이미지를 삽입할 수 있는 타입
src
,alt
를 사용할 수 있음.
select
- option
layout
태그 | 설명 |
---|---|
div | 블록형태 태그 (본문을 감쌀 때 id를 container 로 함.) |
header | 사이트의 가장 머리 태그 |
nav | 네이게이션을 감싸는 태그 |
ul | 리스트 아이템을 감싸는 태그 |
li | 리스트 아이템 태그 |
aside | 사이트 얖옆에 배치될 컨텐츠를 감싸는 태그 |
footer | 사이트의 하단에 배치될 태그 |
HTML 시멘틱 태그 layout
HTML 구조 설계 ( HTML structure design
)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<header>
<h1>Company Name</h1>
<img src="...." alt="logo">
</header>
<section>
<nav>
<ul>
<li>Home</li>
<li>Home</li>
<li>About</li>
<li>Map</li>
</ul>
</nav>
<section>
<button></button>
<div><img src="" alt=""></div>
<div><img src="" alt=""></div>
<div><img src="" alt=""></div>
<button></button>
</section>
<section>
<ul>
<li>
<h3>What we do</h3>
<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto nostrum deserunt, aliquid laboriosam fugiat, eaque vero necessitatibus, magnam officia obcaecati iste. Ipsum fugiat suscipit, magni optio quae architecto laudantium molestias.</div>
</li>
<li>
<h3>What we do</h3>
<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto nostrum deserunt, aliquid laboriosam fugiat, eaque vero necessitatibus, magnam officia obcaecati iste. Ipsum fugiat suscipit, magni optio quae architecto laudantium molestias.</div>
</li>
</ul>
</section>
</section>
<footer><span>Copyright @codesquad</span></footer>
</body>
</html>
Id 와 Class
- id
- class
- 같은 스타일 속성을 부여하고 싶을 때 클래스를 만들고 원하는 태그에 적용시키는 방법
CSS (Cascading Style Sheets)
CSS 문법
- 선택자(selector)
- 속성(property)
- 값(value)
- 선언(declaration)
- 선언부(declaration block)
- 규칙(rule set)
주석
/* */
CSS를 작성하는 방식
- inline
- 태그 안에 적용하며 우선순위가 가장 높음
- 유지보수가 어려움
- internal
html
파일안에 작성하면 새로운 파일을 만들지 않아도 됨.
- external
- 외부
.css
파일을 만들어서<link>
를 사용해서 파일을 로드해서 사용하는 방법 rel
속성을 통해 해당.html
파일과 어떤 관계인지 적어줘야함.rel="stylesheet"
- 외부
CSS 상속
border
, padding
, background
, border
과 같은 배치에 관련된 속성(box Model)은 하위 태그에 상속이 되지 않는다.
color
, font-size
와 같은 색상이나 폰트에 관련된 속성들은 상속이 된다.
Cascading
스타일정보를 기반으로 최종적으로 어떤 스타일을 적용할지 경쟁하는 방식
- Cascading 규칙
- 중요도(
!important
)와 출처 - 구체성
- 선언 순서
- 중요도(
- 사용자 !important 스타일
- 제작자 !important 스타일
- 제작자 스타일
- 사용자 스타일
- 사용자 에이전트 스타일
-
CSS를 작성하는 위치에 따른 방식
-
inline
>internal
>external
-
CSS의 선택자를 적는 방식
아래와 같이 상세하게 적은
red
가 우선순위에 우위를 가짐. 엘리먼트를 구체적으로 적은 것 부터body > span { color : red; } span { color : blue; }
-
id
,class
id
>class
이기 때문에red
로 색상이 적용#testId { color : red; } .testClass{ color : blue; }
-
구체성에 따른 스타일 적용 방식
구체성을 수치로 명시한 것
-
!important
는 가장 우선순위 -
1, 0, 0, 0 : 인라인 스타일
- 0, 1, 0, 0 : 선택자에 있는 모든 id 속성값
- 0, 0, 1, 0 : 선택자에 있는 모든 class 속성값, 기타 속성, 가상 클래스
- 0, 0, 0, 1 : 선택자에 있는 모든 요소, 가상 요소
상속받은 스타일은 어떤 구체성도 띄지 않음.
조합자(+ > 는 어떤 구체성도 가지지 않음 )
h1 { ... } /* 0,0,0,1 */ body h1 { ... } /* 0,0,0,2 */ .grape { ... } /* 0,0,1,0 */ *.bright { ... } /* 0,0,1,0 */ p.bright em.dark { ... } /* 0,0,2,2 */ #page { ... } /* 0,1,0,0 */ div#page { ... } /* 0,1,0,1 */
-
CSS Selector
-
모든 태그
span { color : red; }
-
id
#id-name { color : red; }
-
태그의
class
지정div.class-name{ color : red; }
-
태그의
id
지정div#id-name{ color : red; }
-
모든 하위 요소 선택
div children-name { color : red; }
-
자식 요소 선택
div > children-name{ color : red; }
-
n번째 자식요소를 선택
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> </head> <body> <div> <p>asdf</p> <p>sd</p> <p>asdfasd</fp> <p>asdfsdf</p> </div> </body> </html>
div > p:nth-child(2){ color : red; }
-
형제요소
div + p { color : red; }
-
가상선택자
링크 관련 선택자
:link
방문하지 않은 링크:visited
방문한 링크
사용자 동작 관련 가상 클래스
:focus
현재 입력 포커스를 갖고있는 요소 (tab키를 통해 보면 알 수 있음):hover
마우스 포인터가 가르키고 있는 요소:active
활성화가 되어있는 요소 ( 클릭이 된 순간 )
가상요소 선택자
-
미리 정의해놓은 위치에 삽입이 되도록 약속해놓은 요소
::before
가장 앞에 요소 삽입::after
가장 뒤에 요소 삽입::first-line
첫 줄::first-letter
블럭 단위의 첫 글자
-
해당 속성 선택자
아래처럼 클래스라는 속성 혹은 클래스 와 id가 있는 p에 적용되는 스타일입니다.
p[class] { color: silver; } p[class][id] { text-decoration: underline; }
-
부분 속성 선택자
- [class~=”bar”] : class 속성의 값이 공백으로 구분한 “bar” 단어가 포함되는 요소 선택
- [class^=”bar”] : class 속성의 값이 “bar”로 시작하는 요소 선택
- [class$=”bar”] : class 속성의 값이 “bar”로 끝나는 요소 선택
- [class*=”bar”] : class 속성의 값이 “bar” 문자가 포함되는 요소 선택
속성-정의와 구문
- w3c,mdn으로 알아보기
- initial로 설정하는 경우 ie에서 지원하지 않음.
- inherited가 yes인 경우만 상속을 받을 수 있음.
길이 단위
- 절대 길이
- px ( 1px = 1/96th of 1 inch )
- pt - points ( 1pt = 1/72 of 1in)
- 상대 길이
- % - Percentage
- em - font size of the element ( 소수점 셋째 자리까지 작성 가능 )
- rem - font size of root element
- vw - 1% of viewport’s width
color
h1 {
color : red; /* color 키워드*/
color : #ff0000; /* 16진법*/
color : #f00; /* 16진법 축약형*/
color : rgb(255,0,0); /* rgb */
color : rgb(255,0,0,1); /* rgba (a = 투명도 alpha) */
}
font-size
- em
- 기준 값의 몇배로 할지 정하는 방법
box-model
-
content
-
padding
-
border
-
margin
-
margin 병합이 발생하는 경우
- 두 요소가 상하로 인접해 있는 경우
- 부모 요소와 첫번째 자식 요소 또는 마지막 자식 요소의 경우
- 내용이 없는 빈 요소의 경우
위의 경우에서 무조건 발생하는 것이 아니라 아래 조건이 만족해야 병합이 발생합ㄴ디ㅏ
- 두 요소가 모두
block
요소일 경우 - 부모요소에
padding
혹은border
가 없는 경우
-
border
- border-width : 각 위치에 따른 굵기를 지정할 수 있음.
- border-style : 선 모양을 지정하는 속성. 상하좌우 별로 지정할 수 있음
- Border-color : 선 색상을 지정할 수 있음. 상하좌우 가능
- Border : 축약형으로 많이 작성
position
- static
position
속성의 기본 값
- relative
- position을
static
에서relative
로 바꿔야top
,bottom
과 같은 위치를 지정할 수 있음.
- position을
- absolute
- 기준이 되는 위치를 찾는다.
- 기준이 되는 위치는 내 상위태그중에
static
이 아닌 것의 위치
- Fixed
- 스크롤을 해도 이동하지 않는 속성
float
- float를 자식속성에 넣었으면 부모 태그에
overflow : auto
속성을 넣어줘야한다. - 형제 엘리먼트 중에
float
속성을 사용했다면clear : both
속성을 사용해서float
가 있다는 것을 인지하게 해줘야한다.
flex
반응형 웹을 사용할
z-index
-
나중에 작성한 엘리먼트가 위에 보인다.
-
position : static
이 아닌 경우에만 동작 -
z-index
는 절대적인 것이 아니라 우선 형제 태그끼리 비교를 한다..parentA{ z-index : 2; } .childA{ z-index : 4; } .parentB{ z-index : 2; }
아래 처럼 무조건 z-index
가 크다고 앞에 오는 것이 아니라 하위 엘리먼트의 z-index
는 부모의 z-index
를 기준으로 한다. 노란색 태그가 10이라고 하더라도 빨간색 태그가 회색태그와 z-index
가 동일하므로 늦게 작성된 회색 태그가 더 위에 오는 것이다.
그렇기 때문에 아래와 같이 더 작더라도 상위 엘리먼트가 2이므로 회색 div보다 앞에 올 수 있다.
Less
- variables
- mixins
- 중첩된 룰처리
- operation
위 네가지가 불가능했던 기존 CSS를 해결하기 위한 방법
-
변수 만들기
@base_width. : 300px; @gray_border : 1px solid gray; @text-base-color : #5d1;
-
mixin
.content { width : 200px; height : 200px; } footer ul { .content; margin-top : 12px; }
-
nested
.content { width : 200px; height : @base-width/2; li { list-style : none; a { color : @text-base-color; } } }
less compile
less를 설치해서 명령어를 작성하면 작성한 .less
파일을 .css
파일로 변경할 수 있음.
매번 변경하는 커맨드를 작성하는 것은 귀찮기 때문에 gulp-watch-less
를 사용해서 변경을 감지할 수 있다.
transition
scale
이 변경될 때 자연스럽게 변할 수 있게 도와주는 CSS속성
브라우저에서 대부분 지원하기 때문에 문제없이 사용할 수 있다.
transform
GPU를 사용하기 때문에 애니메이션, 배치를 할 때 주로 씀. translate3d
를 사용하는 게 일반적임
background
-
background-color
기본 값 :
transparent
-
background-repeat
기본 값 :
repeat
repeat-x
: x축으로만 반복 y축으로 반복 안됨repeat-y
: y축으로만 반복 x축으로 반복 안됨no -repeat
: 한개만 나옴
-
background-position
기본 값 : 0% 0% (
x% y%
)px로 할 경우 left top이 기준이 됨.
-
Background-attachment
기본 값 :
scroll
fixed
브라우저를 기준으로 고정되는 값 (background-position의 위치에 따라 달라짐)
padding
padding: [-top] [-right] [-bottom] [-left];
0 10px 20px 30px /* 상, 우, 하, 좌 다름 */
0 10px 20px /* 좌, 우 같음 */
0 10px /* 상, 하 같음 & 좌, 우 같음 */
0 /* 상, 우, 하, 좌 모두 같음 */
margin
-
auto
를 설정하기 위해서는 해당 요소의width
값이 지정이 되어있어야한다. -
block-level
을 정렬할 때 사용하는 속성 -
margin collapse(마진 병합)
인접한 두개이상의 박스의 마진이 하나로 합쳐지는 것을 의미합니다.
더 큰값이 적용된다.
인접해있다고 무조건 발생한다기 보다 margin영역이 조금이라도 겹쳐있다면 발생하는 것.
margin & padding
+ | - | auto | 단위 | |
---|---|---|---|---|
Margin | O | O | O | px, % |
Padding | O | X | X | px, % |
%로 작업할 때 무조건 가로 길이를 기준으로
width
- width를 정할 때
box-sizing : border-box
로 하지 않았을 경우 width는 그냥 width가 된다.
height
- % 속성을 쓸 때는 부모 요소의 높이를 100%로 한다.
- 부모요소의 명시적인 높이를 필요로 한다.
타이포그래피
font-family
폰트를 작성할 때는 하나만 사용하는 것이 아니라 generic font까지 작성해줘야한다.
기본적으로 body에 폰트를 지정해놓는다.
font-fmaily : serif /* 삐침이 있는 `serif` */
font-fmaily : sans-serif : /* 삐침이 없는 `serif` */
- body에 generic font를 작성했다고 해서 하위 요소에 작성할 때 generic을 작성하지 않으면 안된다.
font-family: Helvetica, Dotum, '돋움', Apple SD Gothic Neo, sans-serif;
가장 먼저 Helvetica를 사용하고, 이를 사용할 수 없을 때 Dotum을 사용하는 방식으로 우선순위에 따라 차례대로 적용 됩니다. 만약 “abc 가나다 123” 이라는 글자가 있다면, “abc”와 “123”은 Helvetica로 표현이 되고, “가나다”는 Dotum으로 표현이 됩니다. “가나다”가 Dotum으로 표현된 이유는 Helvetica는 한글을 지원하는 폰트가 아니기 때문입니다.
- 디바이스마다 지원하는 폰트가 다르고 폰트명이 다를 수 있기 때문에 디바이스별 대표 폰트와 지원 범위도 확인해봐야 합니다.
ilne-height
line-height를 number와 %로 작성할 때 주의점
아래 처럼 숫자는 상속하게 될 경우 자식요소의 font-size로 다시 계산하지만 %로 상속할 경우 부모가 계산한 값을 그대로 넘겨받는다.
body { font-size: 20px; line-height: 2; } /* line-height = 40px; */
body { font-size: 20px; line-height: 200%; } /* line-height = 40px; */
body { font-size: 20px; line-height: 2; } /* line-height = 40px; */
p { font-size: 10px; } /* line-height = 20px; */
body { font-size: 20px; line-height: 200%; } /* line-height = 40px; */
p { font-size: 10px; } /* line-height = 40px; */
font-weight
font-weight : normal /* 400 과 같음 */
font-weight : bold /* 700 과 같음 */
font-weight : lighter /* 부모 요소 보다 얇은 폰트 가중치 */
font-weight : bolder /* 부모 요소 보다 굵은 폰트 가중치 */
font-style
font-style : normal /* 기본 */
font-style : italic /* 이탤릭체 */
font-style : obilque /* 기울임 */
font-variant
font-variant: small-caps; /* 소문자를 작은 대문자로 변환 */
font
font : font-size font-family /* 이 두개는 필수 */
실무에서는 지양하는 속성임
-
시스템 폰트
-
이미지 폰트
-
웹 폰트
-
웹에 있는 글꼴을 사용자의 로컬 환경 (컴퓨터)으로 다운로드하여 적용하는 속성입니다.
-
@font-face{ font-properties }
-
속성 값
- font-family(필수) : 글꼴의 이름을 지정
- src(필수) : 다운로드 받을 글꼴의 경로(URL)
- Font-style(옵션) : 글꼴의 스타일 지정, 기본 값은 normal
- Font-weight : 글꼴의 굵기 지정, 기본 값은 normal
-
사용 예시
@font-face { font-family: webNanumGothic; /* 사용자 지정 웹 폰트명 */ src: url(NanumGothic.eot); /* 적용 될 웹 폰트의 경로 */ font-weight: bold; /* 필요에 따라 지정 */ font-style: italic; /* 필요에 따라 지정 */ } body { font-family: webNanumGothic; }
-
vertical-align
- Block 은 불가능
- sub : 부모 아래 첨자 기준으로 정렬
- super : 부모 위 첨자 기준으로 정렬
- text-top : 부모 텍스트의 맨 위(Ascender 제외)
- text-bottom : 부모의 텍스트의 맨 아래(Descender 제외)
- middle : 부모의 중앙에 위치
- top : 부모의 맨 위 위치
- bottom : 부모의 맨 아래 위치
text-align
linine-level
에 적용하는 것.block-level
에는text-align
으로 정렬할 수 없음.block-level
에 작성하면 안의inline-level
이 정렬됨.block-level
을 정렬할 때는 길이를 준 상태로 margin
text-indent
-
text-indent : length | initial | inherit
text-indent
- 문장의 첫 들여쓰기를 적용하는 속성
- 부모 요소의 width를 기준으로 퍼센트 지정
text-decoration
text-decoration : overline; /* 윗 줄 */
text-decoration : line-through; /* 가운데 줄 */
text-decoration : underline; /* 밑 줄 */
text-decoration : underline overline; /* 위 밑 줄 */
text-decoration-color: currentColor; /* 현재 폰트 색으로 데코레이션 */
text-decoration-style: wavy; /* 지렁이 밑줄 */
text-decoration-style: double;
단어 관련 속성
white-space : no-wrap /* 줄바꿈을 무시한다. */
letter-spacing : 10px /* 자간을 조정하는 속성*/
word-spacing : 10px /* 단어 간격을 조정 */
word-break : normal
word-break : keep-all /* 단어 기준 줄바꿈 */
word-break : break-all /* 글자 기준 줄바꿈 */
word-wrap : normal
word-wrap : break-word /* 요소가 엘리먼트 넘어가면 줄바꿈 */
/* 줄바꿈을 할 건데, 글자 단위로 모두 자를 생각이라면 */
word-wrap: break-word;
word-break: break-all;
/* 줄바꿈을 할 건데, 단어 단위로 자를 생각이라면 */
word-wrap: break-word;
word-break: keep-all;
display
display : inline;
display : block;
display : inline-block;
display | width | Height | Margin | Padding | Boder |
---|---|---|---|---|---|
inline | X | X | 좌/우 | 좌/우 | 좌/우 |
block | O | O | O | O | O |
Inline-block | O | O | O | O | O |
-
inline
이margin
,padding
,border
이 적용되는 것 같지만 부모 요소의 크기는 변함이 없음. margin도 옆만 적용 inline-block
은 배치는inline
box는block
처럼 동작한다.inline-block
은 띄어쓰기나 개행을 할경우 띄어쓰기가 되기 때문에 주의해야함.
visibility
visibility : visible;
visibility : hidden /* 공간을 차지함. screen리더기에 읽힘. */
visibility : collapse;
float
block
형태로 만들어버림- 기사와 같이 사진을 배치하고 글씨들을 배치할 때 유용할 것으로 생각됨.
clear
float
속성을 주게 되면 다음 엘리먼트가 영향을 받기 때문에 그것을 막기 위해서 사용
clear : left /* float left 에서 clear시킴 */
clear : right /* float right 에서 clear시킴 */
clear : both /* left right 둘다 clear시킴 */
float
를 하면 따라오는 속성임
position
- static
- relative
- absolute
- span과 같은 경우에
block-level
로 만들어준다. - 이 또한 width, height 는 커지지만 부모의 크기에 영향을 주지 않는다.
- 기준을 잡는 좌표는 마진과 보더를 제외한 패딩부터 시작한다.
- span과 같은 경우에
Subscribe via RSS