css 3
?
w3c에 의한 권고안이 나온다.
css Lv.3부터 모듈별로 versioning을 따로 한다.
내부 많은 태그와 법칙이 있는데 이를 특징별로 카테고리화 하여 모듈화한다. 그리고 각 모듈별로 각자의 versioning을 진행하고 있다.
=> 브라우저별로 지원범위가 다를 수 있다.
css는 룰 기반(Rule-based)언어
css를 통해 특정요소, 혹은 특정요소들의 집합의 스타일 규칙을 정의할 수 있다.
h1 {
color:red;
}
h1 -> selector
선언부 {
속성 : 값;
속성 : 값;
}
css의 주석 -> / * 내용 * /
1. 내부 스타일 (Embedded)
2. 인라인 스타일 (Inline)
3. 외부 스타일 (External)
태그 head 안의 태그 style 내부에 css 문법을 작성한다.
브라우저가 style 태그를 만나면 내부 코드를 css 문법을 적용하여 인식한다.
하나의 요소에만 스타일을 적용하고 싶을 때 사용한다.
원하는 하나의 요소 내에 style을 사용하여 작성하고 여러 속성(color:red;)을 적용할 경우 ;을 사용하여 중첩할 수 있다.
인라인 스타일을 사용하면 임베디드 스타일이나 외부 css 파일을 연결하는 것보다 우선 적용되지만 이는 css 파일을 분리하는 이유(유지 보수)에 반대되기 때문에 특정 상황 외에는 사용을 지양하는 것이 좋다.
외부 스타일은 html 파일과 css 파일을 구분하여 만들고 html 파일 내부에 css 파일을 태그 link로 불러와 연결하여 사용하는 것으로
<link rel="stylesheet" href="style/main.css"/>
1. 스타일 우선순위
2. 스타일 상속
브라우저에서 정의된 css
-> 개발자가 선언한 css
-> 사용자가 구성한 css
Tag
-> Class
-> Id
-> 인라인
🚨 복합 선택자
css에서 div.new-style{}
는 div 요소에 적용되는 거고,
div(띄고).new-style{}
이면
div의 자식요소 전부에 적용된다.
type 셀렉터
사용하고자 하는 위치에 Tag명 (h1,ol,p...)을 기재하고 선언부에 표현한다.
type 셀렉터를 사용하는 경우는 페이지 전체에 동일하고 일관적인 표현을 하고 싶을 때 사용하는 것이 좋다.
그래서 주로 type 셀렉터는 제일 우선 적용되는 요소이기 때문에 css 파일 상단부에 위치해있는다.
h2 {
color: #eeee;
}
type 셀렉터가 아니면 어떻게 선택하는가?
class 셀렉터
와 id 셀렉터
를 사용한다.
id 셀렉터
는 전역속성(global Attribute) 중 하나인 id를 사용한다.
id는 일종의 '이름표'로 해당 요소에게만 적용되는 이름표를 붙여주어 선택하고 이 '이름표'는 같은 html 파일 내에 동명의 id가 붙으면 안된다.
#medium-title {
font-size: 12px;
}
해당 코드의 id인 #medium-title 은 파일 내 유일한 id명이다.
class 셀렉터
는 id처럼 unique한 성질이 요구되지는 않는다.
동일한 class명이 다수의 태그에 사용될 수 있고 id처럼 전역속성으로 어떤 태그에도 사용할 수 있다.
class 셀렉터는 중첩되어 사용 가능하여 스페이싱
으로 여러개의 다른이름의 class명 css를 적용 시킬 수 있다.
<h3 class="blue green">
.blue {
color: blue;
}
.green {
color: deepgreen;
}
다만 위 같은 경우는 캐스캐이딩 원칙에 의해 마지막에 작성된 css가 적용된다.
<a href="http://example.com" targer="_blink"/>
<a href="http://example.org" targer="_blink"/>
<a href="https://example.com"/>
<a href="https://example.org"/>
위와 같은 예시에서 [ target ] 이라는 속성을 가진 태그만 css를 주고 싶을 때
a[target] {
color: yellow;
}
특정 속성을 정하고 그 속성과 속성에 부여된 값이 일치하는 경우에 css가 적용되도록 하는 선택자
a[href="https://example.org"]{
color: purple;
}
보통 input에서 type으로 차이가 나는 경우 적용한다.
a[href^="https"]{
color: pink;
}
내가 입력한 value값으로 '끝나는' 값이 있으면 적용하도록 하는 선택자.
a[href$=".com"]{
color: sienna;
}
내가 입력한 value값을 '가지고있으면' 적용하도록 하는 선택자.
a[href*="example"]{
color: sienna;
}
기존
selector { property : value; }
가상
selector:________ { property : value; }
selector 뒤에 조건을 붙여 범위를 더 축소하여 적용하는 셀렉터.
범위를 줄이는 조건은 다양하다.
여러 개의 동일한 태그 중 첫번째 태그에만 적용된다.
li:first-child {
color: green;
}
.movie:first-child {
font-size: 20px;
}
🚨 주의 🚨
first-child는 해당 조건이 포함된 태그가 부모로 둔 태그의 첫번째 자식을 의미한다.
뭔말인지 애매하고 이상하지만 그렇다.
<ul>
<li class="dessert">아이스크림</li>
<li class="dessert">고등어구이</li>
<li class="dessert">크로와상</li>
</ul>
.dessert:first-child {
fonr-size: 25px;
}
이 상황에서 아이스크림
의 class를 없애면
고등어구이
에 적용되는 것이 아니라
아무런 태그도 적용되지 않는다.
'dessert'라는 class를 갖고 있는 요소는 li고, 이 li를 갖고 있는 부모태그는 ul이다.
그리고 ul의 자식요소들 중 첫번째에게 적용되는 것이 first-child 인 것 같다
여러 개의 동일한 태그 중 마지막 태그에만 적용된다.
li:nth-child(조건) {
color: darkgray;
}
저기서 조건은 태그명이 될 수도있고, 숫자가 될 수도 있다.
숫자의 경우 1,2,3... 이면 li 태그 중에 1,2,3...번째 li태그에 적용할 수 있고, 1n, 2n, 3n...이면 10번대 20번대 인 태그 전부에 적용된다. 만약 지정한 조건보다 실제 태그가 적다면 표현되지 않는다.
<section>
<div>apple</div>
<p>banana</p>
<p>caret</p>
<p>dragon</p>
<div>evil</div>
</section>
first-child 에서 발생한 문제점/주의점 을 약간이나마 보완할 수 있는 first-of-type
first-child
는 형제 관계 태그들 중에서 첫번째 태그를 찾는 것인데,p:first-child
는 형제관계 태그들 중 첫번째 태그가 p일 경우만 적용이 된다.(첫번째 태그가 div, span 등 p가 아니면 적용 안됨)p:first-of-type {
color: red;
}<section> <div>apple</div> <p>banana</p> ==========> 얘만 red가 된다. <p>caret</p> <p>dragon</p> <div>evil</div> </section>
다른 type을 갖고있는 동일 class에 적용하면 어떻게 될까?
.dessert:first-of-type {
color: red;
}<section> <div class="dessert">apple</div> ==========> 얘도 red가 된다. <p class="dessert">banana</p> ==========> 얘도 red가 된다. <p class="dessert">caret</p> <p class="dessert">dragon</p> <div class="dessert">evil</div> </section>
class="dessert" 를 갖고있는 태그들 중에
div와 p 타입의 첫번째 애들이 적용되게 되는 것이다.
last-child와 동일하게 사용할 수 있다.
nth-child와 동일하게 사용할 수 있다.
selector1 : not (selector2) { }
selector1 을 기준으로 먼저 요소를 고르고, 그 안에서
selector2 에 해당하는 요소를 제외한 나머지를 선택한다.
<form> <input type="text" placeholder="name"/> <input type="mail" placeholder="e-mail"/> <input class="pw" type="password" placeholder="password"/> <input type="submit"/> </form>
input:not(.pw) { background-color: indianred; } class명을 괄호( ) 안에 넣거나 또는 input:not([type=submit][placeholder]) { background-color: indianred; } [] 안에 원하는 조건을 넣을 수 있다
< a > 태그는 href로 하이퍼링크를 연결하며
별도의 css 스타일링이 없어도 하이퍼링크는 특정 css가 적용된다.
이때 두가지 버전이 존재하는 데 하나는 하이퍼링크 자체의 css이고
다른 하나는 하이퍼링크를 클릭해 방문했을 경우의 css이다. (크롬 방문기록 기반)
하이퍼링크 적용
하이퍼링크 적용
a:link {
color: tamato;
}
a:visited {
color: lemongreen;
}
특정 요소에 마우스를 올리거나(hover) 클릭 하거나(active) input이 주어졌을 때(focus)
css가 변경되어 사용자가 쉽게 인식하도록 만들어 준다.
마우스를 요소 위에 올릴 때
마우스를 눌렀다가 떼어내는 시점까지.
active 스타일링이 들어가도 :link , :hover , :visited 가 우선 적용된다. (LVHA 순서 적용)
Tab키를 사용한 focusing
Input 창에 입력 키가 활성화 되었을 때
활성화, 비활성화
<div>
<input type="text"/>
<input type="text" enabled/>
<input type="text" disabled/>
</div>
radio 나 checkbox가 선택 된 때 적용된다.
🚨 가상요소 선택자는 반드시
content: "";
를 적어야 적용 시작된다. 빈 값이라도 넣어줘야 눈으로 볼 수 있다. html 상에 적용되는 것은 아니지만 css 스타일링으로 표현하는 것.
::first-letter
문장의 첫번째 글자에 대한 스타일링을 할 수 있다.
🚨 ::before 요소와 함께 사용하면 before가 적용시키는 content: "텍스트"; 가 문장의 첫번째 요소로 인식되어 '텍' 이 스타일링 된다.
::first-line
첫 문장에 대해 스타일링 할 수 있다.
이때, 첫 문장은 브라우저에서 개행돼 보이는 첫 문장이므로,
브라우저 크기가 변경되면 첫 문장의 범위도 달라진다.
::selection
텍스트 요소 중 드래그 하며 블록화 한 부분에 대한 스타일링이다.
하위( ) 자식(>) 형제(~) 인접 (+)
ul li{
color: red;
}
앞쪽 선택자 범위 내에서 뒤쪽 선택자를 찾는다.
ul>li{
color: red;
}
자식(>)은 바로 아래의 자식에게만 스타일링을 적용할 수 있다.
자식의 자식에게는 적용되지 않는다.
형제(~)
형제 요소 중 앞에 요소 뒤에 오는 태그 중 고른다.
인접(+)
형제 요소 중 앞에 오는 요소 바로 뒤에 오는 태그를 고른다.
그룹화
여러개의 선택자를 , 콤마 로 연속 선택하여 하나의 css를 적용할 수 있다.
*는 범용 선택자, 전체 선택자, 와일드카드 라고 불리며
html 전체에 적용되는 스타일링을 작성할 수 있다.
css 최상단에 작성하는 것이 좋다.
div > * {css}
해당 경우에는 div 뒤에 오는 모든 요소에 적용된다.
부모로 부터 상속되는 속성을 제거, 초기값으로 돌린다.
부모의 속성만 상속받는다.
상속되는 부모의 속성이 있으면 받고 없으면 초기화된다.
선언된 곳
css 가 외부 스타일 시트를 내부 < style > 태그 보다 위 또는 아래에 선언하는지에 따라 적용 우선순위가 달라지고, 태그 내부 인라인 스타일을 주는 것이 가장 우선도 높게 적용된다.
명시도 (적용범위가 적을수록 명시도가 높다.)
inline style > id > class = Attibute = pseudi class > type(tag) > * > inherited
이 모든 스타일을 이기는 것이 !important
진짜 급한 것 아니면 안쓰는게 좋다.
코드의 위치 (뒤에 선언된 코드가 적용된다.)
<div>
<p class="default">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Provident porro ex ad impedit asperiores veniam quia numquam.
Esse minima et reiciendis ipsum facere ad ullam,
nulla repellat quaerat repellendus ipsam.
</p>
</div>
<div>
<p class="text">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Provident porro ex ad impedit asperiores veniam quia numquam.
Esse minima et reiciendis ipsum facere ad ullam,
nulla repellat quaerat repellendus ipsam.
</p>
</div>
.text{
font-size: 12px;
//font-size는 기본 브라우저 16px이다.
//MDN을 확인하면 font-size로 사용 가능한 다양한 단위가 있다.
}
.text{
font-style: italic;
// 또는
font-style: oblique;
}
// 폰트에 따라 표현이 조금 다른 정도.
// 기본값은 nomal
/* Keyword values */
font-weight: normal;
font-weight: bold;
/* Keyword values relative to the parent */
font-weight: lighter;
font-weight: bolder;
/* Numeric keyword values */
font-weight: 100;
font-weight: 200;
font-weight: 300;
font-weight: 400; /* normal */
font-weight: 500;
font-weight: 600;
font-weight: 700; /* bold */
font-weight: 800;
font-weight: 900;
/* Global values */
font-weight: inherit;
font-weight: initial;
font-weight: revert;
font-weight: revert-layer;
font-weight: unset;
/* A font family name and a generic family name */
font-family: Gill Sans Extrabold, sans-serif;
font-family: "Goudy Bookletter 1911", sans-serif;
/* A generic family name only */
font-family: serif;
font-family: sans-serif;
font-family: monospace;
font-family: cursive;
font-family: fantasy;
font-family: system-ui;
/* Global values */
font-family: inherit;
font-family: initial;
font-family: unset;
📍폰트에 따라 line-height가 달라서 글자가 중구난방이 될 수 있기 때문에 line-height를 맞춰주면 글씨가 고르게 보일 수 있다.
line-height MDN
.text{
font: iralic 700 20px/1.2 'san-selif'
}
.text{
font: *size *family
}
📍
*size *family 는 필수값
^style ^wieght 는 선택값. size 앞에 적어야 함.
#line-height 는 선택값. size 뒤에 /숫자 로 적어야 함.
font 를 적으면 그보다 먼저 적용되는 size, family, style 등의 값들은
font 가 선언되면서 초기화 된다. 그러므로 font를 적을 때 선택값이라 적지 않았어도
font 위에 선언된 값이면 사용에 주의해야 한다.
font 뒤에 선언된 값이면 cascading 원칙에 따라 적용됨.
letter-spacing
글자 간의 간격
word-spacing
글자 간의 간격
.text{
letter-spacing: nomal;(기본) 5px;(nomal값 + 5px) (-n 도 가능하다.)
word-spacing: nomal;(기본) 8px; 120%; -4px;
}
문장 정렬.
.text{
text-align : center; // 중앙정렬
text-align : left; // 왼쪽정렬
text-align : right; // 오른쪽정렬
}
📍 text-align 은 적용 요소가 block 요소 여야 가능하다.
<p>는 적용되지만 <span>은 적용 안된다.
inline 요소에 text-align을 적용하고 싶다면 상위에 div같은 block요소를 만들고 적용하면 된다.
들여쓰기. 긴 문장의 앞을 들여쓰기 할 수 있다.
기본값 0;
inherit : yes 상속된다.
block 요소만 적용 된다.
n% 로 적용할 경우 브라우저 가로 길이의 %로 적용된다.
font와 다르게 순서에 상관없이 적을 수 있다.
.text{
text-decoration : underline/line-through/overline color solid/wavy/dotted/double 굵기-1px;
}
multiful 적용이 가능하여 wavy wavy / solid dotted 처럼 중첩 가능하다.
단, 중첩. 멀티풀 적용일 때는 붙여서 써야 한다. dotted 2px dotted (x)
기본값
word-break 적용
사용할 수 있는 언어가 한정적이다.
text–transform MDN
MDN에서 보면 < length > 처럼 태그 안에 적힌 것은 단위가 있는 숫자를 넣으면 된다는 뜻.
반대로 number 처럼 태그 없이 적힌 것은 말 그대로 숫자를 넣으면 된다는 뜻.
auto 도 동일하게 auto 그대로 적으면 된다.
percentage 도 10%
길이 = 상대길이 / 절대길이
상대길이 : 기준점이 있고 그에 따라 변화하며 정해진다.
예_ em, rem, vh, vq, vmin, vmax ...
절대길이 : 브라우저에 그대로 보이는 값.
예_ px, cm, mm, in(인치) ...
절대길이 : 브라우저에 그대로 보이는 값.
예_ px, cm, mm, in(인치) ...
주의) 실생활에 사용하는 cm, mm, in(인치) 같은 것들은 브라우저 상에서는 픽셀단위로 변화해서 보여지므로 되도록 사용하지 않도록 한다.
📍 절대길이는 사용자 설정에 따르지 않기 때문에 접근성 문제를 유발할 수 있다. 그러므로 font-size를 설정할 때는 em,rem을 사용하는게 좋다.
em
부모 속성에서 적용된 font-size 크기를 기준으로 사용한다.
rem
최상위 부모(:root)인 html,body에 적용된 font-size를 기준으로 사용한다.
뷰포트 단위
브라우저의 크기에 따라 보여지는 %를 적용한다.
vw = width에 대한 view
vh = height에 대한 view
뷰포트 단위
디바이스의 가로모드, 세로모드에 따라 길이가 교환된다.
vmin은 각 모드에서 작은 부분
vmax는 각 모드에서 큰 부분을 말한다.
부모요소의 값을 기준(100%) 으로 자식이 %를 적용할 수 있다.
calc(calculate)
단위를 복합하여 계산식을 작성할 수 있다.
calc(100% - 30px + 1em * 1)
width: min(100%, 200px);
괄호 안에 값 중 디바이스와 비교해 더 작은 값을 적용한다.
max() 도 동일. 더 큰 값을 적용한다.
📍 [ margin collapsing ] 마진 상쇄 현상
마진상쇄, 마진겹침, 마진중복
: 여러 블록(block) 요소들의 위아래 margin이 경우에 따라 더 큰 margin에 결합(상쇄) 되는 현상.
: inline 요소에서 는 발생하지 않는다. 애초에 inline 요소는 margin top/bottom을 설정할 수 없다.
관련 글로 이동 inline요소와 block요소에 margin 적용
박스 모델에서 border을 기준으로 안쪽에 여백을 뜻한다.
작성법은 margin과 동일하나 margin처럼 마진상쇄가 있지는 않다.
margin은 음수(-n)가 가능하지만 padding은 양수(+n)만 가능하다.
박스모델에서 외부여백 margin과 내부여백 padding 사이의 값.
기본값은 none;으로 적용 시 해당 두께만큼이 적용된다.
border 속성은 width style color을 갖는다.
모든 속성은 4방향 모두 각기 개별 적용이 가능하다.
border VS outline
outline는 버튼같은 요소의 focus가 들어갔을 때 선택되는 요소이다.
border-radius
border 속성의 테두리 경계의 꼭지점을 둥글게 만든다.
px 같은 절대 단위를 입력하면 꼭지점에 해당 px만큼의 반지름을 갖고있는 원의 곡선만큼이 꼭지점 값으로 들어간다.
즉, w,h의 절반값을 입력하면 원형을 만들 수 있다.
해당 요소도 꼭지점마다 개별 설정이 가능하다.(좌상-우상-우하-좌하)
box-sizing은 요소의 width와 height를 계산하는 방법을 정한다.
예를 들어 w:300px h:200px의 박스가 있다. 이 박스는 설정값 그대로 w:300px h:200px의 너비와 높이를 갖고있다.
이때 border: 30px solid red; 를 주면 박스의 width와 height는 몇 px이 될까?
사진에서 확인할 수 있듯이 총 너비와 높이는 (박스의 크기 + 양쪽 border 두께) 가 되게 된다. 이는 box-sizing 의 기본값인 content-box일 때의 경우다. 이렇게 되면 원하는 모양이 나오지 않을 수 있다. 이런 경우의 해결책으로 border-box가 있다. content-box와 반대로 border 값을 주면 border값을 포함한 만큼을 박스의 width,height 값으로 만들기 위해 내부 content 요소가 들어가는 공간을 조정한다. (박스의 크기 + 양쪽 border 두께) = 박스의 크기 가 되는 것이다.
html요소는 태어날 때부터 레이아웃 속성을 갖고 있고 display를 통해 이 속성을 변경할 수 있다.
inline : ex_span...
-> 영역의 크기가 내부 콘텐츠 크기로 정해진다.
-> mrgin, padding의 top/bottom이 적용되지 않는다.
-> 여러 요소가 가로 배치 된다.
block : ex_div...
-> 영역의 크기를 width, height를 지정할 수 있다.
-> width를 지정하지 않으면 가로 전체를 차지한다.
-> 여러 요소가 세로 배치 된다.
inline-block : ex_input...
-> 영역의 크기를 width, height를 지정할 수 있다.
-> 여러 요소가 가로 배치 된다.
display : none;
코드 상에서는 존재하지만 화면에는 보이지 않는다.레이아웃 자체를 빼는 것이므로 주변 요소들이 해당 자리를 메꾼다.
visbility: hidden;
문서의 레이아웃을 건드리지 않고 요소를 보이거나 숨긴다. 레이아웃은 존재하므로 해당 위치는 비어있게 된다.
normal flow에 맞춰 배치하고 현 위치를 기준으로 top, left, bottom, right로 이동할 수 있다.
position : static은 top, left, bottom, right(줄여서 tlbr)를 사용할 수 없지만 relative는 사용할 수 있다.
relative에서 top-bottom / left-right 처럼 반대되는 속성을 동시에 선언한 경우,
📍top-bottom 에서는 bnottom이, left-right 에서는 right가 무시된다.
normal flow에서 요소를 제외하고 페이지 레이아웃이 아닌 가장 가까운 부모요소를 기준으로 tlbr을 이동한다.이때 부모요소는 static이 아니다.
📍position : absolute인 요소는, 부모 요소들 중 position : static(기본값)이 아닌 요소를 찾아 기준점으로 삼는다.
만약 부모 요소들 중 position : static이 아닌 요소가 없다면 body를 기준점으로 삼는다.
normal flow에서 요소를 제외하고 페이지 레이아웃이 아닌 뷰포트 전체를 기준으로 한다.
즉 화면을 이동해도 position: fixed 가 적용된 요소는 뷰포트에 고정된 위치에 유지된다.
📍normal flow에 맞춰 배치되고 스크롤 되는 조상의 바로 다음 자식에게만 적용된다.
즉 스크롤 영역이 body인 경우 body 바로 아래 자식에게 position : stiky를 주면 적용되지만
자식의 자식에게는 position : stiky를 주어도 적용되지 않는다.
컨테이너에 width, height가 지정되어 있는 상태에서 내부의 content가 바깥 컨테이너보다 양이 많아 넘처흐를 때, 어떻게 처리할 것인지를 정하는 속성이다.
단축속성으로 overflow-x와 overflow-y를 함께 적을 수 있다.
z축의 순서를 정하는 것. z축은 3차원 입체형을 말하며, 브라우저 상에서는 종이가 겹쳐져 쌓이듯 위로 요소가 겹쳐지는 것을 말한다.
값은 상수를 받는다.
css에서 사용할 수 있는 color는 키워드(transparent(투명),blue, lightgray...)로 지정할 수 있고 HEX 넘버를 적거나 rgb, rgba 값을 통해 적용할 수 있다.
HEX : # _ _ _ _ _ _ 총 6자리의 값을 받으며 0~9+A~F를 사용해 16진수로 표현한다.
00이 가장 작고 FF가 가장 크다
6자리는 앞에서부터 두 자리씩 Red - - Green - - Blue - - 로 표현할 수 있다.
rgb : rgb(0, 0, 0); 0~255 까지의 숫자를 입력해 Red, Green, Blue 값을 넣어 색상을 표현할 수 있다.
rgba : rgb에서 alpha 값을 추가한다. 0~1 까지 입력할 수 있고 색상의 투명도를 조절할 수 있다. 1에 가까워질 수록 안보인다.
요소의 불투명도를 설정한다. 기본값은 1 이다. 0에 가까워질 수록 흐려져서 transparent에 가까워진다.
또한 rgba의 alpha값과 차이가 있는게 rgba는 background나 글자색에 영향을 주지만 opacity는 요소의 내용을 포함한 모든 곳에 영향을 준다.
background-image와 background-color가 동시에 있다면 background-image가 더 상위에 보여진다.
background-image 를 사용할 때 보여지는 width, height 를 채우기 위해 이미지가 반복되는데 이를 막기위해
background-repeat : repeat/repeat-x/repeat-y/no-repeat;
background-image 의 위치를 변경할 수 있다.
좌측 상단이 기본값으로 0 0 으로 표현할 수 있다. spacing을 통해 x y를 구분한다.
background-position : 100px 200px;
키워드로도 사용 가능하다.
background-position : center left;
background-position : left;
background-position : center; => center center와 동일하다.
background-origin은 배경의 기준점을 변경할 수 있다.
값은 border-box/ padding-box/ content-box를 받을 수 있다.
각 속성은 박스모델을 기준으로 적용되며
속성별로 border/padding/content의 좌상지점을 기준점으로 background-image가 이동한다.기본값은 auto로 이미지의 원본 크기를 갖는다.
auto/cover/contain/길이/퍼센트 를 받을 수 있다.
위에 배운 속성들을 gackground : 내부에 작성할 수 있다.
color 는 마지막에 적어야 한다. background : no-repeat url(../../) green;
size는 position 뒤에만 올 수 있고 /로 구분해야 한다. background : url(../../) center/80%
모든 값은 작성하지 않는 경우 초기값(initial state)를 갖기 때문에 주의하여 사용해야 한다.
박스모델은 그대로 유지하면서 크기변경, 회전, 기울기 등을 줄 수 있다.
다만 transform을 주어도 실제 width, height가 변화하는 것은 아니다.
여러 속성을 한번에 적용 시킬 수 있다.
변형은 오른쪽에서 왼쪽으로 진행된다.
transform : scale(배율);
transform : scale(x,y);
transform : scaleX(x값);
transform : scaleY(y값);
transform : rotate(angle);
angle = deg, trun...(45deg, 0.5turn...)
시계방향으로 90도 = 90deg = 0.25turn = 100grad = 1.5708rad
반시계방향으로 90도 = -90deg = -0.25turn = -100grad = -1.5708rad
transform : translate(x,y);
transform : skew(angle x,angle y);
transform과 별도로 사용된다.
initial값은 center;
top bottom left right나 px로 적용할 수 있다.
선제조건 A상태에서 B상태로 변환되는 시간동안의 상태를 보여주는 것이 transition이다.
시간개념의 추가
속성 : transition-delay / transition-duration / transition-property / transition-timing-function
A-css에서 B-css로 변환되는 시간에서,
'어떤요소가'
'얼마만큼의 시간동안'
변화하는지를 보여줄때
'어떤요소' 에 해당하는 것이 transition-property
transition-property : none; // 아무것도 바꾸지 않겠다.
transition-property : all; // 가지고 있는 모든 css를 바꾸겠다.
transition-property : margin-left; // 특정 css를 바꾸겠다.
transition-property : margin-right, color; // ,콤마를 이용해 하나 이상의 속성을 정할 수 있다.
A-css에서 B-css로 변환되는 시간에서,
'어떤요소가'
'얼마만큼의 시간동안'
변화하는지를 보여줄때
'얼마만큼의 시간동안' 에 해당하는 것이 transition-duration
transition-duration : 500ms;
transition-duration : 2s;
transition-duration : 1s,3s;
transition-property : padding-left, color;
📍 특정요소를 정해서 변화를 주려 한다면 해당 요소만 지정한 시간만큼 소요되며 변화하고
나머지 요소들은 빠르게 슈슉하고 변화한다.
이때 특정요소는 :hover에 적혀있는 요소이다.
변화되는 것을 지연시킨다.
해당 요소는 마우스 hover 시 1s 뒤에 0.8s에 시간에 걸쳐 배경이 blue->red로 변화된다. delay는 trigger되는 시간을 지정하여 순차적으로 변화하게 해서 애니메이션처럼 움직이는 것 같은 효과를 줄 수 있다.transition되는 과정 중에 fade-in, fade-out 시점을 정할 수 있다.
ease
ease-in
ease-out
ease-in-out
linear
transition : property-name duration(s) timing-fnction delay(s);
transition : margin-top 3s linear 2s;
transition : margin-left 4s 1s; // property-name duration(s) delay(s)
transition : padding-top 3s, color 2s;
transition : all 0.5s ease;