Chapter1. CSS
1-1 CSS
1-2 텍스트 꾸미기
1-3 절대단위 상대단위Chapter2. 박스모델
Chapter3. CSS selector
웹 페이지 스타일 및 레이아웃을 정의하는 스타일시트 언어.
HTML로 구성한 구조의 외부와 내부를 꾸미는 역할을 담당
심미적인 화려함 뿐 아니라,
더 나은 사용자 경험(UX, user experience)을 주기 위한 콘텐츠 배치와 타이포그래피 등을 적용하기 위해 사용
스타일링 도구이므로 독립적으로 기능하지 못함. HTML 필요.
UI (User Interface) : 인터페이스는 컴퓨터와 교류하기 위한 연결고리. 사용자가 웹 상에서 여러 기능들을 쉽게 사용할 수 있는 인터페이스
셀렉터 : 요소 이름이나 id / class 선택
중괄호 : 이 요소에 적용할 내용(=속성. 색상, 글자크기 등) 작성하여 스타일 표현
속성과 값의 끝에는 세미콜론을 붙여 속성끼리 구분한다.
CSS 파일을 HTML 파일에 연결할 때는, <link>
태그 안에서 href
속성을 통해 파일을 연결
<link rel="stylesheet" href="index.css" />
<link rel="stylesheet" href="layout.css" />
<link>
요소는 HTML 파일과 다른 파일을 연결하는 목적으로 사용함<link>
요소의 rel
은 연결하고자 하는 파일의 역할이나 특징rel
속성에 stylesheet
를 추가해야함.href
속성에는 파일의 위치를 추가해야 함. 지금 작성한 두 파일은 한 폴더 내에 있으므로 파일 이름만 입력.<style>
요소 내에 작성id / class 차이점
color
글자의 색상을 변경하는 속성
.red {
color: #ff0000;
}
배경 색상이나, 박스 테두리 색상 적용도 가능
.box {
color: #155724; /* 글자 색상 */
background-color: #d4edda; /* 배경 색상 */
border-color: #c3e6cb; /* 테두리 색상 */
}
font-family
.emphasize {
font-family: "SF Pro KR", "MalgunGothic", "Verdana";
}
글꼴의 이름은 따옴표를 붙여서 적용할 수 있음.
만약 사용자의 기기에 해당 글꼴이 설치되어 있지 않다면, 웹 폰트 기술을 통해 해결할 수 있음
font-size
속성을 사용
font-weight
text-decoration
letter-spacing
line-heigh
text-align
** <center>
, <font>
사용하지 말 것.
글꼴 크기, 화면 크기 등 크기를 다룰 때는 크기의 단위가 무엇보다 중요하다.
px
, pt
등%
, em
, rem
, ch
, vw
, vh
등기기나 브라우저 사이즈 등 환경에 영향 받지 않고 절대적 크기로 정할 때
px
(픽셀)을 사용함. 사용자 환경에 따라 일반 텍스트보다 작게 보이는 결과가 초래될 수 있으며 작은 화면이나 고해상도인 경우에 적합하지 않음.픽셀은 인쇄와 같이 화면의 사이즈가 정해진 경우에 유리함.
일반적인 경우
상대단위인 rem
을 추천함.
반응형 웹(responsive web)에서 기준점 만들 때
반응형 웹은 디바이스 너비(width)에 따라 유동적인 레이아웃이 적용되는 웹사이트다. 이 때 디바이스 크기를 나누는 기준을 보통 px
로 정한다. 보통 450px미만의 너비를 갖는다.
화면 너비나 높이에 따른 상대적 크기가 중요한 경우
vw
(viewport width) : 1vw
는 보이는 영역 너비의 1/100vh
(viewport height) :1vh
는 보이는 영역 높이의 1/100.100vw
, 100vh
를 사용해 구현한 것.모든 콘텐츠는 각자의 영역을 가진다.
하나의 콘텐츠로 묶이는 요소들이 하나의 박스가 된다.
block 박스: 줄 바꿈 O (요소: <div>
, <h1>
, <p>
)
inline 박스: 줄 바꿈 X, 크기 지정 X
(요소: <span>
)
inline-block 박스: 줄 바꿈 X, block박스의 특징을 가짐
border(테두리)를 기준으로 padding(안쪽 여백)과 margin(바깥 여백)이 있다.
border(테두리): 각 영역이 차지하는 크기를 시각적으로 파악하게 해줌
테두리 두께(border-width)
테두리 스타일(border-style)
테두리 색상(border-color)
margin (바깥 여백)
바깥 여백에는 음수 값을 지정할 수 있음. 여백에 음수 값을 지정하면 다른 엘리먼트와의 간격이 줄어들며, 화면(viewport)에서 아예 사라지게 하거나, 다른 엘리먼트와 겹치게 만들 수도 있음.
p {
margin-top: -2rem;
}
이런 경우엔 콘텐츠가 박스 바깥으로 나온다.
해결방안
1) 박스 안에 스크롤을 추가해 콘텐츠를 확인할 수 있게 만들기
p {
height: 40px;
overflow: auto;
}
overflow 속성의 auto 값: 콘텐츠가 넘치는 경우 스크롤을 생성하도록 함
overflow 속성은 x축과 y축을 지정해 가로 방향으로 스크롤 하거나 세로 방향으로 스크롤 할 수 있게끔 지정할 수 있습니다. overflow-x 속성과 overflow-y 속성을 이용하면 두 방향을 모두 지정할 수 있습니다.
2) 박스 크기에 맞게 콘텐츠를 표시하지 않기
overflow 속성에 hidden 값을 사용한다.
레이아웃 디자인을 조금 더 쉽게 하는 방법
여백과 테두리 두께를 포함해서 박스 크기를 계산하게 만드는 것.
1) 모든 요소를 선택해 box-sizing 속성을 추가
2) border-box라는 값을 추가합니다.
* {
box-sizing: border-box;
}
[코드]모든 요소에 'box-sizing: border-box'를 추가한다.
box-sizing: border-box
:일반적으로 HTML 문서 전체에 적용함. box-sizing
을 일부 요소에만 적용하는 경우, 혼란을 가중시킬 수 있음. 보통 border-box 계산법을 기준으로 한다.box-sizing: content-box
: 박스의 크기를 측정하는 기본값.그러나 대부분의 레이아웃 디자인에서 여백과 테두리를 포함하는 박스 크기 계산법인 border-box를 권장CSS 속성을 적용할 대상을 선택하는 방법
* { }
h1 { }
div { }
section, h1 { }
#id
로 입력하여 선택#only { }
.class
로 입력하여 선택. 같은 class를 가진 모든 요소를 선택함.widget { }
.center { }
a[href] { }
p[id="only"] { }
p[class~="out"] { }
p[class|="out"] { }
section[id^="sect"] { }
div[class$="2"] { }
div[class*="w"] { }
header > p { }
예시
<header>
<p> <!-- 선택 -->
<span>
<p></p>
</span>
</p>
<p> <!-- 선택 -->
<span>
<p></p>
</span>
</p>
</header>
header p {}
예시
<header>
<p><!-- 선택 -->
<span>
<p><!-- !!선택!! -->
</p>
</span>
</p>
<p><!-- 선택 -->
<span>
<p><!-- !!선택!! -->
</p>
</span>
</p>
</header>
section ~ p { }
예시
<header>
<section></section>
<p></p> <!-- 선택 -->
<p></p> <!-- 선택 -->
<p></p> <!-- 선택 -->
</header>
section + p { }
예시
<header>
<section></section>
<p></p> <!-- 선택 -->
<p></p>
<p></p>
</header>
a:link { } /*사용자가 방문하지 않은 <a>요소를 선택합니다.*/
a:visited { } /*사용자가 방문한 <a>요소를 선택합니다. */
a:hover { } /* 마우스를 요소 위에 올렸을 때 선택합니다. */
a:active { } /* 활성화 된(클릭된) 상태일 때 선택합니다. */
a:focus { } /* 포커스가 들어와 있을 때 선택합니다. */
input:checked + span { } /*체크 상태일 때 선택합니다. */
input:enabled + span { } /*사용 가능한 상태일 때 선택합니다. */
input:disabled + span { } /*사용 불가능한 상태일 때 선택합니다. */
p:first-child { }
ul > li:last-child { }
ul > li:nth-child(2n) { }
section > p:nth-child(2n+1) { }
ul > li:first-child { }
li:last-child { }
div > div:nth-child(4) { }
div:nth-last-child(2) { }
section > p:nth-last-child(2n + 1) { }
p:first-of-type { }
div:last-of-type { }
ul:nth-of-type(2) { }
p:nth-last-of-type(1) { }
input:not([type="password"]) { }
div:not(:nth-of-type(2)) { }
input[type="text"]:valid { }
input[type="text"]:invalid { }