반응형

크기 계산 (box-sizing) 

box의 사이즈를 150px로 지정하였는데

border과 padding을 적용하고 나니

개발자 도구에서 Box1은 270px로 출력된다. 

 

i.e.
Box1 가로 : 150px(기본가로값) + 10px(border좌) + 10px(border우) + 50px(padding좌) + 50px(padding우) = 270px
Box2 세로 : 150px(기본가로값) + 10px(border좌) + 10px(border우) + 50px(padding좌) + 50px(padding우) = 270px

출력화면

 

아래 이미지 처럼 box1과 box2의 크기를 맞추려 수동으로 셋팅하는 것에는 한계가 보인다. 

출력예시

여기서 box1에 box-sizing : border-box;를 추가하면 자동으로 box2와 동일한 사이즈 맞출 수 있다. 

출력화면

 

다른 예시로 보자!

hero라는 작은 박스가 32개 있다. 

hero 박스에 border값을 3px씩 주고나니 박스가 위,아래,좌,우 3px씩 늘어난 상황! (아래 왼쪽 이미지 참조)

box-sizing: border-box; 명시하고 박스의 크기 기준을 가로,세로 80px,84px로 픽스한다.

.container .heroes {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  background-color: orange;
  max-width: 700px;
  margin: 0 auto;
  padding: 40px 20px;
}

.container .heroes .hero {
  width: 80px;
  height: 84px;
  margin: 4px;
  background-color: #555;
  border: 3px solid #fff;		/* border사용으로 위아래좌우 3px 늘어난 상황 */
  border-radius: 10px;
  box-sizing: border-box;		/* 적용하여 가로,세로 80px,84px 유지! */
  transform: skewX(-14deg);
}

출력 화면

반응형

'CSS' 카테고리의 다른 글

[CSS] Margin 외부 여백  (0) 2024.01.27
[CSS] CSS 속성  (0) 2023.12.26
[CSS] CSS 선택자 우선순위 (중요!)  (0) 2023.12.20
[CSS] CSS 상속, 상속되는 CSS속성  (0) 2023.12.19
[CSS] CSS 선택자  (0) 2023.12.12
반응형

외부 여백(margin)

 

margin : 30px(상하) 80px(좌우);

<body>
    <div class="box"></div>
    <div class="box2"></div>
</body>

 

.box{
  width: 300px;
  height: 300px;
  margin: 30px 80px;
  background-color: brown;
}

.box2{
  width: 300px;
  height: 300px;
  background-color: brown;
}

출력화면

margin : 10px(상) 30px(좌우) 80px(하);

.box{
  width: 300px;
  height: 300px;
  margin: 10px 30px 80px;
  background-color: brown;
}

.box2{
  width: 300px;
  height: 300px;
  background-color: brown;
}

출력화면

margin 음수값 적용 (자주 쓰지 않지만 유용할 때가 있음)

잘 모르겠다.. 좀 더 찾아보고 포스팅하겠다.

 

블록 요소에 가로 사이즈가 있는 상태에서 margin값의 좌우가 auto라면

해당 요소는 가운데 정렬이 된다. 

.container .heroes {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  background-color: orange;
  max-width: 700px;		/* 가로 사이즈 지정 */
  margin: auto;		/* 마진 오토 적용 */
}

.container .heroes .hero {
  width: 80px;
  height: 84px;
  margin: 4px;
  background-color: #555;
}

출력 화면

반응형

'CSS' 카테고리의 다른 글

[CSS] CSS border, padding 사용할 때 요소 크기 유지  (0) 2024.01.28
[CSS] CSS 속성  (0) 2023.12.26
[CSS] CSS 선택자 우선순위 (중요!)  (0) 2023.12.20
[CSS] CSS 상속, 상속되는 CSS속성  (0) 2023.12.19
[CSS] CSS 선택자  (0) 2023.12.12
반응형

단위(Units)

font-size px  vs. em 그리고 rem

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>우선순위 선택자</title>
    <link href="https://cdn.jsdelivr.net/npm/reset-css@5.0.2/reset.min.css"
rel="stylesheet">
    <link rel="stylesheet" href="/login/css/style.css">
</head>
<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>
</html>

 

.parent {
  width: 300px;
  height: 200px;
  background-color:lightcoral;
}

.child{
  width: 50%;
  height: 50%;
  background-color:royalblue;
}

기본적으로 font-size는 16px 만큼의 크기가 들어가 있다. (위 사진 참조)

단위 em
폰트 사이즈(16px) 만큼의 1em으로 사용으로 한다.
주변 상황에 따라 상대적으로 폰트 크리가 달라벼 관리가 필요한 단점이 있다.

 

여기서 Css child width값을 10em으로 바꾸면 16px 곱하기 10으로 160px i.e.160em으로 환산된다. 

동일하게 20em으로  값을 바꾸면 아래와 같이 320px이 출력된다. 

.parent {
  width: 300px;
  height: 200px;
  background-color:lightcoral;
}

.child{
  width: 20em;    /* 16px X 20 = 320px */
  height: 50%;
  background-color:royalblue;
}

출력화면

만약 부모 요소에 font-size를 10px로 세팅한다면

자식 요소에 상속이 되어 10px X 20 = 200px으로 출력이 된다. 

.parent {
  width: 300px;
  height: 200px;
  background-color:lightcoral;
  font-size: 10px;
}

.child{
  width: 20em;    /* 1px X 20 = 200px */
  height: 50%;
  background-color:royalblue;
}

출력화면

 

이렇게 부모 요소 font-size 세팅으로 인해 상대적으로 변하는 특성으로

잘 못 사용하면 혼란스러운 단위가 될 수 있어 별도의 관리가 필요하다. 

 

그리고 rem은 이런 이슈를 해결해줄 수 있다. 

단위 rem
Html 요소(root요소)에 지정된 폰트 크기를 기준으로 사용한다.
주변 상황이 바뀌어도 단위가 수정되는 일이 없도록 만들어주는 장점이 있다.
루트 요소의 폰트만 바꿔주면 모든 rem 값의 폰트 크기를 동시에 비율로 제어할 수 있다. 

 

e.g.

html 요소에 font-size를 16px로 세팅한다고 가정

부모 요소에 font-size를 10px로 세팅하여도

결과 값은 16px X 20 = 320px로 출력된다. 

Root 요소에 지정 폰트를 기준으로 사용되는 특성이 반영된 예시라고 볼 수 있다. 

html {
  font-size: 16px;
}

.parent {
  width: 300px;
  height: 200px;
  background-color:lightcoral;
  font-size: 10px;
}

.child{
  width: 20rem;    /* 16px X 20 = 320px */
  height: 50%;
  background-color:royalblue;
}

출력화면

 

단위 vw/vh
뷰포트의 가로/세로 넓이/높이의 절반 만큼의 크기를 사용한다.

vw/vh 가로/세로 넓이/높이 만큼 세팅
vw/vh 가로/세로 넓이/높이 만큼 세팅

 

내부 여백(padding) 

% 부모 요소의 가로 너비에 대한 비율로 지정 (예시 필요 要搞清楚的 Css 심화학습에서 다룬다.)

속성 : (요소의 크기가 늘어남) 내부 여백은 추가되는 것이기에 그 만큼의 요소 크기가 늘어난다.

 

테두리 선(border)과 색상 표현

border : 선 두께 > 선 종류 > 선 색상 (관습에 맞게 작성 권장)

테두리 선이 두꺼워 질수록 요소(해당 박스)의 크기가 커진다.

.container .box {
  width: 200px;
  height: 200px;
  background-color:gold;
}

.container .box:first-child {
  border: 50px solid gold;
}

 

