CSS는 HTML과 함께 웹페이지를 구성하는 프로그래밍 요소로써, HTML을 뼈대에 비유한다면 CSS는 색상이나 크기 등 외형적인 디자인에 비유할 수 있다.
Cascading은 물이 흐르는, 폭포가 떨어지는 뭐 그런 비슷한 뜻이라고 한다. 물과 같이, CSS의 디자인 속성은 상위 요소에서 정의한 디자인 속성의 하위 요소로 전달된다.
브라우저 디자인 정의 -> 외부 스타일시트(CSS, Bootstrap) -> 내부 스타일시트 -> 인라인 스타일시트
<link rel="stylesheet" href="velog_test.css">
참고로, Bootstrap 적용 예는 다음과 같다.
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<head>
<style>
.title{
color: red;
}
</style>
</head>
<h1 style="color:blue; margin-left:30px;">인라인vs힐리스</h1>
CSS에서 정의되는 스타일은 적용 대상과 내용으로 구분된다. Selector는 적용 대상을 명시하기위해 사용되며, 크게 3가지로 나뉜다.
tag selector는 tag 이름으로 요소를 선택하며, 같은 디자인 속성을 가지는 여러 태그는 ','를 통해 나열하여 사용한다.
p {
color: red;
}
h1,h2,h3,h4 { color: blue; }
tag의 종류에 따라, tag의 특정 속성에 대해 selector로 명시하는 것 역시 가능하다.
input[type=text] {
background-color: blue;
color: white;
}
id selector는 html의 id 속성을 통해 대상을 명시한다. '#'을 사용하며 예시는 다음과 같다.
#id_asdf { color: blue; }
...
<div id="id_asdf">
...
</div>
class selector는 html의 class 속성을 통해 대상을 명시한다. '.'을 사용하며, 예시는 다음과 같다.
.asdf { color: blue; }
...
<div class="asdf">
...
</div>
tag와 class는 '.'을 통해 결합할 수 있다. 주로 모든 class에 전체적으로 해당되는 속성을 걸어두고, 특정 tag를 다르게 처리할 때 사용한다.
.header { color: red; }
h1.header { color: blue;}
h2.header { color: green;}
페이지의 디자인을 위해 사용되는 만큼, CSS의 단위를 이해하는 것은 무엇보다 중요하다고 할 수 있다. CSS는 여러 단위를 지원하며 크게 절대단위와 상대단위로 나눌 수 있는데, 해당되는 단위들은 다음과 같다.
.box_test {
width : 50px;
height : 50px;
padding : 10px;
border : 5px solid grey;
margin : 10px;
}
position 속성의 기본값. 요소들을 왼쪽에서 오른쪽으로, 위에서 아래로 배치하는 형식을 의미한다. 좌우배치는 float 속성을 이용해 사용한다.
div.st {
background: cyan;
position: static;
}
relative 속성을 사용하면, 요소를 원래 위치에서 이동시켜 배치할 수 있다. 사용 가능한 속성으로는 top. bottom, left, right가 있다.
div.re {
background: cyan;
position: relative;
top: 30px;
bottom: 30px;
left: 30px;
right: 30px;
}
absolute 속성을 사용하면, 요소의 상위에 있는 static이 아닌 요소를 확인하고 그 요소의 위치에서 상대적인 위치에 배치할 수 있다. relative와 반대 개념이 아님을 명심하자.
div.position_box_forab {
float:left;
background: tomato;
position: relative;
}
div.ab {
background: cyan;
position: absolute;
top: 30px;
bottom: 30px;
left: 30px;
right: 30px;
}
fixed 속성을 사용하면, 요소의 위치는 viewport의 위치를 기준으로 정해지며 페이지의 고정된 위치에 계속 위치하게 된다.
div.fix {
background: cyan;
position: fixed;
bottom: 0px;
left: 10px;
right: 10px;
}
🍟 Refernce
1. https://www.daleseo.com/css-position/
2. https://dinfree.com/lecture/frontend/122_css_3.html#m4
3. https://ofcourse.kr/css-course/float-%EC%86%8D%EC%84%B1
float 속성을 이용하면 요소들을 위에서 아래로 한칸씩 쌓아나가는 것이 아닌, 왼쪽 혹은 오른쪽부터 배치해 나갈 수 있다.
div.float_left{
float:left;
background: orange;
}
div.float_right{
float:right;
background: purple;
}
display 속성은 요소의 유형을 4가지 범위 내에서 변경할 수 있다.
flexbox의 속성은 상위 요소인 flex container에 적용하는 속성과. 하위 요소인 flex item에 적용하는 속성으로 구분된다. 실제로 구현을 하고 정리도 시도했지만 너무 사진이 방대해지는 관계로 어쩔 수 없이 속성에 대한 정리만 진행하고, 참고할만한 좋은 페이지를 인용하겠다.
🍟 Reference
https://heropy.blog/2018/11/24/css-flexible-box/
flex container 정의를 위해 사용된다.
display : flex // block 형태로 item 배치
display : inline flex // inline-block 형태로 item 배치
flex item의 main axis를 설정하고, 정렬 순서를 결정하는데 사용된다.
flex-direction : row; // 좌에서 우로 정렬
flex-direction : row-reverse; // 우에서 좌로 정렬
flex-direction : column; // 위에서 아래로 정렬
flex-direction : column-reverse; // 아래에서 위로 정렬
flex item은 기본적으로 한 줄로 표시되는데, item들은 이때 container의 크기에 따라 크기가 변환된다. flex-wrap을 통해 item의 크기를 보존하고, 줄바꿈을 할 수 있다.
flex-wrap : nowrap; // item을 한줄에 표시(기본값)
flex-wrap : wrap; // item을 여러 줄에 표시
flex-wrap : wrap-reverse; // item을 여러 줄에 역순으로 표시
main axis의 정렬 방법을 설정하는데 사용된다.
justify-content:flex-start; // item을 시작점에 맞춰 정렬(기본값)
justify-content:flex-end; // item을 끝점에 맞춰 정렬
justify-content:center; // 가운데에 정렬
justify-content:space-between; // item을 동일한 간격으로 띄워 정렬
justify-content:space-around; // item과 양 끝점을 동일한 간격으로 띄워 정렬
cross axis의 정렬 방법을 설정하는데 사용된다.
align-content:stretch; // item을 양 끝점에 맞춰 늘려 정렬(기본값)
align-content:flex-start; // item을 시작점에 맞춰 정렬
align-content:flex-end; // item을 끝점에 맞춰 정렬
align-content:center; // 가운데에 정렬
align-content:space-between; // item을 양 끝점으로 붙여 정렬
align-content:space-around; // item과 양 끝점을 동일한 간격으로 띄워 정렬
cross axis의 정렬 방법을 설정하는데, 이때 align-content가 우선된다.
align-items:stretch; // item을 양 끝점에 맞춰 늘려 정렬(기본값)(align-content와 동일)
align-items:flex-start; // item을 시작점 및 중앙선에 맞춰 정렬
align-items:flex-end; // item을 중앙선 및 끝점에 맞춰 정렬
align-items:center; // 가운데에 정렬
align-items:space-baseline; // item을 양 끝점으로 붙여 정렬
item이 정렬되는 순서를 선택할 수 있다. 음수 역시 허용한다.
order: 숫자;
item의 증감 및 기준이 되는 너비를 설정할 수 있다.
flex-grow: 숫자;
flex-shrink: 숫자;
flex-basis: css단위(px 등);
cross axis에서 각 아이템의 정렬방법을 설정한다. 해당 정렬은 align-items의 설정보다 우선순위를 갖는다.(Cascading)
align-self:stretch; // item을 양 끝점에 맞춰 늘려 정렬
align-self:flex-start; // item을 시작점 및 중앙선에 맞춰 정렬
align-self:flex-end; // item을 중앙선 및 끝점에 맞춰 정렬
align-self:center; // 가운데에 정렬
align-self:baseline; // 문자 기준선에 정렬