p {color: red;}
<!-- CSS 주석 -->
<!-- p태그에 color 속성을 red값으로 지정함 -->
javascript로 css 속성을 변환할 수도 있다. 🔗 자바스크립트로 문서 요소를 제어하는 것을 DOM control이라 한다. 마찬가지로 브라우저를 제어하는 것을 BOM control이라 한다.
해당 요소에 style 속성(attribute)로 직접 지정하므로 스타일 지정 즉시 해당 스타일이 그 요소에만 지정됨. 코드의 간결성, 재사용성, 변동성이 떨어지므로 가급적 사용 지양.
해당 문서의 태그 안 쪽에 style 태그로 지정하여 현재 문서에만 적용할 경우 활용, 재사용성은 현재 문서에만 적용되므로 중간 정도, 변경하기는 쉽다. 같은 선택자에 같은 속성을 줬을 때는 마지막에 준 속성이 부여된다.
별도의 css 파일을 작성하여 해당 html 문서에 연결하여 사용하는 방식. 재사용성이 뛰어 나고, 필요한 곳에 링크 태그를 활용하여 연결하고, 필요가 없는 경우 해당 link 태그를 삭제하면 된다. 반드시 charset을 UTF-8로 처리해야 한글이나 특수문자가 손상되지 않는다.
<link href="style1.css" rel="stylesheet">
IN style1.css
@charset "UTF-8": 선택자 {속성: 값;}
스타일에서 콘텐츠나 요소의 크기를 지정할 때는 px, pt, %, em(rem), vh, vw 등을 사용한다. cm 등도 있지만 웹에서는 사용하지 않는다. 퍼센트는 글자가 아니라 부모의 상대적인 크기를 결정할 때 사용한다. 포인트는 인쇄에서 비롯된 것으로 문서의 글자 크기가 포인트 단위이다. px은 점 하나의 단위로 가장 많이 사용된다. 보통 10포인트는 13픽셀 정도 된다. 그래픽 카드 해상도에 따라서 달리 보일 수 있다. vh(높이), vw(넓이)는 기기에 따라 달라진다(variable)는 의미이다. 스마트폰이 가로, 세로로 변형될 때 거기에 맞춰서 변화하는 것이 vh, vw을 적용한 것이다.
웹 컬러를 나타내는 방식으로 RGB 체계를 사용한다. 컬러명, 16진(hexacode) 코드 6자리(#ff0000), 16진 코드 3자리, hsl(색각도, 채도, 명도), hsla(색각도, 채도, 명도, 불투명도), rgb(빨, 초, 파), rgba(빨, 초, 파, 투명) 등으로 표현 가능하다. 색각도는 0~355, 채도는 0~100, 불투명도는 0~1, 빨초파는 0~255의 값을 가진다.
해당 요소를 회전하려고 할 경우 활용하며, deg(각도), turn(바퀴) 등으로 명시함
애니메이션이나 지연시간 등에 지정하며, 단위로써는 초(s), 밀리초(ms)를 사용한다. 더 작게는 micro(만분의 1), nano(10억분의 1)도 있다.
태그, 클래스, 아이디, 전체 선택자
* {margin: 20px;} // 모든 태그에 마진을 20 픽셀 넣음
a {text-decoration: none;} // anchor 태그의 밑줄을 없앤다
| 기본 선택자 | 설명 |
|---|---|
| * {style} | 모든 태그 선택 |
| 태그명 {style} | 해당 태그 선택 |
| .클래스명 {style} | 해당 클래스 선택. 해당 클래스 속성이 있는 요소만 선택. 같은 스타일을 부여하고 싶다면 클래스를 부여한다. |
| #아이디명 {style} | 해당 아이디가 있는 태그 선택 |
조상후손, 부모자식, 형제, 순서 선택자가 있다.
조상 후손 {} // 조상과 후손 간에 한 칸 띄워서 표시
부모>자식 // 부모와 자식 간에 > 기호
형~제 // 형과 아우 요소 사이에 물결(~) 기호
n째+(n+1)째 // 바로 밑의 형제 관계 사이엔 + 기호
div.ex1>nav.gnb>ul.lst>li[class="item$"]*7>a{항목$}
div.ex1>nav.gnb>(ul.lst>li[class="item$"]*3>a{항목$})+(ol.lst>li[class="item$"]*3>a{항목$})
.ex1 li {} // 조상과 후손 관계
.ex1 > nav > .lst1 > li // 부모와 자식 관계로 사이의 모든 노드를 기재
.ex1 .item1~li {} // item 클래스의 동생들을 선택
.ex1 .item1+li {} // item 클래스의 바로 다음의 하나만 선택된다.
| 계층 선택자 | 설명 |
|---|---|
| 조상 후손 {style} | 조상 요소에 포함된 모든 후손 요소를 선택함 |
| 부모>자식 | 부모 요소에 포함된 자식 요소만 선택함(손자는 선택되지 않음) |
| 형~제 | 형의 모든 아우 요소를 선택함 |
| 형+제 | 형의 첫 번째 아우 요소를 선택함 |
<style>
section p{border: 1px black solid;}
section>p{width: 50%;}
h1+p{color:red;}
h2+p{color:blue;}
h1~p{background-color: pink;}
</style>
...
<section>
<h1>H1</h1>
<p>p1</p>
<p>p2</p>
<div>
<p>p3</p>
<p>p4</p>
</div>
<h2>H2</h2>
<hr>
<p>p5</p>
</section>
!https://blog.kakaocdn.net/dn/N5JRa/btsm9vjhRGy/xlJblo8NYKL0CpRmU0krRK/img.png
.ex1 li:first-child {} // ex1의 자손 중 첫 번째 자식들. item1과 item4가 걸린다. 만약 첫 번째 자식이 li가 아니라면 선택되지 않는다
.ex1 li:first-of-type {} // ex1의 자손 중 li 중 가장 첫 번째 타입
.ex1 li:last-child {} // ex1의 자손 중 li 중 마지막 자식
li:last-of-type {} // li 중 마지막 타입
li:nth-child(i) {} // li 중 i번째 자식
li:nth-of-type(i) {} // li중 i번째 타입
li:nth-child(2n) // 짝수번째 선택
li:nth-child(2n+1) // 홀수번째 선택
text-indentention: -20px; // 내어쓰기
only-child
only-of-type
empty
| 의사 클래스(계층 선택자) | 설명 |
|---|---|
| 요소:first-child | 첫째이면서 해당 요소와 일치하는 요소(첫째가 아니라면 해당 안 됨) |
| 요소:first-of-type | 해당 요소 중에 가장 먼저 오는 요소(첫째가 아닐 수도 있음) |
| 요소:last-child | 막내이면서 해당 요소와 일치하는 요소 |
| 요소:last-of-type | 해당 요소 중에 가장 마지막에 오는 요소 |
| 요소:nth-child(N) | N째이면서 해당 요소와 일치하는 요소 |
| 요소:nth-of-type(N) | 해당 요소 중에 N째인 요소 |
| 요소:nth-child(2n) | 해당 요소 중에 짝수번째인 요소 |
| 요소:nth-child(2n+1) | 해당 요소 중에 홀수번째인 요소 |
| 요소:only-child | 독자인 해당 요소(형제 없음) |
| 요소:only-of-type | 다른 형제가 있더라도 형제 중 해당 요소는 하나인 요소 |
| 요소:empty | 해당 요소 중 비어있는 요소 |
<style>
li:first-of-type{color:red;}
li:first-child{background-color: pink;}
li:last-child{color:blue;}
li:last-of-type{background-color: aqua;}
li:nth-child(2){color:orange;}
li:nth-of-type(2){background-color: beige;}
li:nth-child(2n){border-bottom: 1px gray solid;}
li:nth-child(2n+1){border-bottom: 1px green dotted;}
li:only-child{background-color: lightgreen;}
p:only-of-type{background-color: lightcoral;}
h1:empty::before{content: "비어있음";}
</style>
...
<body>
<section>
<h1></h1>
<ul>ul1
<li>ul1_li1</li>
<li>ul1_li2</li>
<li>ul1_li3</li>
</ul>
<ol>ol
<li>ol_li1</li>
</ol>
<ul>ul2
<p>paragrpaph</p>
<li>ul2_li1</li>
<li>ul2_li2</li>
<li>ul2_li3</li>
</ul>
</section>
</body>

태그의 속성에 따라 다르게 선택할 경우 사용한다.
태그[속성 이름]
div.pic_fr>(img+br)*4
img[src] {} // src 속성이 "존재하는" img 태그 선택
img [src=특정] // src 속성 중 특정 값인 img 태그 선택
img [src|=특정] // img 태그의 src 속성 중 특정으로 시작된 속성 요소 선택
img [src^=문자] // 특정으로 시작하는 요소
img [src$=특정] // img 태그의 src 속성 중 특정으로 끝나는 요소 선택
img [src*=문자] // 특정이 포함되는 요소
| 종류 | 요소 |
|---|---|
| [속성] | 속성이 있는 요소 |
| [속성 = 값] | 지정한 속성 값인 요소(일치) |
| [속성 ~= 값] | 지정한 속성 값이 포함된 요소(단어별) |
| [속성 | = 값] |
| [속성 ^= 값] | 지정한 속성 값으로 시작하는 요소 |
| [속성 $= 값] | 지정한 속성 값으로 끝나는 요소 |
| [속성 *= 값] | 지정한 속성 값의 일부가 일치하는 요소 |

| 링크 선택자 | 하이퍼링크 요소인 a요소의 현재 동작 상태에 따라 달리 적용 |
|---|---|
| :link | a 요소의 링크에 스타일 적용 |
| :visited | a 요소의 방문했던 링크에 스타일 적용 |
| :target | a가 가리키는 대상에 스타일 적용 |
| 반응 선택자 | |
|---|---|
| :hover | 요소에 마우스 포인터가 올라감 |
| :active | 요소를 마우스로 누르고 있는 경우(활성화) |
| 전후 선택자 | |
|---|---|
| ::before | 특정 요소의 앞에 내용이나 스타일을 추가 |
| ::after | 특정 요소의 뒤에 내용이나 스타일을 추가 |
| ::selection | 마우스로 드래그해서 선택했을 때 스타일 추가 |
| 텍스트/문장 선택자 | |
|---|---|
| ::first-letter | 태그 안의 첫 번째 위치에 있는 글자를 선택(글자가 등 태그 뒤로, 두 번째 이상이면 X |
| ::first-line | 화면 상에서 첫 번째 줄을 선택(창 크기에 따라 달리 적용될 수 있다) |
| 조건 선택자 | |
|---|---|
| :not(조건) | 부정 선택자. 조건이 아닌 요소. |
| :checked | 라디오나 체크에서 선택되어 있는 요소 |
출력 관련 속성에는 display, visibility, opacity, width, height, overflow, margin, padding, border 등이 있다.
display는 화면 출력 모드를 지정하는 속성이다. 부여 가능한 기본적인 속성의 값에는 inline ⊕ block ⊕ inline-block(한 줄 출력, 크기 지정) ⊕ none(아예 공간을 차지하지 않는다)이 있으며 이 중 하나만 지정 가능하다. 다른 부여 가능한 속성의 값에는 contents, flex, gird, box, table, inline-flex, inline-grid, inline-table, list-item, run-in, table-caption, table-column, table-row, table-cell, table-header-group, table-footer-group, table-column-group, table-row-group 등이 있다.
margin: 전체
margin: 상하 좌우
margin: 상 우 하 좌
border(테두리 속성)에는 width, style, color를 지정할 수 있다.
{border: 1px solid #000;} // 1px 실선 검은색 테두리
{border-left: 2px double silver;}
{border-width: 2px;}
💡 지정한 폭과 높이에 padding과 border 값을 더한 값이 실제 콘텐츠의 크기가 된다.
box-sizing 속성은 박스의 크기 산정 방법을 규정한다. 즉 박스의 지정된 크기(너비나 높이)가 컨텐츠, padding, border 등에서 적용 여부를 결정한다. content-box와 border-box의 값을 지정할 수 있다. 앞으로는 padding-box, outer-box등이 모든 브라우저에서 지원될 예정이나, 아직 css3에서는 사용되지 않는다. content-box는 지정한 너비/높이가 콘텐츠에만 지정되게 하며, border-box는 지정한 크기가 콘텐츠의 크기, padding, border에 모두 적용된다.
배치 및 레이아웃 관련 속성에는 position, left, right, top, bottom, z-index, float, clear 등이 있다. 가급적이면 left, right, top, bottom은 사용하지 않는다. left과 right는 x축의 위치, top과 bottom은 y축, z-index는 z축(층 수, default는 0)의 위치를 결정한다. 각 축 별로 하나만 정의하는 것이 좋다.
position(위치 속성)은 현재 선택된 요소를 어떠한 방식으로 배치할지 위치 결정 방식을 지정한다. static ⊕ relative ⊕ absolute ⊕ fixed ⊕sticky의 값을 지정할 수 있다.
지정 가능한 키워드: auto⊕length
background와 관련된 세부 속성에는 -attachment, -blend-mode, -clip, -color, -image, -position, -repeat, -size, -origin 등이 있다. 이 중 -color를 제외한 나머지 속성은 배경 이미지에 대한 속성이다.
background: color image position/size repeat origin clip attachment;

<section class="frame" id="frame_background" style="background: skyblue url(./img/mario_luigi.png) center center/50% no-repeat content-box padding-box scroll;">skyblue url(./img/mario_luigi.png) center center/300px no-repeat content-box padding-box scroll</section>
<section class="frame" id="frame_background2" style="background: radial-gradient(white, skyblue);">radial-gradient</section>
background-image: url(.image/kim.png);
background-image: url(".image/김 기태.png");
background-position: 수평(landscape) 수직(portrait);
background-position: 0 0;
background-position: center bottom, center center;
backgorund-position: left center;
background-position: 10% 100px;
background-position: -200px -400px;

CSS Sprite 🔗: 여러 개의 배경 이미지를 하나의 파일로 제작한 후 background-position 속성을 이용하여 이미지를 배치하는 방법
<section class="frame" id="frame_position_1" style="background-position: right top, center bottom">right top, center bottom</section>
<section class="frame" id="frame_position_2" style="background-position: center center, right bottom;">center center, right bottom</section>
<section class="frame" id="frame_position_2" style="background-position: -20px -20px, 70px 110px;">-20px -20px, 70px 110px</section>
background-size: 가로 세로;
background-size: auto;
background-size: 300px auto, cover;
background-size: 80% auto;

<section class="frame" id="frame_size1" style="background-size: 100px;">100px auto</section>
<section class="frame" id="frame_size2" style="background-size: cover;">cover</section>
<section class="frame" id="frame_size3" style="background-size: 30%;">30%</section>
background-repeat: repeat;
background-repeat: no-repeat;
background-repat: repeat-x;

<section class="frame" id="frame_repeat1">repeat</section>
<section class="frame" id="frame_repeat2" style="background-repeat: no-repeat;">no-repeat</section>
<section class="frame" id="frame_repeat3" style="background-repeat: repeat-x;">repeat-x</section>
<section class="frame" id="frame_repeat4" style="background-repeat: repeat-y;">repeat-y</section>
background-origin: padding-box;

<section class="frame" id="frame_origin1" style="background-origin: padding-box;">padding-box</section>
<section class="frame" id="frame_origin2" style="background-origin:content-box;">content-box</section>
<section class="frame" id="frame_origin3" style="background-origin:border-box;">border-box</section>
background-clip: padding-box;

<section class="frame" id="frmae_clip1" style="background-clip:padding-box;">padding</section>
<section class="frame" id="frmae_clip3" style="background-clip:content-box;">content</section>
<section class="frame" id="frmae_clip2" style="background-clip:border-box;">border</section>
background-attachment: fixed, scroll;

<section class="frame" id="frame_attachment1" style="background-attachment:fixed;">fixed</section>
<section class="frame" id="frame_attachment2" style="background-attachment:scroll;">scroll</section>
<section class="frame" id="frame_attachment3" style="background-attachment:local;">local<br><br><br><br><br><br><br><br><br><br><br><br></section>
background: linear-gradient(방향or각도, 시작색, 끝색);
background-color: radial-gradient(시작색. ..중간색.., 끝색);
filter 속성에는 blur, contrast, grayscale, hue-rotate, drop-shadow 등이 있다.
<section class="frame" id="filter1" style="filter:blur(2px);">blur(2px)</section>
<section class="frame" id="filter2" style="filter:brightness(150%);">brightness (150%)</section>
<section class="frame" id="filter3" style="filter:contrast(30%);">contrast(30%)</section>
<section class="frame" id="filter4" style="filter:grayscale(90%);">grayscale (90%)</section>
<section class="frame" id="filter5" style="filter:hue-rotate(40);">hue-rotate(40)</section>
<section class="frame" id="filter6" style="filter:drop-shadow(3px 3px 1px gray);">drop-shadow(3px 3px 1px gray)</section>
<section class="frame" id="filter7" style="filter:invert(30%);">invert (30%)</section>
<section class="frame" id="filter8" style="filter:saturate(10%);">saturate (10%)</section>
<section class="frame" id="filter9" style="filter:sepia(20%);">sepia (20%)</section>

글자 관련 속성에는 color, font-size, font-weight(소얇대굵), font-stretch(장평), text-transform(대→소, 소→대, 첫 글자 대문자), font-variant(소문자를 소문자 크기의 대문자로 바꿈), font-style(기울어), font-family(글꼴), font-kerning(커서가 놓였을 때 자간) 등이 있다. 또한 서버의 폰트를 임의 폴더에 다운받아 사용하도록 하는 @font-face 속성도 있다.
문단 관련 속성에는 letter-spacing(특정 범위의 자간), line-height(행간), word-spacing(어간), text-align, text-indent(들여쓰기), text-decoration, text-justify, text-orient, text-overflow, white-space, word-break 등이 있다.
text-decoration: overline underline;
text-decoration: underline double #369, overline wave #c00;
list-style은 메뉴나 목록의 기호를 표시하는 속성이다. type | position | image 등의 값을 부여할 수 있다.
list-style: type position image;
list-style의 세부 속성은 다음과 같다.

<style>
#li_style_image{list-style-image: url("./img/yoshi.cur");}
</style>
...
<ul id="list-style">
<li id="li_style_type1" style="list-style-type: disc;">disc</li>
<li id="li_style_type2" style="list-style-type: circle;">circle</li>
<li id="li_style_type3" style="list-style-type: square;">square</li>
<li id="li_style_type4" style="list-style-type: decimal;">decimal</li>
<li id="li_style_type5" style="list-style-type: armenian;">armenian</li>
<li id="li_style_type6" style="list-style-type: georgian;">georgian</li>
<li id="li_style_type7" style="list-style-type: hebrew;">hebrew</li>
<li id="li_style_type8" style="list-style-type: hiragana;">hiragana</li>
<li id="li_style_type9" style="list-style-type: katakana;">katakana</li>
<li id="li_style_type10" style="list-style-type: lower-alpha;">lower-alpha</li>
<li id="li_style_type11" style="list-style-type: lower-greek;">lower-greek</li>
<li id="li_style_type12" style="list-style-type: lower-latin;">lower-latin</li>
<li id="li_style_type13" style="list-style-type: lower-roman;">lower-roman</li>
<li id="li_style_type14" style="list-style-type: upper-alpha;">upper-alpha</li>
<li id="li_style_type15" style="list-style-type: upper-greek;">upper-greek</li>
<li id="li_style_type16" style="list-style-type: upper-latin;">upper-latin</li>
<li id="li_style_type17" style="list-style-type: upper-roman;">upper-roman</li>
<li id="li_style_type18" style="list-style-type: cjk-ideographic;">cjk-ideographic</li>
<li id="li_style_position" style="list-style-position: inside;"> list position inside</li>
<li id="li_style_position" style="list-style-position: outside;"> list position outside</li>
<li id="li_style_image">list-style-image</li>
</ul>
<style>
#li_mouse23 {cursor: url("./img/yoshi.cur") 20 30, pointer;}
</style>
...
<ul id="mouse">
<li id="li_mouse1" style="cursor: alias;">alias</li>
<li id="li_mouse2" style="cursor: all-scroll;">all-scroll</li>
<li id="li_mouse3" style="cursor: auto;">auto</li>
<li id="li_mouse4" style="cursor: cell;">cell</li>
<li id="li_mouse5" style="cursor: col-resize;">col-resize</li>
<li id="li_mouse6" style="cursor: row-resize;">row-resize</li>
<li id="li_mouse7" style="cursor: nwse-resize;">nwse-resize</li>
<li id="li_mouse8" style="cursor: context;">context</li>
<li id="li_mouse9" style="cursor: copy;">copy</li>
<li id="li_mouse10" style="cursor: crosshair;">crosshair</li>
<li id="li_mouse11" style="cursor: default;">default</li>
<li id="li_mouse12" style="cursor: grab;">grab</li>
<li id="li_mouse13" style="cursor: grabbing;">grabbing</li>
<li id="li_mouse14" style="cursor: help;">help</li>
<li id="li_mouse15" style="cursor: move;">move</li>
<li id="li_mouse16" style="cursor: no-drop;">no-drop</li>
<li id="li_mouse17" style="cursor: not-allowed;">not-allowed</li>
<li id="li_mouse18" style="cursor: pointer;">pointer</li>
<li id="li_mouse19" style="cursor: progress;">progress</li>
<li id="li_mouse20" style="cursor:zoom-in;">zoom-in</li>
<li id="li_mouse21" style="cursor: zoom-out;">zoom-out</li>
<li id="li_mouse22" style="cursor: text;">text</li>
<li id="li_mouse23">img</li>
</ul>

shadow에는 text-shadow, box-shadow 가 있다. 텍스트나 박스의 외부(default) 또는 내부(inner) 그림자를 지정할 수 있다. 이때 그림자는 크기 속성에 포함되지 않으므로 아무리 크더라도 영역을 차지하지 않는다.
text-shadow: x-len y-len blur-len color;
box-shadow: x-len y-len blur-len spread-len color;
<link href="https://fonts.googleapis.com/css2?family=Diphylleia&display=swap" rel="stylesheet">
<style>
#shadow p{font-size:40px; font-weight: bolder; margin:20px; font-family: "Diphylleia", serif;}
#shadow section{display:inline-block; margin: 10px; width: 100px; height: 40px; border: 1px solid gray; padding: 10px;}
#shadow_neon {text-shadow: 0 0 2px white, 0 0 10px #ff00de, 0 0 20px #ff00de, 0 0 30px #ff00de, 0 0 40px #ff00de; color: white; background-color: black;}
#shadow_blank {text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; color: white}
</style>
...
<div id="shadow">
<p id="shadow1" style="text-shadow:10px 10px 1px rgba(128, 128, 128, 0.281);">Text-Shadow1</p>
<p id="shadow2" style="text-shadow:-10px -10px 3px rgba(128, 128, 128, 0.281);">Text-Shadow2</p>
<p id="shadow3" style="text-shadow: 3px 3px 1px rgba(16, 187, 235, 0.653), 4px 4px 2px rgba(16, 187, 235, 0.653); text-decoration: underline wavy; color: skyblue;">Text-Shadow3</p>
<p id="shadow_neon">Text-Shadow-NEON</p>
<p id="shadow_blank">Text-Shadow-Blank</p>
<section id="shadow1" style="box-shadow: 10px 10px 1px rgba(128, 128, 128, 0.281);">box-shadow1</section>
<section id="shadow2" style="box-shadow:-10px -10px 1px rgba(128, 128, 128, 0.281);">box-shadow2</section>
<section id="shadow3" style="box-shadow:10px 10px 1px 15px rgba(128, 128, 128, 0.281);">box-shadow3</section>
</div>

안녕하세요~ 천재 국비 과정 후기 검색하다 오게 되었습니다 듣고 싶은데 풀린 정보가 많이 없어서요 😭 실례가 안 된다면 아래 옾챗에서 대화 조금 가능할까요? (대충 궁금한 것, 전체적인 커리는 괜찮은가, 수료 후 취업에 대해)
https://open.kakao.com/o/sJqBuqif