border-width : border라는 각각의 방향을 아우르는 단축 속성이며

두께, 종류, 색상을 이루어진 개별 속성이기도 하다. 

단축 속성 이란?
서로 다른 여러 가지 CSS 속성의 값을 지정할 수 있는 CSS 속성
e.g.
background 속성의
background-color
background-image
background-repeat
background-position (en-US)

 

개별속성으로 border-style: solid(실선) / dashed(파선) / dotted(점선)을 주로 사용한다. (점선 사용률 크지 않음)

solid(실선)
dashed(파선)
dotted(점선)

 

border-color : 색상 표현

색상 이름 브라우저에 제공하는 색상 이름 e.g. red, tomato
Hex 색상코드 16진수 색상 e.g. #000, #FFF(#fff)
RGB 빛의 삼원색 e.g. rgb(255, 215, 0)
RGBA 빛의 삼원색 + 투명도 e.g. rgba(0, 0, 0, 0.5) / 투명도 0=투명, 0.5=반투명, 1=불투명

 

border-방향-속성 단축 속성 (대표예시)

 

border-top: 두께 종류 색상;

.box {
  width: 200px;
  height: 200px;
  background-color:gold;
  margin: 25px;
  border-top: 5px solid #000; <!-- 주목! -->
}

출력화면


border-top-width: 두께;

border-top-style: 종류;
border-top-color: 색상;

.box {
  width: 200px;
  height: 200px;
  background-color:gold;
  margin: 25px;
  border-top-width: 10px; <!-- 주목! -->
  border-top-style: dashed; <!-- 주목! -->
  border-top-color: #000; <!-- 주목! -->
}

출력화면

 

모서리 둥글게 (border-radius)

border-radius : 0 0 10px 0;

여기서 0은 단위를 붙이지 않기로 한다. 

.box {
  width: 200px;
  height: 200px;
  background-color:gold;
  margin: 25px;
  border-radius : 0 0 50px 0; <!-- 주목! -->
}

출력화면

 

넘침 제어(overflow)

부모와 자식 요소가 있다고 가정한다.

<body>
    <div class="parent">
      <div class="child"></div>
    </div>
</body>

 

.parent{
  width: 200px;
  height: 150px;
  margin: 20px;
  background-color: gold;
}

.child {
  height: 100px;
  background-color: darkorange;
}

여기서 자식의 가로 넓이를 부모보다 크게 설정하였을 때

부모에 overflow: hidden; 을 사용하면 '(상대적으로 부모 값보다) 흘러 넘치는 부분을 없애 해준다'.

.parent{
  width: 200px;
  height: 150px;
  margin: 20px;
  background-color: gold;
  overflow: hidden;   /* 부모요소에 적용 */
}

.child {
  width: 300px;   /* 더 크게 설정 */
  height: 100px;
  background-color: darkorange;
}

출력 화면

 

overflow : visible;

넘치는 영역을 그대로 보여준다.

overflow : visible;

 

overflow : hidden;

넘치는 영역이 잘려서 보인다.

overflow : hidden;

 

overflow : scroll;

직관적으로 잘려서 보이지만

넘치는 영역의 내용을

사용자가 볼 수 있도록 한다. 

overflow : scroll;

 

overflow : auto;

브라우저가 스트롤바를 만들지 자동으로 판단 후 생성한다. 

(가로는 넘치지 않아서 스트롤바 생성되지 않음)

 

overflow : auto;

 

개별 속성으로 overflow-x / overflow-y는 x축/y축 각각의 축을 명시하여 적용한다.

출력화면

 

출력 특성(display)

block요소는 가로 세로 값을 가지고 있는데

그에 반에 가로와 세로를 지정하지 못하는 span 요소는

display: block; 속성을 추가하여 가로, 세로를 바꿀 수 있는 요소로 활용을 많이 한다.

<body>
  <span class="parent">
    Evelyn.Kim
  </span>
</body>

 

body {
  margin: 20px;
}
.parent{
/*   display: block; */		/* 적용하지 않음! */
  width: 200px;
  height: 150px;
  background-color: gold;
}

출력 화면

 

.parent{
  display: block;		/* 적용 후! */
  width: 200px;
  height: 150px;
  background-color: gold;
}

출력 화면

 

글꼴

font-style : 글자의 기울기;

font-weight : 글자의 두께 100 ~ 900 숫자 사용;

font-family: 글꼴(서체), "글 꼴(서체)", ... 글꼴계열;

글꼴 계열_serif (바탕체 계열)
글꼴 계열_sans-serif (고딕체 계열)

특징 : 웹에서 주로 보이는 글꼴 계열이다.

 

글꼴 계열_monospace (고정넓이 동등 글꼴 계열)

특징 : 글자 간 간격이 일정하여 가독성이 좋다. 코드 에디터에서 주로 사용.

 

글꼴 계열_cursive (필기체 계열)
글꼴 계열_fantasy (장식 글꼴 계열)

 

출력 화면

<body>
  <p>
    Lorem ipsum dolor, sit amet consectetur adipisicing elit. 
    Itaque porro aliquam animi! Libero, beatae consequuntur 
    vero minima assumenda quis quas mollitia, maxime non temporibus 
    magnam aut doloremque error sunt dolores.
  </p>
</body>

 

body {
  margin: 20px;
}
p {
  width: 300px;
  box-sizing: border-box;
  border: 3px solid darkorange;
/*   line-height: 1.4; */
}

 

여기서 글자 행간 간격line-height로 넣으면 된다. 

출력 화면

body {
  margin: 20px;
}
p {
  width: 300px;
  box-sizing: border-box;
  border: 3px solid darkorange;
  line-height: 1.4;		/* 추가 내용! */
}

 

 

문자

text-indent : 50px (들여씌기), -50px (내어쓰기);

text-align : left, right, center 문자 정렬 방식 (수평 정렬);

text-decoration : none, underline, overline*(윗줄 잘 안씀), line-through(중앙선, 취소선)

a 태그로 연결된 글자는 기본적으로 파란색 글씨에 밑줄이 있다. (아래 예시 참조)

<body>
  <a href="www.google.com">Google</a>
</body>

 

body {
  margin: 20px;
}
a {
  display: block;
  width: 300px;
  height: 200px;
  /* color: #000; */
  font-size: 100px;
/*   text-decoration: none; */
  background-color: gold;
}

출력 화면

 

여기서 글자색 지정 및 밑줄 없애기 위해 text-decoration을 사용하면 된다.

body {
  margin: 20px;
}
a {
  display: block;
  width: 300px;
  height: 200px;
  color: #000;    /* 주목! */
  font-size: 100px;
  text-decoration: none;    /* 주목! */
  background-color: gold;
}

출력 화면

 

배경

background-image : url("함수 경로 입력")요소의 배경 이미지로 삽입

웹 사진 가져오기
이미지 링크 복사해 오기

<body>
  <div></div>
</body>

 

