Cascading Style Sheets(CSS)는 HTML이나 XML(SVG, XHTML 같은 XML 방언(dialect) 포함)로 작성된 문서의 표현을 기술하기 위해 쓰이는 스타일시트 언어입니다. CSS는 요소가 화면, 종이, 음성이나 다른 매체 상에 어떻게 렌더링되어야 하는지 기술합니다.
html
<!doctype html>
<html lang="en">
<head>
<title>CSS3 Example</title>
<link href="ex1.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Web System Design Class</h1>
<h2>We are working on our first CSS example</h2>
<hr>
<p>CSS enhances the look of document</p>
</body>
</html>
ex1.css
body {background-color: lightblue;}
h1 {font-size: 36pt;}
h2 {color: blue}
hr {border: 5px solid yellow;}
p {color: blue; font-size: 20px;}
가로로 수직말고 세로로 수직은 어떻게 할까?
html
<div class="vertical-line"></div>
css
.vertical-line {
width: 2px; /* 원하는 세로 선의 두께를 지정하세요. */
height: 100px; /* 원하는 세로 선의 높이를 지정하세요. */
background-color: blue; /* 원하는 세로 선의 색상을 지정하세요. */
display: inline-block; /* 세로 선을 인라인 요소로 표시합니다. */
}
<style>
속성으로 정의하여 사용<style>
tag으로 inline 형태로 사용도 가능<p style=“color: blue; font-size: 36px”>
CSS enhances the look of document</p>
<head>
tag) <style>
tag을 사용하여 정의 <head>
<style>
body {background-color: lightblue;}
h2 {color: blue}
</style>
</head>
<link>
tag이나 @import로 불러와 사용<link>
tag은 header에서만 사용되며, end tag없이 사용함@charset "utf-8";
@import "header.css"; /* 문자 형식 */
@import url("header.css"); /* url 형식 */
cf) 여러개 호출할때는 이렇게..
<link rel="stylesheet" href="test1.css">
<link rel="stylesheet" href="test2.css">
<link rel="stylesheet" href="test3.css">
selector
에 따른 우선 순위는 계산(specificity)으로 얻을 수 있음. 요약은 다음과 같음 스타일 우선순위는 다음 3가지 요소를 통해 우선순위를 결정합니다.
Importance
)1) head 요소 내의 style 요소
2) head 요소 내의 style 요소 내의 @import 문
3) <link>
로 연결된 CSS 파일
4) <link>
로 연결된 CSS 파일 내의 @import 문
5) 브라우저 디폴트 스타일시트
Specificity
)우선순위를 결정하는 두 번째 요소는 명시도입니다. 명시도는 셀렉터가 가리키는 것이 명확할수록 우선순위를 높게 주는 것을 의미합니다. 다시 말해서, 모호하게 여러개를 가리키는 셀렉터 보다 적은 범위를 명확하게 가리키는 셀렉터 스타일의 우선순위가 높다는 것 입니다.
명시도에 따른 우선순위는 다음과 같습니다.
인라인 > id > class > 태그
inline
은 하나의 태그 내에서만 적용되므로 높은 우선순위를 갖습니다.id
는 문서 내에서 한 번만 등장하므로 비교적 좁은 범위를 가지게됩니다.class
는 여러번 쓰일 수 있기에 id보다는 넒은 범위를 갖습니다.tag
는 문서 내 모든 태그를 가리키므로 범위가 제일 넒습니다.html
<h2>태그 셀렉터</h2>
<h2 class='cls'>클래스 셀렉터</h2>
<h2 id='i' class='cls'>아이디 셀렉터</h2>
<h2 class='cls' style='background-color: green'>인라인 셀렉터</h2>
css
h2 {
background-color: red;
}
.cls {
background-color: blue;
}
#i {
background-color: violet;
}
Source Order
)Style을 HTML에 적용하는 기능
Parts:
Selector
{ property
: value }
<style>
* {color: red;}
</style>
<p>
, <body>
, <h1>
, etc<style>
body, p, h1 {margin: 0; padding: 0}
</style>
html
<ul>
<li>Item one</li>
<li class="special">Item two</li>
<li>Item <em>three</em></li>
</ul>
css
.special {color: red; font-weight: bold;}
special 클래스에 모두 적용한다.
li.special {color: red; font-weight: bold;}
클래스 이외에 특정 태그를 지칭할 수도 있다.
html
<p id="id1">ID 선택자(ID Selector)</p>
<p id="id2">ID 선택자(ID Selector)</p>
<div id="id2">ID 선택자(ID Selector)</div>
CSS
#id1 { background: yellowgreen; color: darkgreen; }
div#id2 { background: darkgreen; color: yellowgreen; }
ID selector는 마침표 대신 #
을 사용한다.
동일한 ID가 존재하면 # 앞에 태그를 작성하면 된다.
위에서 살펴본 선택자들은 태그나 클래스, ID 이름만 알면 스타일을 적용할 수 있다. 하지만 이제 살펴볼 attribute Selector는 태그 안의 특정 속성들에 따라 스타일을 지정한다.
E[attr]
)E[attr=“var”]
<!-- HTML -->
<a href="one.html">E[attr]형식</a>
<input type="text" name="name">
<a href="one.xls">E[attr$="val"]형식</a>
/* E[attr]형식 */
a[href] { background: yellowgreen; color: black; }
/* E[attr="val"]형식 */
input[type="text"] { width: 150px; border: 1px solid #000; }
/* E[attr$="val"]형식 */
a[href$=".xls"] { background: darkgreen; }
E[attr~="val"] vs E[attr*="val"]
두개 다 특정 값이 포함되는 요소를 찾는 셀렉터이지만
~=
은 단어의 앞과 뒤에 공백이 반드시 있어야.. 즉 완전한 단어여야 하고
*=
은 단어의 앞뒤에 공백이 없고 어떤 단어의 일부여도 된다.
예를 들어 다음과 같은 태그가 있다고 하자.
<a href="apple"></a>
여기서 가운데 문자 ppl을 찾는다고 하면 ~=은 찾기를 실패하고, *=은 성공할 것이다.
그럼 ~=
로 찾으려면 어떻게 해야할까?
<a href="a ppl e"></a>
다음과 같이 ppl과 앞과 뒤가 공백으로 완전히 분리되어 있는 완전한 문자열이여야 ~=
로 탐색이 가능하다.
위의 "a ppl e"는 당연히 *=
을 사용해도 탐색 가능하다 왜냐면 공백을 포함하여도 ppl이라는 문자를 포함하고 있기 때문!
가상 클래스 셀렉터는 원래 클래스가 존재하지 않지만 가상 클래스를 임의로 지정하여 선택하는 방법입니다. 마우스가 들어왔을때 등의 특정 상태에만 적용되는 가상의 클래스를 지정해주는 것입니다.
가상 클래스는 마침표(.) 대신 콜론(:)을 사용하는데요, CSS 표준에 의해 미리 정의된 이름이 있기 때문에 임의의 이름을 사용할 수 없다는 특징이 있습니다.
:link
셀렉터가 방문하지 않은 링크일 때
:visited
셀렉터가 방문한 링크일 때
:hover
셀렉터에 마우스가 올라와 있을 때
:active
셀렉터가 클릭된 상태일 때
:focus
셀렉터에 포커스가 들어와 있을 때
::first-letter
콘텐츠의 첫글자를 선택합니다
::first-line
콘텐츠의 첫줄을 선택합니다. 블록 요소에만 적용할 수 있습니다.
::after
콘텐츠의 뒤에 위치하는 공간을 선택합니다. 일반적으로 content 어트리뷰트와 함께 사용됩니다.
::before
콘텐츠의 앞에 위치하는 공간을 선택합니다. 일반적으로 content 어트리뷰트와 함께 사용됩니다.
::selection
드래그한 콘텐츠를 선택합니다. iOS Safari 등 일부 브라우저에서 동작하지 않습니다
Combinator(복합 선택자)는 2개 이상의 Selector 요소가 모인 선택자입니다.
자손과 후손의 개념..
div
기준으로 자손과 후손의 개념을 그림으로 나타내었다.
- Descendant combinatory (하위 선택자) <후손>
규칙:
셀렉터A 셀렉터B
설명: 후손 셀렉터는 셀렉터A의 모든 후손(하위) 요소 중 셀렉터B와 일치하는 요소를 선택합니다. 셀렉터B를 선택한다는게 핵심입니다!
모든 div 태그들 중에 p태그를 선택한 것입니다.
/* div 요소의 후손요소 중 p 요소 */
div p { color: red; }
- Child combinatory (자식 선택자) <자손>
body > p
: a p
element that is child of body규칙:
셀렉터A > 셀렉터B
설명: 자손 셀렉터는 셀렉터A의 모든 자식 요소 중 셀렉터B와 일치하는 요소를 선택합니다
/* div 요소의 자식요소 중 p 요소 */
div > p { color: red; }
내용(content) : 텍스트나 이미지가 들어있는 박스의 실질적인 내용 부분입니다.
패딩(padding) : 내용과 테두리 사이의 간격입니다. 패딩은 눈에 보이지 않습니다.
테두리(border) : 내용와 패딩 주변을 감싸는 테두리입니다.
마진(margin) : 테두리와 이웃하는 요소 사이의 간격입니다. 마진은 눈에 보이지 않습니다.
<div> {width: 100px; height: 100px;}
<div> {padding: 0 100px 0 100px;}
div {border-width: thick;
border-style: dashed;
border-color: green; }
div {border: 10px solid green;}
<div> {margin: 10px; }
font-color
, font-family
,font-size
: keyword (large, small etc.) or dimension(px, em, etc)font-weight
: normal, bold, italic, 100-900(numeric boldness value)text-transform
: uppercase, lowercase, capitalize(only the 1st letter)Text-decccoration
: underline, overline, line-throughtext-align
: left, right, center, justifyline-height
: 2 (double space) (이전 줄 과의 간격)letter-spacing : 2px
: space between letters (글자사이 간격)word-spacing : 2px
: space between words (문자사이 간격)1) Textural data types
String: with quotes (‘ ‘ or “ “)
Identifiers: without quotes
Pre-defined keyword values
.box { float: left; }
.box { background-image: url(“images/my-background.png”); }
2) Numeric data types
.box { width: 50%; }
)3) Special data types
h1 { background-color: red; }
h2 { background-color: rgb(255,255,255); }
h3 { background-color: #000000; }
#000000
은 16진수 색 코드로, RGB(빨강, 녹색, 파랑) 색 모델에서 각 색상 값이 0인 경우를 나타냅니다.
예를 들어, #010304
는 빨강이 01, 녹색이 03, 파랑이 04로 지정된 색을 나타냅니다
span {display: block | inline;}
<display-outside>
<div>
이나 <p>
, <h1>
태그 등을 들 수 있습니다.<span>
이나 <a>
, <em>
태그 등을 들 수 있습니다.<display-inside>
flexbox model
로 배열grid model
로 배열section {
display: grid;
grid-template-columns: 150px 150px;
width: 400px;
height: 200px;
float: right;
background: lightgray;
}
여기서 4행 3열의 그리드를 만들고 싶다면?
section {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(4, 1fr);
width: 400px;
height: 200px;
background: lightgray;
}
1fr은 사용 가능한 공간을 동등한 비율로 나누어 각 열 또는 행에 동일한 너비 또는 높이를 부여합니다.
따라서
repeat(3, 1fr)는 3개의 열을 만들고 각 열이 동일한 너비를 가지도록 설정합니다.
repeat(4, 1fr)는 4개의 행을 만들고 각 행이 동일한 높이를 가지도록 설정합니다
div {
float: left;
height: 100px; width: 100px;
background: red;
margin: 20px;
border: 10px solid green;}
float 적용 전
float 적용 후