<link>
태그 안에서 href
속성을 통해 파일을 연결한다.<link rel="stylesheet" href="index.css" />
[코드] link 태그와 link 태그의 속성
<link>
요소는 HTML 파일과 다른 파일을 연결하는 목적으로 사용한다. <link>
요소의 rel
은 연결하고자 하는 파일의 역할이나 특징을 나타낸다. stylesheet
이므로 rel
속성에 stylesheet
를 추가한다. href
속성에는 파일의 위치를 추가해야 한다. 똑같은 구조에 다른 스타일을 적용하면 완전히 다른 스타일로 탈바꿈할 수 있다.
새로운 CSS 파일을 layout.css
라는 이름으로 만들고 다음의 내용을 붙여넣고 이 CSS 파일을 연결하기 위해 새로운 <link>
요소를 추가한다.
layout.css
파일은 index.css 파일과는 달리 HTML 요소를 배치하는 역할을 한다.
<link rel="stylesheet" href="index.css" />
<link rel="stylesheet" href="layout.css" />
[코드] index.html 파일에 새로운 link 요소를 추가한다.
codepen <-작성한 코드 확인
<style>
요소 내에 작성하는 내부 스타일 시트 <nav style="background: #eee; color: bule">...</nav>
[코드] css 스타일 적용법 중 인라인 스타일
<h4>
나 <p>
요소가 여럿 존재하다<h4>
요소에만 색을 바꾸려면 어떻게 해야 할까?.red{
color: #ff0000;
}
[코드] red class의 color 속성에 #ff0000 값을 할당한다.
navigation section에만 적용하려고 했던 의도와는 달리 aside section의 <h4>
요소에도 변경한 색상이 적용했고 navigation section 아래의 <h4>
요소를 정확하게 선택하기 위해서는 이 엘리먼트에 id를 붙여서 해결할 수 있다. 이름을 붙일 때는 가능한 의미를 담아서 구분할 수 있도록 한다. id가 있는 요소를 선택할 때는 #기호를 이용한다. id는 하나의 문서에서 한 요소에만 사용해야 한다.
<h4 id="navigation-title">This is the navigation section.</h4>
[코드] h4 요소에 id를 붙인다.
#navigation-title {
color: red;
}
[코드] id로 요소를 선택해 스타일링한다.
id와 유사하게 특정 요소에 class를 지정하는 방법도 있다. 이번에는 navigation section의 자식 <li>
요소에 밑줄을 쳐보려고 한다. 일단 <li>
요소를 선택해 스타일링해보자.
li {
text-decoration: underline;
}
[코드] li 요소에 밑줄을 한다.
동일한 기능을 하는 CSS를 여러 요소에 적용하기 위해서는 class를 사용해야 한다. navigation section의 모든 <li>
요소에 동일한 class를 추가하면 동일한 스타일을 여러 요소에 적용할 수 있다. class는 #
이 아닌 .
을 이용해 선택해야한다.
<ul>
<li class="menu-item">Home</li>
<li class="menu-item">Mac</li>
<li class="menu-item">iPhone</li>
<li class="menu-item">iPad</li>
</ul>
[코드] 여러 요소에 같은 스타일링을 적용하기 위해서는 class를 사용한다.
.menu-item {
text-decoration: underline;
}
[코드] class menu-item을 선택하여 밑줄을 적용한다.
여러 class를 하나의 요소에 적용해볼려고한다. 여러 class를 하나의 요소에 적용하기 위해서는 띄어쓰기로 적용하려는 class들의 이름을 구분해야한다. 다음 예제를 통해
<li class="menu-item selected">Home</li>
[코드] 하나의 요소에 여러 class를 적용하는 방법
.selected {
font-weight: bold;
color: #009999;
}
[코드] 특정 클래스(selected)를 통해 요소를 스타일링하는 모습
id | class |
---|---|
한 문서에 단하나의 요소에만 적용 | 동일한 값을 갖는 요소 많음 |
특정 요소에 이름을 붙이는데 사용 | 스타일의 분류(classification)에 사용 |
color
이다..box {
color: #155724; /* 글자 색상 */
background-color: #d4edda; /* 배경 색상 */
border-color: #c3e6cb; /* 테두리 색상 */
}
[코드] 글자, 배경, 테두리의 색상은 각기 다른 속성을 가지고 있다.
font-family
이다..emphasize {
font-family: "SF Pro KR", "MalgunGothic", "Verdana";
}
[코드] font-family 속성을 통해 글꼴(폰트)을 설정할 수 있습니다.
font-size
속성을 사용한다..title {
font-size: 24px;
}
[코드] 글자 크기를 24px로 적용한다.
font-weight
text-decoration
letter-spacing
line-height
가로로 정렬할 경우 text-align
을 사용하며 유효한 값으로는 left
, right
, center
, justify
(양쪽 정렬)가 있다.
세로로 정렬할 경우에는 문제가 조금 복잡하다. vertical-align
속성을 쉽게 떠올릴 수 있지만 이 속성은 부모 요소의 display
속성이 반드시 table-cell
이어야 한다.
<center>
, <font>
를 사용하지 말아야 하는 이유HTML의 초기에는 스타일을 별개로 정의한다는 컨셉이 없었다. 그래서 <center>
가운데 정렬</center>
혹은 <font color="#ff0000">
빨간 글자</font>
와 같이 사용했다. 그러나 지금은 관심사 분리
는 패러다임을 적용하여 더 이상 이 태그(<center>``</center>
, <font>``</font>
)를 사용하지 않는다.
관심사 분리
: 관심사 분리는 컴퓨터 프로그램을 구별된 부분으로 분리시키는 디자인 원칙으로 각 부문은 개개의 관심사를 해결한다.
글꼴 크기, 화면 크기 등 크기를 다룰 때는 크기의 단위가 무엇보다 중요하다. 크기의 단위는 절대 단위와 상대 단위, 두 가지로 구분할 수 있다.
px
, pt
등%
, em
, rem
, ch
, vw
, vh
등기기나 브라우저 사이즈 등의 환경에 영향을 받지 않는 절대적인 크기로 정하는 경우
px
(픽셀)을 사용한다. 픽셀은 크기가 고정된 절대 단위이기 때문에 사용자 접근성이 불리하다. 글꼴의 크기를 픽셀로 설정하면 작은 글씨를 보기 힘든 사용자가 브라우저의 기본 글꼴 크기를 더 크게 설정하더라도 글꼴의 크기는 항상 설정된 픽셀로 고정된다.
일반적인 경우
상대 단위인 rem
을 추천한다. root의 글자 크기, 즉 브라우저의 기본 글자 크기가 1rem이며 두 배로 크게 하고 싶다면 2rem, 작게 하려면 0.8rem 등으로 조절해서 사용할 수 있다. 이는 사용자가 설정한 기본 글꼴 크기를 따르므로 접근성에 유리하다.
줄 바꿈이 되는 박스(block) vs. 옆으로 붙는 박스(inline, inline-block)
<div>
, <p>
<span>
p {
border: 1px solid red;
}
p {
margin: 10px 20px 30px 40px;
}
p {
margin: 10px 20px;
}
p {
margin: 10px;
}
p {
margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px;
}
p {
margin-top: -2rem;
}
p {
padding: 10px 20px 30px 40px;
}
p {
padding: 10px 20px 30px 40px;
border: 1px solid red;
background-color: lightyellow;
}
overflow: auto;
값은 스크롤을 자동 생성overflow: hidden;
값은 넘치는 콘텐츠를 감춘다.overflow-x
, overflow-y
속성은 auto
, hidden
, scroll
값을 이용해 가로 방향이나 세로 방향으로 스크롤을 지정할 수 있다.p {
height: 40px;
overflow: auto;
}
content-box
는 박스의 크기를 측정하는 기본값이다. 그러나 대부분의 레이아웃 디자인에서 여백과 테두리를 포함하는 박스 크기 계산법인 border-box
를 권장한다.레이아웃을 디자인 할 때 모든 요소를 선택하는 셀렉터인 *
에 box-sizing
속성을 추가하고, border-box
라는 값을 추가하면 디자인이 훨씬 더 쉽다.
* {
box-sizing: border-box;
}
* { }
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"] { }
자식 셀렉터는 첫 번째로 입력한 요소의 바로 아래 자식인 요소를 선택한다.
따라서 같은 <p>
태그라도 <span>
요소의 자식인 <p>
요소는 선택되지 않는다.
header > p { }
ex)
<header>
<p> <!-- 선택 -->
<span>
<p></p>
</span>
</p>
<p> <!-- 선택 -->
<span>
<p></p>
</span>
</p>
</header>
<header>
요소의 자식의 자식인 <p>
요소까지 모두 선택된다.header p {}
ex)
<header>
<p><!-- 선택 -->
<span>
<p><!-- !!선택!! -->
</p>
</span>
</p>
<p><!-- 선택 -->
<span>
<p><!-- !!선택!! -->
</p>
</span>
</p>
</header>
형제 셀렉터
<section>
요소 뒤에 있는 세 개의 <p>
요소를 모두 선택한다.section ~ p { }
ex)
<header>
<section></section>
<p></p> <!-- 선택 -->
<p></p> <!-- 선택 -->
<p></p> <!-- 선택 -->
</header>
<section>
요소 뒤에 있는 세 개의 <p>
요소 중 첫 번째 <p>
요소를 선택한다.section + p { }
ex)
<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 { } /*사용 불가능한 상태일 때 선택한다. */