CSS는 웹페이지 스타일 및 레이아웃을 정의하는 스타일시트 언어이다.
HTML로 구조를 잘 세우고 나서, CSS로 UI및 레이아웃을 구성하여
웹페이지를 완성할 수 있다.
사용자와 컴퓨터가 교류할 수 있는 연결고리 / 매개체
사용자가 어떤 시스템을 이용하면서 느끼고 생각하게 되는 총체적 경험
<!-- id 이용 -->
<!-- CSS -->
#navigation-title {
color: red;
}
<!-- HTML -->
<h4 id="navigation-title">This is the navigation section.</h4>
<!-- class 이용 -->
<!-- CSS -->
.menu-item {
text-decoration: underline;
}
<!-- HTML -->
<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>
id | clasee |
---|---|
# 으로 선택 | . 으로 선택 |
한 문서에 단 하나의 요소에만 적용 | 동일한 값을 갖는 요소 많음 |
특정 요소에 이름을 붙이는 데 사용 | 스타일의 분류에 사용 |
px
, pt
등%
, em
, rem
, ch
, vw
, vh
등px
(픽셀)을 사용
픽셀은 크기가 고정된 절대 단위이기 때문에 사용자 접근성이 불리하다.
글꼴의 크기를 픽셀로 설정하면 작은 글씨를 보기 힘든 사용자가 브라우저의
기본 글꼴 크기를 더 크게 설정하더라고 글꼴의 크기는 항상 설정된 픽셀로 고정된다.
픽셀은 인쇄와 같이 화면의 사이즈가 정해진 경우에 유리함
rem
을 추천
브라우저의 기본 글자 크기가 1rem이며 두배로 크게 하고 싶다면 2rem
작게하려면 0.8rem 등으로 조절해서 사용 가능하다.
사용자가 설정한 기본 글꼴 크기를 따르기 때문에 접근성에서 유리함
em
은 부모 엘리먼트에 따라 상대적으로 크기 변하기 때문에 계산이 어려움
따라서, root 글자 크기에 따라 상대적으로 변하는 rem
이 사용 편리
반응형 웹 : 데스크탑, 스마트폰, 태브릿 등 디바이스의 width
에 따라
유동적인 레이아웃이 적용되는 웹사이트
디바이스의 크기를 나누는 기준을 보통 px
로 하기 때문에 px
사용
vw
, vh
을 사용
화면을 가득 채우며 딱 떨어지게 스크롤 되는 사이트 구현할 때 사용한다.
예시사이트
https://www.tesla.com/
https://www.krause.studio/#one
https://redredefined.preciosacomponents.com/
<h1>
<p>
-> block 박스<span>
-> 인라인 박스border-width
(테두리 두께)border-styple
(테두리 스타일)border-color
(테두리 색상)각 속성은 padding에도 적용됨!
p {
margin: 10px 20px;
}
p {
margin: 10px 20px;
}
p {
margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px;
}
overflow
속성에 auto
값을 사용하면 됨
p {
height: 40px;
overflow: auto;
}
➡️ 레이아웃 관련 이야기를 할 때 border-box
기준으로 한다.
처음 레이아웃 디자인을할 때 박스에적용할 여백을 고려하지 않고 박스의 크기를
디자인 하는 실수를 많이 할 수 있는데
박스의 크기를 크기를 디자인 할 때 콘텐츠 영역만 고려한다면
개발 과정에서 처음 생각한 레이아웃을 벗어날 수 있다
따라서, 꼭 여백을 고려한 레이아웃 디자인을 해야한다!
* {
box-sizing: border-box;
}
➡️ 이렇게 모든 요소에 속성을 적용한다면,
모든 박스에서 여백과 테두리를 포함한 크기로 계산이 된다.
*
h1
, div
등 복수 선택 가능#id
.class
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 { }