body {
  margin: 20px;
}
div {
  width: 200px;
  height: 200px;
  background-color: gold;
  background-image: url("https://s.pstatic.net/shopping.phinf/20240103_
  15/6a8a1221-4b79-4c18-be35-4bd3619a6671.jpg");		/* 링크 추가! */
};

출력 화면

 

background-size : 이미지 크기 제어 속성 (바둑판식 배열)

cover(더 긴 너비에 맞춰서 출력), contain(더 짧은 너비에 맞춰서 출력)

background-size: 80px;
background-size: cover;
background-size: contain;

 

background-repeat : 반복 제어 속성

background-repeat: no-repeat;
background-repeat: repeat-x;
background-repeat: repeat-y;

 

background-position : 요소의 배경 이미지 위치

방향으로 위치 결정 : 상,하,좌,우,center

단위로 x,y축 위치 결정 : 200px(x축) 50px(y축)

background-position: 200px 50px;
background-position: center;

 

background-decoration

 

background-attachment : 배경 이미지 스크롤 특성 scroll, fixed;

background-attachment: scroll;

특징 : 스크롤 내리면 이미지가 올라간다.

background-attachment: fixed;

특징 : 스크롤 내려도 이미지는 화면에 고정되어 있다.

 

**패럴렉스(parallax)

스크롤에 따라 오브젝트와 배경 이미지가 시간차를 두고 변하는 기법.

 

 

포지션 position : 요소의 위치 지정 기준 (원하는 위치에 배치하기) ** (중요!)

i.e.기준을 먼저 잡고 위치값을 설정해야 한다. 

함께 사용되는 속성 : (방향 별 거리 지정)
top
bottom
left
right
z-index

 

position: relative (요소 자신을 기준으로 지정)

relative 선언 후 아무 변화가 없는 것이 정상이다. 

<body>
  <div class="container">
    <div class="box">BOX 1</div>
    <div class="box">BOX 2</div>
    <div class="box">BOX 3</div>
  </div>
</body>

 

body {
  margin: 50px;
}
.container {
  width: 400px;
  height: 400px;
  background-color: #d9ed92;
  font-size: 50px;
  font-weight: 700px;
}

.container .box:nth-child(1) {
  width: 200px;
  height: 200px;
  background-color: #99d98c;
}

.container .box:nth-child(2) {
  width: 150px;
  height: 100px;
  background-color: #52b69a;
  position:relative;		/* 적용 후 변화 없음 */
}

.container .box:nth-child(3) {
  width: 250px;
  height: 100px;
  background-color: #168aad;
}

출력 화면

여기서 방향 설정하면 BOX2가 이동한 것을 볼 수 있다. 

.container .box:nth-child(2) {
  width: 150px;
  height: 100px;
  background-color: #52b69a;
  position:relative;
  top: 50px;		/* 이동 방향 설정 */
  left: 200px;		/* 이동 방향 설정 */
}

BOX2 자신의 위치를 기준으로 이동

 

하지만 극단적이 예시로 들었을 때 BOX2가 오른쪽 끝으로 갈 경우

BOX1과 BOX3 사이 공백이 생기는 원인을 알 도리가 없어진다. 

그렇기에 자기자신을 기준으로 배치하는 position: relative는 쓰지 않는다고 보면 된다

**사실 상 BOX2는 해당 공백에 있고, left: 2000px;로 배치된  BOX2는 허상인 것이다. 

.container .box:nth-child(2) {
  width: 150px;
  height: 100px;
  background-color: #52b69a;
  position:relative;
  top: 50px;
  left: 2000px;		/* 변경! */
}

BOX2 left: 2000px 배치 시

 

position: absolute (부모 요소를 기준으로 지정)

위치를 지정하기 위한 기준을 설정해주는 속성

i.e. 기준을 먼저 잡고 위치값을 지정해야 한다. 

 

여기서 조금 전에 추가한 position: relative를 absolute로 바꾼다면

자신을 절대 기준으로 했던 relative와 달리 상대 기준을 잡는 absolute는 뷰포트(브라우저)를 기준으로 잡는 것을 볼 수 있다.

.container .box:nth-child(2) {
  width: 150px;
  height: 100px;
  background-color: #52b69a;
  position: absolute;		/* 변경! */
  top: 50px;
  left: 200px;
}

뷰포트를 기준으로 잡아 이동한다.

 

그리하여 상대 기준으로 부모 요소를 절대적 기준으로 잡는다고 명시를 해야 한다. 

.container {
  width: 400px;
  height: 400px;
  background-color: #d9ed92;
  font-size: 50px;
  font-weight: 700px;
  position: relative;		/* 2.여기를 쓰는 것! */
}

.container .box:nth-child(2) {
  width: 150px;
  height: 100px;
  background-color: #52b69a;
  position: absolute;		/* 1.여기를 쓰기 위해 */
  top: 50px;
  left: 200px;
}

부모 요소를 기준으로 이동한다.

 

position: fixed (뷰포트i.e.브라우저를 기준으로 지정)

i.e. fixed를 쓰는 것은 주변 배치와 더이상 상호작용하지 않고 뷰포트 기준으로 배치한다

웹페이지 우하단 '맨 위로 올라가기' 버튼 경우, 해당 기능으로 구현가능.

BOX2 fixed 입력

"맨 위로 올라가기"버튼 예시

 

요소 쌓인 순서(stack order)

조건 :
1. 요소에 position값이 있는 경우, 위에 쌓인다.
2. 1번의 조건을 충족할 경우, z-index 속성 값이 높을 수록 위로 쌓인다.
3. 1번과 2번의 조건이 같은 경우, Html의 구조가 더 나중에 작성되어 있을 수록 위에 쌓인다.

 

body {
  margin: 50px;
}
.container {
  width: 300px;
  height: 300px;
  background-color: #f4acb7;
  font-size: 25px;
  font-weight: 700px;
  position: relative;		/* postion 값이 있음 */
}

.container .box { 
  border: 1.5px solid #000;
  box-sizing: border-box;
}

.container .box:nth-child(1) {
  width: 100px;
  height: 100px;
  background-color: #ffcad4;
  position: relative;		/* postion 값이 있음 */
}

.container .box:nth-child(2) {
  width: 100px;
  height: 100px;
  background-color: #ffcad4;
  position: absolute; 		/* postion 값이 있음 + Html 구조가 나중에 있음 */
  top: 30px;
  left: 80px;
}

.container .box:nth-child(3) {
  width: 100px;
  height: 100px;
  background-color: #ffcad4;
}

BOX2가 위에 쌓인다.

z-index

z-index를 적용하면 BOX1이 가장 위에 쌓인다. 

.container .box:nth-child(1) {
  width: 100px;
  height: 100px;
  background-color: #ffcad4;
  position: relative;
  z-index: 1;		/* 주목! */
}

BOX1가 위에 쌓인다.

 

더 뒤에 쌓고 싶으면 -1이하로 설정하면 된다.

 

** 주의사항 (중요!)

인라인 요소여도 position: relative/absolute를 쓰면 자동으로 block 요소로 바뀌어 가로,세로 넓이를 지정할 수 있다. 

<body>
  <span>
    Evelyn.Kim
  </span>
</body>

 

body {
  margin: 20px;
}

span { 
  width: 100px;
  height: 100px;
  background-color: gold;
  position: absolute;
}

출력 화면

 

flex(정렬) - container

display : flex 를 통해 수평정렬 출력 가능하다.

body {
  margin: 50px;
}
.container {
  /* width: auto; */		/* flex일 때 블로요소로 가로 넓이가 최대로 늘어나려고 한다. */
  background-color: #f4acb7;
  font-size: 25px;
  font-weight: 700px;
  /* display: flex; */
}

.container .box { 
  border: 1.5px solid #000;
  box-sizing: border-box;
}

.container .box:nth-child(1) {
  width: 100px;
  height: 100px;
  background-color: #ffcad4;
}

.container .box:nth-child(2) {
  width: 100px;
  height: 100px;
  background-color: #ffcad4;
}

.container .box:nth-child(3) {
  width: 100px;
  height: 100px;
  background-color: #ffcad4;
}

display: flex 적용 이전 출력 화면

그리고 아래는 display: flex 적용 후 Flex container으로 만들어 출력된 화면이다. 

.container {
  background-color: #f4acb7;
  font-size: 25px;
  font-weight: 700px;
  display: flex;		/* 주목! */
}

display: flex 적용 후 출력 화면

 


 

Css flex 관련된 속성에 대해 자세하게 살펴보자!

Css flex를 사용하기 앞서 display: flex; 부여로 flex contatiner를 만들어야 한다. (대부분 수평정렬 목적으로 사용)

display: flex를 부여한 container(큰 박스) flex container라고 부르고

그 안에 블록 요소(작은 박스)를 flex items라고 한다. (위 예시 이미지 참조)

여기서 Flex Container에 부여하는 속성Flex Items에 부여하는 속성이 각각으로 나누어져 있다.

 

Flex Container 속성 Flex Items 속성
- display
- flex-flow /
flex-direction / flex-wrap

- justify-content (주축,X축 의 수평정렬 방법)
- align-content (여러줄의 수직정렬 방법)
stretch
flex-start
flex-end
center

- align-items (한 줄의 수직정렬 방법)
stretch
flex-start
flex-end
center
- order
- flex / flex-grow / flex-shrink / flex-basis
- align-self

 

Flex Container 지정 속성 : 

display: block, inline 값을 입력하여 화면에 출력되는 특성을 제어하는 속성

display: inline-flex; 인라인 요소처럼 동작할 수 있도록 한다. 

 

flex-direction

주축 설정 (박스 정렬)

위에서 flex container과 flex items를 만들고 container의 주축을 설정하는 것. (수평 or 수직)

flex container를 기준으로.. (하지만 flex container 안에서는 수평 정렬된 구조여서 flex-direction이 필요 없다)

 

(기본값) row : (좌 > 우 / 행) - X축 주축(Main-axis) 그리고 이를 가로 지르는 Y축 교차 축(Cross-axis)가 있다.

             row-reverse : (우 > 좌 / 행)

             column : (위 > 아래 / 열) - Y축 주축 (사용빈도 낮음)

             column-reverse : (아래 > 위 / 열) (사용빈도 낮음)

i.e. display는 수평정렬을 하던 수직정렬을 하던 1차원의 하나의 축을 가지고 정렬하는 개념이다. 

 

flex-wrap : Flex Items 줄바꿈 처리여부 (묶음여부)

i.e. container가 items 보다 작으면(수용불가) 아래 nowrap 예시처럼 박스들이 찌그러진다. 

 

nowrap (줄바꿈 없음)

flex container의 넓이가 부족하고 각각의 item(box)들을 한 줄에 표현할 때 지정된 크기보다 작게 찌그러진 item(box)를 볼 수 있다.

<body>
  <div class="container">
    <div class="box">BOX 1</div>
    <div class="box">BOX 2</div>
    <div class="box">BOX 3</div>
    <div class="box">BOX 4</div>
    <div class="box">BOX 5</div>
  </div>
</body>

 

body {
  margin: 50px;
}
.container {
  width: 400px;
  height: 200px;
  background-color: #007f5f;
  font-size: 25px;
  font-weight: 700px;
  display: flex;		/* 먼저 선언 후 */
  flex-wrap: nowrap;		/* 줄바꿈 안 함 */
}

.container .box { 
  border: 1px solid #007f5f;
  box-sizing: border-box;
}

.container .box:nth-child(1) {
  width: 100px;
  height: 100px;
  background-color: #55a630;
}

.container .box:nth-child(2) {
  width: 100px;
  height: 100px;
  background-color: #80b918;
}

.container .box:nth-child(3) {
  width: 100px;
  height: 100px;
  background-color: #aacc00;
}

.container .box:nth-child(4) {
  width: 100px;
  height: 100px;
  background-color: #bfd200;
}

.container .box:nth-child(5) {
  width: 100px;
  height: 100px;
  background-color: #d4d700;
}

출력 화면

wrap (줄바꿈)

.container {
  width: 400px;
  height: 200px;
  background-color: #007f5f;
  font-size: 25px;
  font-weight: 700px;
  display: flex;		/* 먼저 선언 후 */
  flex-wrap: wrap;		/* 줄바꿈 하기 */
}

출력 화면

** PS **

.container {
  width: 250px;
  /* height: 200px; */		/* 높이 삭제 또는 auto로 바꾸면 
  				줄바꿈한 박스의 최종 높이에 맞게 배경이 맞춰진다. */
  background-color: #007f5f;
  font-size: 25px;
  font-weight: 700px;
  display: flex;
  flex-wrap: wrap;
}

출력 화면

 

justify-content : 주축(X축) 의 수평정렬 방법

flex-start : Flex Items 왼쪽으로 정렬

flex-end : Flex Items 오른쪽으로 정렬

.container {
  /* width: 300px; */
  /* height: 200px; */
  background-color: #007f5f;
  font-size: 25px;
  font-weight: 700px;
  display: flex;
  justify-content: flex-end;		/* 오른쪽 정렬 적용 */
  flex-wrap: nowrap;
}

justify-content: flex-end;

center : Flex Items 가운데로 정렬

.container {
  /* width: 300px; */
  /* height: 200px; */
  background-color: #007f5f;
  font-size: 25px;
  font-weight: 700px;
  display: flex;
  justify-content: center;		/* 가운데로 정렬 */
  flex-wrap: nowrap;
}

justify-content: center;

(** 여기서 아이템(박스)의 순서는 바뀌지 않는다.)

 

align-content

주축을 수직으로 바꾸어 여러 줄 정렬 방법

조건 : 
1. 줄바꿈 상태여야 한다. (flex-wrap: wrap;)
2. 정렬이 가능한 빈 공간이 있어야 한다. 
3. flex items가 두줄 이상 이어야 한다.

조건이 까다로워서 생각보다 활용도가 높지 않다.

 

stretch : Flex Items 세로 높이를 늘려 container 높이에 맞추며 왼쪽 정렬

body {
  margin: 50px;
}
.container {
  width: 350px;
  height: 300px;
  background-color: #007f5f;
  font-size: 25px;
  font-weight: 700px;
  display: flex;
  flex-wrap: wrap;
}

.container .box { 
  border: 1px solid #007f5f;
  box-sizing: border-box;
}

.container .box:nth-child(1) {
  width: 100px;
  /* height: 100px; */		/* 높이 미지정으로 stretch하여 container 높이에 맞추게 된다. */
  background-color: #55a630;
}

.container .box:nth-child(2) {
  width: 100px;
  /* height: 100px; */
  background-color: #80b918;
}

.container .box:nth-child(3) {
  width: 100px;
  /* height: 100px; */
  background-color: #aacc00;
}

.container .box:nth-child(4) {
  width: 100px;
  /* height: 100px; */
  background-color: #bfd200;
}

.container .box:nth-child(5) {
  width: 100px;
  /* height: 100px; */
  background-color: #d4d700;
}

stretch_출력 화면

 

stretch 상태에서 flex items(작은 박스) 높이를 지정하면 아래와같이 출력된다. 

.container .box:nth-child(1) {
  width: 100px;
  height: 100px;		/* 세로 높이 지정 */
  background-color: #55a630;
}

.container .box:nth-child(2) {
  width: 100px;
  height: 100px;
  background-color: #80b918;
}

.container .box:nth-child(3) {
  width: 100px;
  height: 100px;
  background-color: #aacc00;
}

.container .box:nth-child(4) {
  width: 100px;
  height: 100px;
  background-color: #bfd200;
}

.container .box:nth-child(5) {
  width: 100px;
  height: 100px;
  background-color: #d4d700;
}

출력 화면

 

flex-start

Flex Items 수직축 기준 위쪽 정렬

.container {
  width: 350px;
  height: 300px;
  background-color: #007f5f;
  font-size: 25px;
  font-weight: 700px;
  display: flex;
  flex-wrap: wrap;
  align-content: flex-start;		/* 적용!! */
}

align-content: flex-start;

 

flex-end

Flex Items 아래쪽 정렬

align-content: flex-end;

 

center

Flex Items 가운데 정렬

align-content: center;

 

align-items : 주축을 수직으로 바꾸어 한 줄 정렬 방법

stretch

Flex Items 각 줄 정렬 (items 높이 값 미적용)

align-items: stretch;

 

flex-start

Flex Items 각 줄 위 정렬

align-items: flex-start;

 

flex-end

Flex Items 각 줄 아래쪽 정렬

align-items: flex-end;

 

center

Flex Items 각 줄 중앙 정렬

align-items: flex-end;

 

Flex Items 지정 속성 : 

 

order : 숫자; (기본값 0)

정렬되는 순서 (숫자가 작은 순으로 앞으로 배치)

body {
  margin: 50px;
}
.container {
  width: 550px;
  height: 150px;
  background-color: #0077b6;
  font-size: 25px;
  font-weight: 700px;
  display: flex;
  flex-wrap: nowrap;
  /* align-items: flex-end; */
}

.container .box { 
  border: 1px solid #0077b6;
  box-sizing: border-box;
}

.container .box:nth-child(1) {
  width: 100px;
  height: 100px;
  background-color: #caf0f8;
  /* 기본값-0으로 세팅되어 있다. */
}

.container .box:nth-child(2) {
  width: 100px;
  height: 100px;
  background-color: #ade8f4;
  /* 기본값-0으로 세팅되어 있다. */
}

.container .box:nth-child(3) {
  width: 100px;
  height: 100px;
  background-color: #90e0ef;
  order: -2;		/* 적용! */
}

.container .box:nth-child(4) {
  width: 100px;
  height: 100px;
  background-color: #48cae4;
  /* 기본값-0으로 세팅되어 있다. */
}

.container .box:nth-child(5) {
  width: 100px;
  height: 100px;
  background-color: #00b4d8;
  order: -1;		/* 적용! */
}

출력 화면

 

flex

flex-grow : 숫자; (기본값 0)

요소가 증가하는 비율 

 

i.e. 아래와같이 flex-grow: 1; 선언은

BOX1이 빈 공간을 채우고 (아래 사진 참조)

나머지 공간을 BOX2, BOX3이 채우는 것이다. 

.container .box:nth-child(1) {
  width: 80px;
  height: 80px;
  background-color: #caf0f8;
  flex-grow: 1;		/* 적용! */
}

빈 공간을 BOX1이 채우고
그 나머지 공간을 BOX2,3이 채우는 것.

 

여기서 BOX2에 flex-grow: 2;를 적용한다면

BOX3을 제외한 공간을 BOX1과 BOX2가 1:2의 비율로 나눈다는 뜻이 된다.

.container .box:nth-child(1) {
  width: 80px;
  height: 80px;
  background-color: #caf0f8;
  flex-grow: 1;
}

.container .box:nth-child(2) {
  width: 80px;
  height: 80px;
  background-color: #ade8f4;
  flex-grow: 2;		/* 추가 적용! */
}

출력 화면

flex-shrink : 숫자; (기본값 1)

감소 너비 비율

Flex container 너비에 따라 감소비율 적용

 

Container가 점점 줄어서 안에 있는 flex items를 찌그러트리는 상황을 보자. (박스를 찌그러지지 않게 하려면?)

shrink 기본값 1이기에 container 내 1:1:1 비율로 보이는 것이다.

.container .box { 
  border: 1px solid #0077b6;
  box-sizing: border-box;
  flex-shrink: 0;		/* 기본값 1을 막아 0으로 적용하면 각 items의 실체 크기를 유지 해준다. */
}

출력 화면

 

flex-basis : 단위; (기본값 auto)

공간 배분 전 기본 너비

비율로 계산되도록 만들어준다.

 

flex-basis : auto;는 content 내용의 너비를 뜻한다. 

여기서 flex-grow를 설정해도 실제 (content)글씨 내용이 들어있기 때문에 적용되지 않는다. 

공간 배분 전 기본(text)너비와  외 영역

body {
  margin: 50px;
}
.container {
  width: 500px;
  height: 150px;
  background-color: #0077b6;
  font-size: 25px;
  font-weight: 700px;
  display: flex;
  flex-wrap: nowrap;
}

.container .box { 
  border: 1px solid #0077b6;
  box-sizing: border-box;
  flex-basis: 0;		/* 글자 만큼의 너비를 0으로 설정 */
  text-align: center;		/* text 중앙 정렬 */
  line-height: 100px;		/* 위아래 높이 추가하여 센터로 맞추기 */
}

.container .box:nth-child(1) {
  width: 100px;
  height: 100px;
  background-color: #caf0f8;
  flex-grow: 2;		/* 기본너비 없이 증가너비 2배수로 정렬 */
}

.container .box:nth-child(2) {
  width: 100px;
  height: 100px;
  background-color: #ade8f4;
  flex-grow: 1;		/* 기본너비 없이 증가너비 1배수로 정렬 */
}

.container .box:nth-child(3) {
  width: 100px;
  height: 100px;
  background-color: #90e0ef;
  flex-grow: 3;		/* 기본너비 없이 증가너비 3배수로 정렬 */
}

증가 너비 비율로 출력

 

여기서 flex-basis를 100으로 설정한다면

기본 contant(글자영역)을 100px로 지정하는 것이다.

그리고 남은 영역을 기존 세팅한 2:1:3 비율로 배분하게 된다.

.container .box { 
  border: 1px solid #0077b6;
  box-sizing: border-box;
  flex-basis: 100;		/* 새로 설정! */
  text-align: center;
  line-height: 100px;
}

출력 화면

i.e. 시각적으로 2:1:3 비율로 보이지 않아 복잡하기에

기본적으로 flex-basis를 0으로 맞춰서 flex-grow에 맞는 비율로 출력하려고 한다. 

 

전환 효과 (transition)

요소의 전 상태후 상태를 자연스럽게 만들어주는 전환효과 지정 단축 속성

 

transition-property : 속성이름; (기본값 all - 모든 Css속성에 적용)

전환 효과를 사용할 특정 속성의 이름을 명시한다.

<body>
  <div class="container">
    <div class="box">Transition</div>
  </div>
</body>

 

body {
  margin: 50px;
}

div {
  width: 150px;
  height: 150px;
  background-color: #16E2F5;
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  line-height: 150px;
  transition: 1s;		/* 적용 후 자연스러운 색상,크기 변화! */
}

div:active {
  width: 500px;
  background-color: #F52916;
}
Transition-property

여기서 특정  속성 이름(width)을 명시한다면

위에서 부드럽게 변했던 색상이 뚝뚝 끊기면서 바뀌고

직접 명시를 했던 속성 이름(width)는 그대로 부드럽게 움직인다. 

div {
  width: 150px;
  height: 150px;
  background-color: #16E2F5;
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  line-height: 150px;
  transition: width 1s;		/* 특정 속성 이름 추가 */
}
Transition-property : 속성명 명시

 

transition-duration : 시간; (기본값 0) (필수 포함 속성)

전환 효과의 지속시간 지정

 

여기서 transition 속성이름 지정 외 다른 속성도 함께 지정 가능하며

각각 다른 지속시간을 지정할 수 있는 장점이 있다. 

div {
  width: 150px;
  height: 150px;
  background-color: #16E2F5;
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  line-height: 150px;
  transition: 
    width .5s,				/* 각각 줄 나누고 */
    background-color 3s;		/* 지속시간을 별도 명시할 수 있다. */
}
속성이름, 지속시간 각각 명시

 

transition-timing-function (=easing function) : ease 기본값(느리게>빠르게>느리게), linear(일정하게), ease-in(느리게>빠르게), ease-out(빠르게>느리게), ease-in-out(느리게>빠르게>느리게)

전환효과의 타이밍 함수를 지정한다.

 

자세한 정보는 아래 참조

Easing 함수 치트 시트 https://easings.net/ko

 

Easing Functions Cheat Sheet

Easing functions specify the speed of animation to make the movement more natural. Real objects don’t just move at a constant speed, and do not start and stop in an instant. This page helps you choose the right easing function.

easings.net

 

Html, Css, Javascript로 easing 효과를 얻을 수 있다. https://gsap.com/docs/v3/Eases

 

Easing | GSAP | Docs & Learning

Easing is the primary way to change the timing of your tweens. Simply changing the ease can adjust the entire feel and personality of your animation. There are infinite eases that you can use in GSAP so we created the visualizer below to help you choose ex

gsap.com

 

transition-dely : 시간; (기본값 0s)

전환 효과가 몇 초 뒤에 시작할지 대기시간 지정 속성

 

div {
  width: 150px;
  height: 150px;
  background-color: #16E2F5;
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  line-height: 150px;
  transition: 1s 2s;		/* 선 지속시간, 후 대기시간 */
}
지속시간, 대기시간 동시 지정

 

:hover, :active를 자연스럽게 만들어 주는 단축 속성이다. 

개별 속성으로는 4가지가 있다. (비교 이미지 정리)

전환 속성의 특정 속성만 사용이 가능 하다. (정리)

 

transition-timming-function : 전환 효과의 타이밍 함수를 지정하는 것.

transition-delay : 전환 효과가 몇 초 뒤에 시작하는지 대기시간 지정하는 것.

 

변환 효과 (transform)

요소를 변환시켜주는 속성

변환 함수를 사용하여 원근법, 이동, 크기, 회전, 기울임 등 변환 효과를 주는 것이다.

body {
  margin: 50px;
}

.container {
  width: 150px;
  height: 150px;
  background-color: #BDF516;
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  line-height: 150px;
}

.container .item {
  width: 150px;
  height: 150px;
  color: #fff;
  background-color: #4E16F5;
  transform: rotate(45deg);		/* 변환 함수 명시 */
}

변환 함수 : 45도 회전

 

여기서 scale(크기)를 명시 해보자. 

.container .item {
  width: 150px;
  height: 150px;
  color: #fff;
  background-color: #4E16F5;
  transform: rotate(45deg) scale(1.2);		/* 크기를 1.2배로 명시 */
}

변환 함수 : 45도 회전, 1.2배 크기

 

변환 함수

2D

translate : X축, Y축으로 이동 (단위 px)

body {
  margin: 50px;
  background-color: #DADBDD;
}

.container {
  width: 150px;
  height: 150px;
  background-color: #837E7C;
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  line-height: 150px;
}

.container .item {
  width: 150px;
  height: 150px;
  color: #000;
  background-color: #FFDF00;
  translate: 30px 30px;		/* X축으로 30px 이동, Y축으로 30px 이동 */
}

출력 화면

translate : X(x) 축 개별 이동 (단위 px)

translate : Y(y) 축 개별 이동 (단위 px)

scale : 숫자(X축,Y축 동시 적용 가능) (권장, X축 Y축 개별 크기 지정 비권장)

.container .item {
  width: 150px;
  height: 150px;
  color: #000;
  background-color: #FFDF00;
  scale: 1.5;		/* 크기 1.5배 명시 */
}

.container .item {
  width: 150px;
  height: 150px;
  color: #000;
  background-color: #FFDF00;
  scale: 1.5;
  opacity: 0.5;		/* 투명도 지정하여 scale가 얼마나 커졌는지 보자! */
}

투명도 명시

rotate(degree) : 회전(각도) (단위 deg)

skewX(x) : X축 개별 기울임 (단위 deg) - 마름모 만들 수 있음

skewY(y) : Y축 개별 기울임 (단위 deg) - 마름모 만들 수 있음

.container .item {
  width: 150px;
  height: 150px;
  color: #000;
  background-color: #FFDF00;
  transform: perspective(500px) skew(45deg);		/* 적용! */
}

마름모 모양으로 변한다.

 

3D

rotateX(x) : X축을 기준으로 3D 회전

rotateY(y) : Y축을 기준으로 3D 회전

**글씨가 있으면 찌그러 지는 이슈가 있다. 

 

perspective(함수) : 원근법(거리)

앞에 있어야지만 적용이 가능하다. 

rotate만 명시하면 3D로 보이지 않아 원근법 함수를 추가하여 회전하는 것을 보자.

.container .item {
  width: 150px;
  height: 150px;
  color: #000;
  background-color: #FFDF00;
  transform: perspective(500px) rotateX(45deg);	/* X축을 기준으로 3D회전 */
}				  /* 꼭 회전 함수 앞에, i.e.transform 모든 속성 맨 앞에 배치해야 한다. */

X축을 기준으로 3D회전

 

Y축을 기준으로 3D회전

 

perspective(속성) : 단위; (원근거리 해당 값)

하위요소를 관찰하는 원근 거리를 지정

 

perspective함수perspective속성 차이점 : 

속성/함수 적용 대상 요소가 변환되는 기준점(위치) 설정
perspective : 500px;             (권장)형태 관찰 대상의 부모 요소에 적용 perspective-origin
transform:perspetive(500px);       함수 형태 관찰 대상의 원근거리 부여 요소에 직접 적용 transform-origin

i.e. 관찰대상을 부모로 지정 혹은 본인에게 지정의 차이

 

body {
  margin: 50px;
  background-color: #DADBDD;
}

.container {
  width: 400px;
  height: 150px;
  background-color: #6698FF;
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  line-height: 150px;
  
}

.container .item {
  width: 225px;
  height: 150px;
  background-color: #FFCC66;
  color: #000;
  transform: perspective(500px) rotateY(50deg);		/* perspective함수로 자기자신에게 지정 */
}

perspective함수로 자기자신에게 지정

 

.container {
  width: 400px;
  height: 150px;
  background-color: #6698FF;
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  line-height: 150px;
  perspective: 500px;		/* 부모 요소에 perspective속성 적용 */
}

.container .item {
  width: 225px;
  height: 150px;
  background-color: #FFCC66;
  color: #000;
  transform: rotateY(50deg);
}

부모 요소에 perspective속성 적용

 

backface-visibility

뒤집었을 때 뒷면이 보이지 않도록 해주는 속성

.container .item {
  width: 225px;
  height: 150px;
  background-color: #FFCC66;
  color: #000;
  transform: rotateY(180deg);		/* 180도 회전 */
}

자식 요소 기준으로 180도 회전

 

.container .item {
  width: 225px;
  height: 150px;
  background-color: #FFCC66;
  color: #000;
  transform: rotateY(180deg);
  backface-visibility: hidden;		/* 뒷면이 보이지 않독록 명시 */
}

뒷면이 보이지 않독록 명시

 

반응형
반응형

선택자 우선순위 란?

하나의 요소가 여러 선언 대상이 된 경우

어떤 선언을 우선적으로 적용할지 결정하는 방법.

조건1
Css 내용을 Html에 적용할 때 붙는 점수가 높은 선언이 화면에 출력된다.

조건2
점수가 같을 경우, 맨 마지막으로 작성한 코드 내용이 우선 적용된다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style="color:green;">
</head>
	<div id="color_orange"
     	 class="color_yellow"
     	 style="color:green;">		<!-- 2순위 (인라인 선언 - 1000점 -->
      	 Hello World!!
    </div>
</html>

 

div {color:red !important;}		/* 1순위 (!important - 9999999점) */
#color_orange {color:orange;}		/* 3순위 (ID 선택자 - 100점) */
.color_yellow {color:yellow;}		/* 4순위 (Class 선택자 - 10점) */
div {color:blue;}			/* 5순위 (태그 - 1점)*/
* {color:darkblue;}			/* 6순위 (전체 선택자) - 0점) */
body {color:purple;}			/* 상속되지 않음 */

 

!importnat > Inline Style > id > class > tag

왼쪽부터 오른쪽 방향으로

명시도 우선순위가 높은 순에서 낮은 순으로 간다.

CSS에서 Cascading은 중요한 개념이기 때문에

선택자를 적절하게 사용해서 우선순위를 부여해주는것이 바람직하다고 한다.

 

[출처_daeyun대윤]

https://iamdaeyun.tistory.com/entry/Lesson-7-CSS-%EC%82%AC%EC%9A%A9%EC%8B%9C-%EB%B0%98%EB%93%9C%EC%8B%9C-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0%EA%B2%83-%EB%AA%85%EC%8B%9C%EB%8F%84

 

Lesson #7 CSS 사용시 반드시 알아야 할것, 명시도

Lesson #7 CSS 사용시 반드시 알아야 할것, 명시도 CSS 명시도란 ? 오늘은 명시도에 대해 얘기를 해드리고 싶어요. CSS 선택자를 내 맘대로 후다닥 가지고 놀면서 작업하려면 명시도에 대한 이해가 필

iamdaeyun.tistory.com

 

** 기본 선택자 점수별 순서 (우선 순위 선택자) 기억 해두자.

아래 이미지의 style.css파일 참조!

우선순위 선택자
출력화면

반응형

'CSS' 카테고리의 다른 글

[CSS] Margin 외부 여백  (0) 2024.01.27
[CSS] CSS 속성  (0) 2023.12.26
[CSS] CSS 상속, 상속되는 CSS속성  (0) 2023.12.19
[CSS] CSS 선택자  (0) 2023.12.12
[CSS] CSS 선언 방식, Types of CSS  (0) 2023.12.09
반응형

1. 스타일 상속

Css 내용을 적용했을 때, 적용된 내용이 기타 하위 요소까지 영향을 주는 것을 말한다.

body {
  margin:50px;
}

.people {		/* people에 Css를 적용하였는데 */
  color:lightpink;
  font-weight:bold;
}
<body>
    <div class="worker">직원
      <div class="people">사람		<!-- people 요소 외 하위요소까지 모두 선택이 되었다. -->
        <div class="Jim">Jim</div>		<!-- 주목! -->
        <div class="Tommy">Tommy</div>  	<!-- 주목! -->
        <div class="Eve">Eve</div>      	<!-- 주목! -->
      </div>
      <div class="robot">로봇</div>
    </div>
</body>

출력화면

 

이렇게 부모 요소를 통해 상속되는 Css 속성은 모두 글자/문자와 관련된 속성 이라는 것!

** 주의 : 그렇다고 모든 글자/문자 속성이 상속되는 것은 아니다.

e.g.

font-size | 글자 크기
font-family | 폰트(서체)
font-weight | 글자 두께
font-style | 글자 기울기
Inline-height | 글자 높이
color | 글자 색상
text-align | 정렬
...

 

2. 강제 상속

실제로 상속이 되지 않는 속성을 강제로 상속시키는 것.

<body>
    <div class="parent">
      <div class="child">
    </div>
</body>

 

.parent {
  width:500px;
  height:300px;
  background-color:lightblue;
}

.child {
  width:300px;
  height:inherit;		/* 부모 요소에 상속하라는 뜻이다. */
  background-color:blue;
}

출력화면

반응형

'CSS' 카테고리의 다른 글

[CSS] CSS 속성  (0) 2023.12.26
[CSS] CSS 선택자 우선순위 (중요!)  (0) 2023.12.20
[CSS] CSS 선택자  (0) 2023.12.12
[CSS] CSS 선언 방식, Types of CSS  (0) 2023.12.09
[CSS] 브라우저 스타일 리셋,초기화_CSS reset  (0) 2023.11.30
반응형

1. 기본

전체 선택자 (Universal Selector)

범위 안에 있는 모든 요소 선택

* {
    background-color:gold;
}

 

태그 선택자 (Type Selector)

태그 이름으로 요소 선택

단, 태그의 종류가 모든 요소를 구분할 만큼 고유한 것이 아니기에 원하는 요소를 조금 더 정확하게 집어낼 수 있는 class 선택자를 사용할 수 있다. 

div {
    background-color:gold;
}

 

클래스 선택자 (Class Selector)

class로 지정한 요소 선택 (중복 선택 가능)

.name {
    background-color:gold;
}

 

아이디 선택자 (ID Selector)

전역 속성 id 값을 통해 요소를 찾는 개념

#name {
    background-color:gold;
}

2. 복합

일치 선택자 (Basic Combinator)

두 요소를 동시에 만족하는 선택자

** 주의 : 태그 선택자는 맨 앞에 작성해야 컴퓨터가 태그 선택자 임을 인식할 수 있다. 

div.name {		/* 태그와 클래스를 동시에 충족시킨다. */
    background-color:gold;
}

 

자식 선택자 (Child Combinator)

해당 선택자의 자식 요소 선택

div>.profile {
    background-color:gold;
}

 

<body>
    <div> <!-- div의 -->
        <ul class="profile"> <!-- .profile 자식 요소 선택자 -->
            <li class="name">Tom</li>
            <li class="age">28</li>
        </ul>
    </div>
    <div> <!-- div의 -->
        <ul class="profile"> <!-- .profile 자식 요소 선택자 -->
            <li class="name">Nate</li>
            <li class="age">33</li>
        </ul>
    </div>
    <span class="name">Joon</span>
</body>

화면출력

 

하위(후손) 선택자 (Descendant Combinator)

해당 선택자의 하위에 있는 요소 선택

** 주의 : 띄어쓰기가 선택자 기호이다. (아래 예시 참조)

div .name {
    background-color:gold;
}

 

<body>
    <div> <!-- div의 -->
        <ul>
            <li class="name">Tom</li> <!-- .name 해당되는 하위 선택자 -->
            <li class="age">28</li>
        </ul>
    </div>
    <div> <!-- div의 -->
        <ul>
            <li class="name">Nate</li> <!-- .name 해당되는 하위 선택자 -->
            <li class="age">33</li>
        </ul>
    </div>
    <span class="name">Joon</span>
</body>

출력화면

 

인접 형제 선택자 (Adjacent Sibling Combinator) 꼭 기억 해두자!

선택자의 다음에 해당하는 형제 요소 하나를 선택

.age+li {
    background-color:gold;
}

 

<body>
    <div> 
        <ul class="profile"> 
            <li class="name">Tom</li>
            <li class="age">28</li> <!-- .age 선택자의 -->
            <li class="company">Kakao</li> <!-- 다음 형제 요소 -->
        </ul>
    </div>
    <div>
        <ul class="profile"> 
            <li class="name">Nate</li>
            <li class="age">33</li> <!-- .age 선택자의 -->
            <li class="company">Line</li> <!-- 다음 형제 요소 -->
        </ul>
    </div>
    <span class="name">Joon</span>
</body>

출력화면

 

일반 형제 선택자 (General Sibling Combinator)

선택자의 다음에 해당하는 형제 요소 모두 선택

.age~li {
    background-color:gold;
}

 

<body>
    <div> 
        <ul class="profile">
            <li class="name">Tom</li>
            <li class="age">28</li> <!-- .age의 --> 
            <li class="company">Kakao</li> <!-- 다음 형제요소 모두 선택자 -->
            <li class="addr">Seoul</li> <!-- 다음 형제요소 모두 선택자 -->
        </ul>
    </div>
    <div>
        <ul class="profile"> 
            <li class="name">Nate</li>
            <li class="age">33</li> <!-- .age의 --> 
            <li class="company">Line</li> <!-- 다음 형제요소 모두 선택자 -->
            <li class="addr">GyeongGi</li> <!-- 다음 형제요소 모두 선택자 -->
        </ul>
    </div>
</body>

출력화면

3. (동작을 처리하는) 가상 클래스

:hover ** 자주 사용하는 선택자

마우스를 올렸을 때 변화하는 상태를 만들어 준다. (단, 이 외는 웬만하면 Js로 만든다.) 

<body>
    <div class="box"></div>
</body>

 

div {
  width: 100px;
  height: 100px;
  background-color:orange;
}

div:hover {
  width: 250px;
}
출력화면

** 함께 사용하면 효과보는 요소

전환 효과 (Transition)

div {
  width: 100px;
  height: 100px;
  background-color:orange;
  transition: 1s; /* 전환효과로 길게 늘어난다. */
}

div:hover {
  width: 250px;
}
출력화면

:active 

마우스를 올려서 클릭하고 유지하는 동안 변화한다.

출력화면

:focus

사용자에게 데이터를 입력받는 요소에 마우스를 올려서 클릭 후 활성화 된 상태포커스 후 선택한다. (Html 대화형 콘텐츠에만 해당)

 

** 포커스가 가능한 요소에서만 작동이 된다.

input, a, label, select, button, textarea 등 

 

그럼 포커스가 가능하지 않는 요소에 :focus를 작동할 수 있을까? 🤔

대답은 YES!!

 

e.g. Html div 요소에 tabindex='-1' 추가하면 아래와같이 포커스가 되는 것을 볼 수 있다. 

단, 

i.e. Tab키를 통해 포커스 가능한 순서를 지정하는 것이다. 

<div class="box" tabindex="-1"></div><br/>

 

.box:focus {
  background-color: lightblue;
}

 

출력화면

4. (동작을 처리하지 않는) 가상 선택자 (pseudo-classes)

:hover, :active, :focus는 Js에서 다루는 Css 동작 처리가 가능하다.

단, Css는 동작을 처리하는 개념이 아니기에 극히 일부분에 해당된다.

 

:first-child

첫 번째 자식이면 선택하는 선택자 (가상 선택자 기호인 : 으로 시작)

div가 부모 요소이며, 자식요소 span,p,h3는 같은 부모를 가진 자식 요소이다.

<div class="name">
    <span>Tomy</span>
    <span>Betty</span>
    <p>Lora</p>
    <h3>Lily</h3>
</div>

 

클래스 name의 하위 요소 span의 첫 번째 자식 요소 선택.

.name span:first-child{
  background-color: rgb(187, 238, 157);
}

출력화면

 

:last-child

선택자가 형제 요소 중 막내라면 선택.

.name h3:last-child{
  background-color: rgb(237, 202, 164);
}

출력화면

 

:nth-child(숫자)

선택자가 형제 요소 중 몇 번째에 해당하면 선택.

 

br태그도 하나의 자식요소에 해당된다. (예시1)

<div class="name">
    <span>Tomy</span>
    <span>Betty</span>
    <p>Lora</p>
    <h3>Lily</h3>
</div>

 

클래스 name 부모요소의 모든 자식요소두 번째 요소 선택

.name *:nth-child(2){
  background-color: rgb(237, 202, 164);
}

(예시1) <br>태그도 하나의 자식 태그로 인식한다.

 

<br/>태그를 Html 코드에 추가할 경우,

:nth-child 3번째 자식요소를 선택해야 (예시1)과 동일하게 'Betty'를 동일하게 선택 가능하다.(예시2)

<div class="name">
    <span>Tomy</span><br/>
    <span>Betty</span>
    <p>Lora</p>
    <h3>Lily</h3>
</div>

 

.name *:nth-child(3){
  background-color: rgb(237, 202, 164);
}

 

(예시2) <br>태그도 하나의 자식 태그로 인식한다.

 

:nth-child(숫자n)

n은 0부터의 숫자를 들어가는 자리이다.

이 외로 여러가지 사용 방법이 있다. 

2n = 2x1, 2x2, 2x3 = 짝수 번째
2n+1 = 2x1+1, 2x2+1, 2x3+1 = 홀수 번째
n+2 = 0+2, 1+2, 2+2 = 2번째 요소부터 선택

 

부정 선택자 (Nagation) NOT

괄호 안에 있는 가장 선택자를 제외하고 선택

.name *:not(span){
  background-color: rgb(237, 202, 164);
}

출력화면

5. 가상 요소 선택자 (Pseudo-Elements) **자주 사용

가상의 요소를 만들어서 실제로 삽입할 수 있는 구조를 가진다.

 

::before (콜론::두개 붙여서 쓰는게 웹표준이다.)

선택자 요소의 내부로 들어가, 선택자의 맨 앞에 내용을 삽입하는 개념.

 

아래 예시와같이 name이라는 선택자를 가지는 요소 앞에 contant속성에 작성한 내용을 명시한다.

i.e. '앞!!'이라는 글자::before라는 가상 인라인 요소를 만들어서 name이라는 클래스를 가진 요소의 내부 앞에다 삽입하는 구조이다.

.name::before{		/* ::before는 인라인요소 */
  content: "앞!!";
  color: rgb(83, 177, 254);
}

출력화면

 

::after

선택자 요소의 내부로 들어가, 선택자의 맨 뒤에 내용을 삽입하는 개념.

** 주의 : Css content 내 " "으로 비워두는 한이 있어도, 필수로 작성해야 한다.

.name::after{
  content: "뒤!!";
  color: rgb(83, 177, 254);
}

출력화면

 

인라인 요소는 가로,세로 값을 지정해도 실제로 적용이 안된다. 

가로, 세로 값을 만들어주려면

인라인 요소 -> 블럭 요소로 전환해주는 속성을 넣어줘야 한다.

e.g. display : block 을 추가하면 된다.

.name::after{
  content: "";
  color: rgb(83, 177, 254);
  display: block; /* 인라인 요소를 블록 요소로 전환하는 방법 */
  width: 100px;
  height: 100px;
  background-color:lightpink;
}

 

6. 속성 선택자 (Attribute) ATTR

**주의 : 대괄호[] 이용하여 속성 선택자 임을 명시하기.

 

[속성Attribute]

속성의 이름만 가지고 선택하는 선택자

 

disabled를 가진 요소가 선택되어 글자 색상이 파란색으로 적용되는 구조.

<body>
    <input type="text" value="evelyn.kim">
    <input type="password" value="password">
    <input type="text" value="ddeok.kim" disabled>
</body>

 

[disabled] {
    color: blue;
}

출력화면

 

(동일html코드에) 속성 이름이 type인 요소 명시하기.

[type] {
    color: blue;
}

출력화면

 

[속성Attribute="속성 값"]

속성 선택자와 그의 속성 값과 함께 명시하여 찾는 선택자

장점 : 정확하게 원하는 속성을 찾을 수 있다.
<body>
    <input type="text"/><br/>
    <input type="password"/>
    <span data-worker-name="evelyn.kim">ddeok.kim</span>
</body>

 

속성 선택자 부분에 실제로 값을 입력하지 않아도

해당 속성을 가지고 있으면 유용하게 사용 가능.

body {
  margin:50px;
}

[data-worker-name] {		/* 모든 속성에 부합하는 선택자_대표적으로 data속성이 있음. */
    background-color: lightpink;
    color:red ;
}

출력화면

반응형

+ Recent posts