: Cascading Style Sheet
selector {
property: value;
}
❗️ 세미콜론(;) 빼먹지 말기
:html 태그 직접 지칭해서 쓰는 것
h1 {
color: blue;
}
: 여러개를 같은 속성으로 묶을 때 class 사용한다. class="box1 box2" 처럼 클래스명 여러개 부여 가능
.box1 {
color: white;
}
.box1.box2 {
color: red;
}
: 아이디는 단 한개만 존재한다. 고유명사
#test-id {
color: black;
}
: parend > child
: parent descendants
: parent + sibling
: 다음 한개 형제선택자만 선택할때
parent ~ sibling
: 다음부터 여러개의 형제선택자를 선택할때
: 구조적 가상 클래스!
: element:first-child
: element:list-child
: element:nth-child(n)
❗️n에 숫자말고 2n(짝수), 2n-1(홀수)로 표시 가능
: 동적 가상 클래스!
: 마우스를 갖다 댔을때
element:hover
: input같은곳에 눌러서 그 요소에 포커싱되었을때
element:focus
: 마우스를 누르는 찰나의 순간
element:active
: css는 기본적으로 나중에 선언된게 적용됨
그리고 아래의 우선순위를 가짐!
: content, padding, border, margin
: html의 기본적인 박스사이징은 content-box로 되어있는데 이렇게되면 나중에 css 작업할때 패딩주고 그러면 크기를 하나하나 계산해줘야함. 그래서 box-sizing: border-box;
로 해주면 계산하기 편함. width, height가 테두리까지 합한 영역으로 인식되기때문에 Padding을 설정하면 content 박스 크기는 자동으로 설정됨.
* {
box-sizing: border-box;
}
인라인 속성 가진 애들은 정렬할때 text-align
적용됨!
: block요소들을 가로배치 하기위해서!
: float된 자식요소들의 height도 다 제대로 차지하게된다.
: clear은 오로지 float로 인해 망가진 레이아웃을 고치기 위한 요소로 만들어진 속성
float: left
영향받지 않겠다!float: right
영향받지 않겠다!float: left|right
둘 다 영향받지 않겠다!❗️clear는 display가 block인 요소한테만 사용가능하다.
::before
, ::after
등등 여기에 clear: left;
처럼 clear속성 부여
❗️ 가상요소 css 줄때 반드시 content
속성 설정해야함 보통 공백으로 content: "";
많이 씀
매번 가상요소 추가하고 속성 설정하기 귀찮으니까 clearfix라는 클래스를 하나 만들어두고 html에서 필요한 요소에 클래스 추가하는게 편함!
.clearfix::after {
contnet: '';
display: block;
clear: left;
}
: 모든 요소의 기본 값
: float와 비슷하지만 원래 있던 자리가 사라지지않고 해당 요소만 왔다갔다해서 다른요소에 영향 주지않음.
: 약간 하자있는 붕 뜬 block 느낌! (float에는 inline만 float를 인식하는 성질이있는데 이부분빼고 다 동일하다.)
자신을 감싸는 여러 조상중에 자기가 기준으로 삼고싶은 요소를 정할 수 있다.
선택의 기준은 position이 static이 아닌 경우!
보통 position: relative;
를 많이 쓴다
: absolute와 동일한 현상. 하지만 자신의 기준점이 viewport로 명확하다!
: 상대적 위치를 잡게되면 박스시작점기준이라 미묘하게 가운데가 아니게되는데 그럴때 transform: translate
값을 -50%로 설정하기
: 포지션된 요소들을 수직방향 레벨 정해줄때 정수값으로 z-index값을주면됨. 쉽게 얘기하자면 층 수라고 생각하면된다.
: 정렬하고 싶은 요소들을 감싸고있는 부모한테 display: flex
값을 설정해줘야함!
.flexbox {
display: flex | inline-flex;
flex-direction: row | row-reverse | column | column-reverse;
flex-wrap: nowrap | wrap;
}
flex-wrap: nowrap
: 감싸지 않고 자식의 사이즈를 줄여서라도 한 줄로 정렬flex-wrap: wrap
: 한 줄에 다 정렬시킬 공간이 모자르면 여러줄을 만들어 정렬: flex를 사용하면 우리눈에는 보이지 않는 두개의 축이 생기는데 flex-direction 값을 어떻게 설정하냐에따라 axis방향이 달라짐
: Main axis 따라서 정렬하며 기본적인 center, flex-start, flex-end등을 비롯해 여러가지 값들을 설정할 수 있다.
: Cross axis를 기준으로 정렬할 때 사용한다.
flex-wrap: wrap
이여야 한다.: 아래는 기본 값들이라 css에 굳이 따로 적어주지 않아도 된다!
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: flex-start;
align-contents: flex-start;
: 마크업된 순서와 상관없이 마음대로 순서를 변경할 수 있다.
order: 1|2|3 •••
처럼 순서 지정해서 써주면 된다.
: 반응형 웹을 만들기 위해 반드시 알아야한다. 몇 픽셀 이상(min-width) 혹은 이하(max-width)일때 이 스타일을 적용해달라는 의미
@media screen and (min-width: 000px) {
/*조건이 만족할때 적용할 바뀌는 css만 다시 선언*/
}
: 반응형 만들때 제일 작은 모바일버전부터(아이폰5,se) 만들고 키워나가는게 수월하다.
: 텍스트를 디자인 하는것!
: 줄간격 단위로는 px, em, rem 전부 사용가능하나 em을 많이 쓴다!
❗️ px, rem을 쓸때는 단위까지 꼭 써줘야하지만 em일때는 단위표시 안함
: line-height가 얼마를 차지하든 글자는 줄간격의 가운데에 배치가 된다.
: px, em 단위 사용. em을 더 많이 쓴다. 하지만 line-height와 다르게 em 생략하면안되고 반드시 적어주어야한다.
@font-face
설정후 html파일과 연결하거나 style.css에 직접@import url("./fonts.css")
이렇게 import해준다. @font-face {
font-family: '폰트를 부를 이름';
font-style: normal;
font-weight: 400;
src: url('webfont.eot'); /* IE9 Compat Modes */
src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('webfont.woff2') format('woff2'), /* Super Modern Browsers */
url('webfont.woff') format('woff'), /* Pretty Modern Browsers */
url('webfont.ttf') format('truetype'), /* Safari, Android, iOS */
url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */
}
: 여기서 복붙 후 url의 경로&파일명만 수정
: 텍스트관련 css를 따로 만들어서 라이브러리처럼 각각 클래스로 정의한 후에
html에 클래스 지정해주면 관리하기가 쉽다.
: 배경!
: screen reader only! 좀 더 시맨틱하게 마크업하기 위해 sr-only
라는 클래스를 쓰며 css에서 안보이게 처리해준다.
.sr-only {
position: absolute;
z-index: -100;
width: 1px;
height: 1px;
overflow: hidden;
opacity: 0;
}
❗️display: none
을 쓰면 스크린리더도 못읽기 때문에 위처럼 안전하게 처리할것
: 스르륵!
property duration (timing-function) (delay)
❗️ Animation과의 차이점으로 transition은 이미 지정해놓은 css속성에 변화가 생길때 스르륵 전환되게 해주는것
: transition과는 달리 그냥 animation을 주고싶을때 주는거라 자유도가 좀 더 높다. 게다가 적어줘야할 값들이 transition보다는 많아서 property를 구분해서 쓰는것도 좋다.
@keyframes
로 정의한 이름@keyframes name {
from {
/* Rules */
}
to {
/* Rules */
}
}
: 규칙 h-offset v-offset blur spread color
: width, height값을 가진 요소 안에있는 자손들이 크기를 벗어났을때 어떻게 할까에 관한 css property
overflow: visible | auto | scroll | hidden
: 자유롭게 변형! 어떻게 옮겨지고 변형되어도 다른 요소들한테 영향주지않는다! 그 중 가장 많이 쓰이는 세가지는 아래와 같다.
: x축, y축으로 자유롭게 위치 이동.
translateX, translateY로 따로따로 지정가능
: 정수입력. 1보다 큰 값 입력하면 사이즈가 커지고 0과 1사이의 값을 넣어주면 작아짐. (x, y) 입력해서 가로 세로로 적용가능
: 각도 단위인 deg까지 입력해줘야함!
: 말 그대로 보이는지 안보이는지!
visibility: visible(기본값) | hidden
❗️visibility: hidden
vs display: none
visibility: hidden
: opacity가 0 인거랑 다름없음! 존재는 하고있으나 보이지만 않는것display: none
: 아예 존재하지 않는것으로 인식!: 페이지 전체를 설계하기 위해 필요한 디자인적인 방법론!
Reference
이미지 출처: https://developer.mozilla.org/ko/docs/Learn/CSS/CSS_layout/Grids
: Grid system을 굉장히 쉽게 CSS로 구현할 수 있게 해주는 CSS framework!
사용법은 부트스트랩 홈페이지가서 코드 복사해서 head에 붙여넣으면 된다.
<body>
<div class="container">
<div class="row">
<div class="col-1">
<!--요소-->
<p>col-1</p>
</div>
</div>
</div>
</body>
❗️ container > row > col
부모 자식구조 무조건 지켜야함. 다른 클래스를 쓰고싶다면 col을 만든후에 그 안에 넣어야한다!
사이즈가 바뀌어야하는 breakpoint마다 col-사이즈를 지정할 수 있다. sm(small), md(medium), lg(large), xl(extra large)까지 적어주면 된다. 모바일 사이즈로 먼저 적어주고 차례차레 대응해야할 사이즈를 붙여나가는 식으로 하면 깔끔~
<body>
<div class="container">
<div class="row">
<div class="col-12 col-sm-6 col-md-4 col-lg-3 col-xl-2">
<p>column</p>
</div>
</div>
</div>
</body>