Language

UIUX/내용

CSS 기초

초코렛맛 2024. 4. 1. 11:56

■ CSS 란? CSS의 역할

○ CSS (Cascading Style Sheets)

- Cascading : 계단식 위에서 흐르는

- Style : 양식

- Sheets : 판, 한장

- 계단식으로 스타일을 정의하는 문서

- HTML 문서에 스타일을 더해준다. HTML은 계단식 구조를 지니고 있다.

 

 

 CSS 기본문법

- 선택자 : 어떤 요소에 스타일을 적용할지 정보

- {중괄호} : 선택한 요소에 적용할 스타일을 정의 하는 구간

- 속성명 : 어떤 스타일을 정의하고 싶은지에 대한 정보

- 속성값 : 어느정도의 수치에 맞게 정의하고 싶은지에 대한 정보

 

 html에서 연결방법

<head>
<link rel = "stylesheet" type="text/css" href = "css/style.css">

</head>

 

 CSS주석처리

p{
    background-color: blue;
    /* p태그에 파랑 넣기 */
}

 

 HTML에 CSS를 더해주는 방식

- 인라인 스타일 : 태그에 직접 기술 (잘 사용하지는 않는다.)

  코드를 유지보수하기 어렵다. 직접 하나씩 하나씩 올려줘야 됨

- 스타일 태그 : 스타일 시트를 위한 HTML에 태그 추가 기술

- 문서 간의 연결 : 스타일 시트 문서를 따로 작성하여 HTML 문서와 연결

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
    <!-- 문서간 연결 -->
    <style>#a{color: red;}</style>
    <!-- 스타일 태그 -->
</head>
<body>
    <p style="color: blue;">안녕</p>
    <!-- 인라인 스타일 -->
    <p id="a">안녕</p>
    <p>안녕</p>
<body>
    
</html>

 

 

 선택자 기본

 

 선택자

- 어떤 요소에 스타일을 적용 할 것인지에 대한정보

- 선택자 종류 : 기본, 그룹, 특성, 결합, 의사 클래스, 의사 요소

 

 기본 선택자

- 전체 선택자 : *(애스터리스크) 문서 내의 모든 요소를 의미 하는 기호

*{
    background-color: aqua;
}

 

- 태그 선택자

주어진 이름을 가진 요소를 선택 '유형 선택자' 라고도 한다.

주어진 이름을 가진 요소가 다수일때 모두 선택

p{
    background-color: aqua;
}

 

- 클래스 선택자

전역 속성으로 동일한 명의를 모두 선택

<body>
    <p class="a1">안녕</p>
    <p class="a1">안녕</p>
    <p class="a2">안녕</p>
<body>

<style>
.a1{
    background-color: red;
}
.a2{
    background-color: blue;
}
</style>

 

- 아이디 선택자

고유한 식별자 역할을 하는 전역속성으로

id속성값을 가진 요소를 선택

id속성값을 동일하게 하면 여기에서는 HTML, CSS 에서는 문제

없어 보이지만 웹표준을 위반하게되어 Javascript에서 문제 발생할 수 있음

<body>
    <p id="a1" class="a b">안녕</p>
    <!--클래스 이름을 두개 선택하는 법-->
    <p id="a2" class="a">안녕</p>
    <p id="a3" class="a">안녕</p>
<body>

.a{
    background-color: blueviolet;
}
.b{
    background-color: aqua;
}

#a2{
    background-color: red;
}

 

 그룹선택자

다양한 유형의 요소를 한꺼번에 선택하고자 할 때 사용한다.

쉼표(,)를 이용해 선택자를 그룹화한다.

<body>
    <p id="a1">안녕</p>
    <p id="a2">안녕</p>
    <p id="a3">안녕</p>
    <h1>제목1</h1>
    <h2>제목2</h2>
<body>


#a1, h1{
    background-color: blue;
}

 

  선택자 우선순위

선택자가 겹치는 경우, 기본적으로 나중에 작성된 스타일이 적용

선택자가 다르지만 요소가 겹치는 경우 선택자 우선순위에 의해 적용될 스타일이 결정

아이디 선택자 > 클래스 선택자 > 태그 선택자

 

- 나중 작성 스타일 우선 적용

<body>
    <p id="a1" class="a">안녕</p>
    <p id="a2" class="a">안녕</p>
    <p id="a3">안녕</p>
<body>



.a{
    background-color: blue;
    color: white;
}
.a{
    background-color: red;
    /* 하얀색 글자는 넣어지지만 배경은 아래쪽이 우선 */
}

 

 

- 선택자 우선적용

<body>
    <p id="a1" class="a">안녕</p>
    <p id="a2" class="a">안녕</p>
    <p id="a3">안녕</p>
<body>



#a2{
    background-color: blue;
}
.a{
    background-color: red;
    /* 클래스는 a인데 id a2는 미적용 */
}
p{
    background-color: aqua;
    /* a 클래스에 미적용 */
    color: white;
    text-align: center;
}

 

 

 텍스트 꾸미기

 

  font-family

- 택스트에 사용할 글꼴 지정할때 사용

- 사용자의 스스템에 해당 글꼴이 설치 되어 있지 않을경우를 대비 여러 글꼴을 백업으로 지정

 

- 기본사용법

선택자 {
  font-family: 글꼴명, 글꼴계열;
}

* 선택자 : 스타일을 적용할 HTML 요소 지정

* 글꼴명 : 사용할 글꼴 이름지정, 이름에 공백시 (" ")로 묶어줌

* 글꼴 계열 : 글꼴명이 사용할 수 없을 때 사용할 글꼴 계열 지정

 

- 글꼴 지정 예시

p {
  font-family: Arial;
  /* 단일 글꼴지정 */
}


body {
  font-family: "Times New Roman", Times, serif;
  /* 여러글꼴 및 글꼴 계열 지정 */
}

 

- 글꼴 계열

* serif : 획 일부끝이 돌출된 형태 (예: Times New Roman)

* sans-serif: 획 일부끝이 돌출 없는 글꼴 (예: Arial)

* monospace: 고정 너비의 글꼴 (예: Courier New)

* cursive: 필기체 스타일의 글꼴(예: Brush Script)

* fantasy: 장식적인 글꼴(예: Papyrus)

* 글꼴 계열을 지정하면 해당 계열의 기본 글꼴이 사용됨

사용자의 시스템에 특정 글꼴이 설치되어 있지 않을 경우 유용한 백업방법임

 

  font-size

단위 의미
px 모니터 상의 화소 하나 크기에 대응하는 절대크기
rem <html> 기본글꼴에 대응하는 상대크기
em 부모태그(상위태그)의 font-size에 대응하는 상대크기

 

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




body{
    font-size : 30px;
}
body > div {
    font-size: 2em;
}
body > div > div{
    font-size: 2rem;
}

 

 

  text-align

- 블록 내에서 텍스트 정렬 방식을 정의한다.

속성값 의미
left / right 왼쪽 또는 오른쪽 정렬한다.
center 가운데 정렬한다
justify 양끝 정렬한다. (마지막 줄 제외)
<body>
    <div class="lt">왼쪽</div>
    <div class="rt">오른쪽</div>
    <div class="ce">중앙</div>
    <div class="lr">
        비상계엄하의 군사재판은 군인·군무원의 범죄나 군사에 관한 간첩죄의 경우와 초병·초소·유독음식물공급·포로에 관한 죄중 법률이 정한 경우에 한하여 단심으로 할 수 있다. 다만, 사형을 선고한 경우에는 그러하지 아니하다.
    </div>
    <br>
    <span class="rt">스판오른쪽</span>
</body>



.lt{
    text-align: left;
}
.rt{
    text-align: right;
}
.ce{
    text-align: center;
}
.lr{
    text-align: justify;
}

 

 color

- 텍스트의 색상을 정의한다. 다양한 방법으로 색상을 지정할 수 있다.

속성값 유형 의미
키워드 미리 지정된 색상별 키워드 사용
RGB 색상 코드 # 여섯자리 16진수 값 형태로 지정
RGB 함수 Red, Green, Blue의 수준을 각각 정의해 지정한다.
<body>
    <span id="a1">색상1</span><br>
    <span id="a2">색상2</span><br>
    <span id="a3">색상3</span><br>
    <span id="a4">색상4</span><br>
    <span id="a5">색상5</span><br>
    <span id="a6">색상6</span><br>
   
</body>



#a1{color: red;}
#a2{color: #f3c;}
#a3{color: #ff33cc;}
#a4{color: rgb(130, 10, 200);}
#a5{color: rgb(10%,255,60%);}   /*혼합사용금지*/
#a6{color: rgb(100%,0%,0%,0.5);
font-size: 2rem;}

 

 

 

■ display 속성

none block inline inline-block
보이지 않음 블럭 인라인 인라인 블럭

 

 인라인 요소

- 위치 같은 줄에 나란히 배치, 이전요소 바로 뒤에서 시작

- 크기는 콘텐츠의 너비만 차지 즉 너비와 높이를 직접 설정할수 없음

- 여백 상하 여백 미적용 또는 예상과 다르게 작동, 좌우여백은 적용

 

 블록 요소

- 새 줄에서 시작 사용 가능한 전체 너비를 차지, 다음요소는 블록 아래에 새줄로 배치

- 크기는 부모 요소의 전체 너비를 차지 너비와 높이 직접 설정 가능

- 여백은 상하 좌우 모든 방향의 여백 적용

 

 인라인 - 블록 요소

- 인라인 요소처럼 같은 줄에 나란히 배치, 블록 요소처럼 너비와 높이를 지정가능

- 크기는 콘텐츠의 너비만 차지 명시적으로 너비 높이 설정가능

- 여백은 상하좌우 모든 방향의 여백이 적용

 

 

 사용시나리오

 

 인라인 요소

- 텍스트의 일부를 스타일링할 때 사용

예를 들어, <span>을 사용하여 문장 내 특정 단어에 다른 색상, 폰트 또는 강조 스타일을 적용할 때.

- 하이퍼링크 생성

<a> 태그로 텍스트나 이미지에 링크를 추가할 때. 이는 문서 내에서 다른 섹션으로 이동하거나

다른 웹페이지로 네비게이션하는 데 사용

- 이미지나 다른 미디어

<img> 태그를 사용하여 텍스트와 함께 이미지를 인라인으로 배치할 때.

 

 블록 요소

- 주요 섹션 또는 레이아웃 요소를 구성할 때

<div>는 웹 페이지를 섹션으로 나누고, 컨테이너로서 스타일링과 구조를 제공하는 데 자주 사용됨

- 문단을 구분할 때

<p> 태그는 텍스트 블록을 문단으로 나누는 데 사용됨

- 제목과 하위 제목구분

<h1>부터 <h6>까지의 제목 태그는 문서의 제목과 하위 제목을 나타내는 데 사용됨

- 목록 생성

<ul>, <ol>, <li> 태그를 사용하여 순서가 있는(번호가 매겨진) 또는 순서가 없는(점으로 표시된) 목록을 만들 때.

 

 인라인 블록 요소

- 너비와 높이가 필요한 인라인 요소

예를 들어, 버튼 또는 작은 폼 요소를 인라인으로 배치하면서도 크기를 조정해야 할 때 사용됨

- 수평 메뉴 또는 네비게이션 바

메뉴 아이템을 가로로 나열하면서 각 아이템의 패딩, 마진, 크기를

조절할 수 있어야 할 때 인라인-블록이 사용됨

- 그리드 또는 타일 레이아웃

여러 요소를 가로로 나란히 배열하면서도 각각의 요소에 대한 레이아웃 제어가 필요한 경우

예를 들어 사진 갤러리나 카드 레이아웃을 구현할 때 사용됨

 

 

 

■ Inline-block  특징 및 종류

형태 특징 종류
인라인 요소
Inline Elements
기본 너비 : 컨텐츠의 너비
한줄에 여러 개 배치
크기값을 가질수 없음
상하 마진은 가질 수 없음
span, a, small, big, em, u, ins, i, s, del, br, q, b, strong, mark, sub, sup, label, map, cite, addr, time
블럭 요소
Block Elements
기본 너비 : 100%
한 줄에 하나만 배치
너비와 높이를 가질수 있음
상하좌우 마진 가질 수 있음
div, p, table, ul, ol, li, dl, dd, td, tr, td th, form
h1~h6, header, nav, footer, main, section, article, fiure
figcaption, symmary, details, address, blockquote, aside 
인라인 블록요소
(Inline Block Elements)
기본 너비 : 컨텐츠의 너비 값
한 줄에 여러개 배치
크기값을 가질수 있음
상하좌우 마진 가질수 있음
img, button, select
input, textarea, video, audio
대부분의 font icon 태그

 

 

 display 속성

 

 여러속성

- none

요소가 차지하던 공간도 사라지고, 화면에 표시되지 않음

- block

새 줄에서 시작하며, 가능한 한 많은 너비를 차지

- inline

블록 레벨과 달리, 너비와 높이를 갖지 않으며, 내용의 너비만큼만 공간을 차지

- inline-block

인라인 레벨로 배치되지만, 블록 레벨 요소처럼 너비와 높이를 가질 수 있음

flex

플렉스 컨테이너로 만들어, 자식 요소를 플렉스 아이템으로 배치

플렉스박스 레이아웃을 사용하여 요소를 효율적으로 정렬하고 분배

 grid

그리드 컨테이너로 만들어, 자식 요소를 그리드 아이템으로 배치

그리드 레이아웃을 사용하여 복잡한 두 차원 배열을 쉽게 설계

table, table-row, table-cell

전통적인 HTML 테이블 레이아웃을 CSS로 재현

- inline-flex

인라인 플렉스 컨테이너로 만들어, 플렉스 아이템으로 자식 요소를 배치

요소가 인라인 요소처럼 배치되면서도 내부에서는 플렉스박스 레이아웃의 이점을 활용

inline-grid

요소를 인라인 그리드 컨테이너로 만들어, 그리드 아이템으로 자식 요소를 배치

인라인 요소처럼 배치되면서도 내부에서는 그리드 레이아웃을 활용

 

 display 처리

- 인라인요소 및 블록으로 변경

<body>
    <div>안녕</div><div>안녕2</div>
    <span>우리</span>
    <span>우리</span>
   
</body>



div{
    display: inline;
    background-color: red;
}
span{
    display: block;
    background-color: blue;
}

 

 

 

 border 속성

요소가 차지하고 있는 영역에 테두리를 그릴수 있다.

border 속성에는 속성값으로 테두리의 두께, 모양, 크기 등을 함께 지정이러한 속성을 단축속성이라고 한다.

속성명 속성값
border-color color 정의와 동일
border-width thin(1px), medium(3px), thick(5px) 또는 px, em, rem
border-style none(기본), solid(직선), dotted(점선), dashed(긴 점선) 등

 

-border 사용방법

a{
border: 5px solid blue;
      /*크기 종류 색*/
}

 

-border-width 사용

a{
    /* 상,하   |   좌,우 */
    border-width: 5px 20px;
    /* 상   |   좌,우   | 하*/
    border-width: 5px 20px 3px;
    /* 상   |   우   |   하   |   좌*/
    border-width: 1px 10px 1px 10px;
}

 

- 적용

<body>
    <div>안녕</div><div>안녕2</div>
    <span>우리</span><span>우리</span>
   
</body>



span{
    border-width: 5px;
    border-style: solid;    
    border-color: red;
    
}
div{
    
    border: 5px solid blue;
}

 

 

 박스모델(Box-Model)

 

 박스모델이란?

브라우저가 요소를 렌더링 할 때 각각의 요소는 사각형 형태로 영역을 차지

이영역을 박스라 표현하며 CSS는 박스의 크기, 위치, 속성(색, 배경, 테두리)을 결정할 수 있다.

 

- 박스의 영역

* 콘텐츠 영역 : 실제 콘텐츠를 포함 너비와 높이가 기본크기를 지정

* 안쪽 여백 : padding Area로 콘텐츠를 둘러싸는 공간, 콘텐츠와 테두리 사이 내부 여백 지정

* 배경색이나 배경이미지에 영향을 받음

경계선(테두리) : borde Area 패딩을 감싸는 테두리로 요소의 외곽선을 형성

* 바깥쪽 여백 : Margin Area로 테두리 바깥쪽 공간으로 다른 요소와의

외부 여백을 제공요소의 배경색이나 배경 이미지에 영향을 받지 않는다.

 

 박스 기본

<body>
    <div>콘텐츠</div>
    <span>기본</span><span>기초</span>
</body>


div{
    border: 2px solid red;
    padding: 10px 20px 5px;
    margin: 20px;
    width: 100px;
    height: 50px;
}
span{
    border: 1px solid blue;
    width: 50px;
    height: 50px;
    display: inline-block;
}

 

 Padding 과 Margin

- 테두리를 기준으로 안쪽 여백은 Padding, 바깥쪽 여백은 Margin

- 여백은 상하좌우 네 개의 면에 존재하는 영역으로 개별 적으로 두께를 정의할수 있다.

- Padding : padding-하위속성  top, right, left, bottom

- Margin : Margin-하위속성 top, right, left, bottom

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

div{
    width: 100px; height: 100px;
    padding : 30px;
    /* 30px로 되어 있지만 아래쪽이 우선이다. */
    padding-left: 10px;
    padding-top: 20px;
    padding-right: 30px;
    padding-bottom: 20px;
    border: 5px solid red;
}

 

 박스모델

- 실제크기 (콘텐츠, 안쪽 여백, 경계선까지)

- 바깥쪽 여백은 요소마다 간격을 설정한다.

<div></div>
    
div{
    width: 100px; height: 100px;
    border: 5px solid blue;
    padding: 10px;
    /* 총 너비는 130px 높이 130px */
}

 

 box-sizing

- 요소의 너비와 높이를 계산하는 방법을 지정

속성값 의미
content-box 기본값, 너비와 높이가 콘텐츠 영역만을 포함
border-box 너미와 높이가 안쪽 여백과 테두리까지 포함

 

div{
    width: 100px; height: 100px;
    border: 5px solid blue;
    padding: 10px;
    box-sizing: border-box;
    /* 총 너비는 100px 높이 100px */
    /* 콘텐츠의 너비는 70px 높이 70px */
}

 

 background

- 콘텐츠의 배경을 정의한다.

- 단축속성으로 색상이미지 반복등 정의 할 수 있다.

하위속성 역할
background-color 배경색 정의
background-image 배경 이미지를 정의
background-position 배경 이미지의 초기 위치 정의
background-size 배경 이미지의 크기를 정의
background-repeat 배경 이미지의 반복방법을 정의

 

- background-image : 기본적으로 배경이미지가 콘텐츠보다 작으면 배경이미지에 대해서 반복적으로 실행됨 

{
background-image: url(주소);
}

 

- background-repeat : 배경이미지의 반복속성을 변경한다.

repeat(반복)기본값, no-repeat(반복안함)

 

 

 line-height / Vertical-align

 

 line-height

- 텍스트 내의 각 줄의 높이를 설정하여, 줄 간의 수직 간격을 조정

- 속성 사용방식

* 단위 없는 숫자 : 권장되는 방식으로 요소의 글꼴 크기에 곱해져 줄 높이를 결정

다른 CSS속성에는 값은 사용할 수 없음, 0이라는 수치는 사용가능단위를 넣어줘도 모두 같은 의미를 가지기 때문에 없음을 의미

* 길이 단위 사용 : 절대적 또는 상대적 단위 사용가능

* 백분율로 글꼴 크기에 따라 줄 높이가 조절됨

<div class="main">
    CSS 클래스 이름을 지정할 때는 가독성, 유지보수성, 그리고 확장성을 고려해야 합니다. 
</div>
    


*{
    border: 1px solid #000;
}
.main{
    width: 300px;    height: 200px;
    background-color: tan;
    line-height: 2;
}

 

 

 Vertical-align

- 인라인, 인라인-블록, 테이블 셀요소의 수직정렬을 조정하는데 사용

- 이 속성은 주로 텍스트나 이미지같은 인라인 요소들 사이에서 수직배치 제어

- 블록 레벨 요소에는 적용되지 않음

속성값 의미
baseline 기본값, 요소의 기준선을 포함 라인의 기분선 맞춤
top 요소의 상단을 라인 박스의 최상단과 맞춤
bottom 요소의 하단을 라인 박스의 최하단과 맞춤
middle 요소의 중앙을 라인 박스의 기준선 기준으로 약간 위쪽으로 정렬, 부모요소의 x-height의 중간

 

 

- 문자와 baseline

<div class="main">
    <span class="text">Apple</span>
    <span class="badge">New</span>
</div>



div{
    border: 1px solid #000; 
}
.main{
    width: 300px;    height: 200px;
    background-color: tan;
}
.text{
    background-color: red;
    color: #fff;
    font-size: 3rem;
}
.badge{
    background-color: #000;
    color: #fff;
}

노란선이 baseline임

 

- Vertical-align 작동

.badge{
    background-color: #000;
    color: #fff;
    vertical-align: bottom;
}

 

 

- baseline으로 인한 문제

* a클래스가 div로 inline-block이면서 기준점을 baseline을 잡아서글자가 아래쪽으로 보이듯 나옴

<div class="main">
    글자
    <div class="a"></div>
</div>


div{
    border: 1px solid #000; 
}
.main{
    width: 300px;    height: 200px;
    background-color: tan;
}
.main>.a{
    width: 50px;    height: 50px;
    display: inline-block;
    vertical-align: baseline;
    background-color: red;
}

 

- 인라인 블럭 정렬

vertical-align을 중앙정렬, 품고 있는 main의 line-height에 반응하여 중앙으로 이동

main의 line-height가 기본값일때는 특이사항 없음 

<div class="main">
    글자
    <div class="a"></div>
</div>



div{
    border: 1px solid #000; 
}
.main{
    width: 300px;    height: 200px;
    background-color: tan;
    line-height: 100px;
}
.main>.a{
    width: 50px;    height: 50px;
    display: inline-block;
    vertical-align: middle;
    background-color: red;
}

 

 

- 인라인 블럭 내부 글자

main의 line-height로 인해 내부에 있는 a태그까지 반응되었고

태그내 텍스트도 line-height를 100px 품고 있음

a태그내 line-height를 1로 변경 하면 해결

<div class="main">
    <div class="a">a내부</div>글자
</div>
    
div{
    border: 1px solid #000; 
}
.main{
    width: 300px;    height: 200px;
    background-color: tan;
    line-height: 100px;
}
.main>.a{
    width: 50px;    height: 50px;
    display: inline-block;
    vertical-align: middle;
    background-color: red;
}

 

- Vertical-align과 글자

<div class="main">
    <div class="a1">a1내부</div>글자
    <br>
    <div class="a2">a2내부</div>글자
</div>



div{
    border: 1px solid #000; 
}
.main{
    width: 300px;    height: 200px;
    background-color: tan;
    line-height: 100px;
}
.main>div{
    width: 50px;    height: 50px;
    display: inline-block;
    background-color: red;
}
.a1{    
    line-height: 2;
}
.a2{
    line-height: 1;
}

 

 

- 인라인 블럭에 Vertical-align 적용

    <div class="main">
        <div class="a">
            <div class="a1"></div>
            <div class="a1"></div>
        </div>
        <div class="a"></div>
        a
    </div>
    
    
div{
    border: 1px solid #000;
    box-sizing: border-box;
}
.main{
    width: 300px;    height: 200px;
    background-color: tan;
}
.main>.a{
    width: 50px;    height: 50px;
    display: inline-block;
    background-color: red;
    /* vertical-align: bottom; */   /* vertical-align 해주면 baseline 사라짐 */
    font-size: 0;
    
}
.a>.a1{
    width: 50%; height: 100%;
    display: inline-block;  
}

 

 Float and clear

 

 float속성

문서의 일반적 흐름에서 제외되어

자신을 포함하고 있는 컨테이너 왼쪽이나 오른쪽에 배치

 

 문서의 흐름 : HTML 문서에다 여러 요소를 만들면 먼저 만들어 놓은 것 부터

차례대로 브라우저에 표시되고 이런 차례를 말한다.

 

※ 컨테이너 Container : 특정 요소를 포함하고 그룹화하는 용도로 사용되는 요소

HTML문서 내에서 여러 요소를 논리적으로 묶고,

그룹화된 요소에 스타일을 적용하거나 레이아웃을 조정하기 위해 사용하는 요소

 

-  float 하위요소

속성값 의미
none 기본값, 원래 상태
left 자신을 포함하고 있는 박스의 왼편에 떠있어야 함
right 자신을 포함하고 있는 박스의 오른편에 떠 있어야 함

 

<div id="a"></div>
<div id="b"></div>
<p>문단태그</p>
<div id="c"></div>

#a{
    width: 200px;     height: 100px;
    background-color: orange;
    float:right;
}
#b{
    width: 100px;   height: 100px;
    background-color: aqua;
    float: left;
}
#c{
    width: 200px;   height: 200px;
    background-color: blue;
}

 

 clear

float 요소 이후에 표시되는 요소가 float을 해제하여

float 요소의 아래로 내려갈때 사용

속성값 의미
none 기본값, 아래로 이동되지 않음
left float이 left인 요소의 아래로 내려감
right float이 right인 요소의 아래로 내려감
both float이 left및 right인 요소의 아래로 내려감

 

<div id="a"></div>
<div id="b"></div>
<div id="c"></div>





#a{
    width: 200px;     height: 50px;
    background-color: orange;
    float:right;
}
#b{
    width: 100px;   height: 100px;
    background-color: aqua;
    float: left;
}
#c{
    width: 200px;   height: 200px;
    background-color: blue;
    clear: right;
}

 

 

 position

 

 position

문서상의 요소를 배치하는 방법을 정의

position이 요소의 배치방법을 결정하면

top, bottom, right, left가 최종 위치를 결정

-> 위치 지정은 필요에 따라 선택적으로 사용

 

 position 속성값

속성값 의미
static(정적) 기본값, 요소를 일반적인 문서 흐름에 따라 배치
relative(상대적) 일반적 문서 흐름에 따라 배치, 상하좌우 위치 값에 따라 오프셋 적용
absolute(절대적) 일반적 문서 흐름에서 제거
가장 가까운 position 지정 요소에 대해 상대적으로 오프셋 적용
fixed(결정된) 일반적 문서 흐림에서 제거, 지정한 위치에 고정된다.
sticky 일반적인 문서 흐름에서 제거, 스크롤 동작이 존재하는 가장 가까운 요소에 오프셋 적용

 

 relative : (상대적)

문서의 흐름에 따라 배치하되, 위치값에 따라 위치를 이동시켜서 배치하는 것

상대적인 위치를 뜻함

<div id="a1"></div>
<div id="a2"></div>



#a1{
    width: 200px;   height: 200px;
    background-color: aquamarine;
    position: relative;
    top: 100px;
}
#a2{

    background-color: sandybrown;
    width: 300px; height: 200px;
}

 

 

 

 absolute (절대적)

일반적인 무서흐름에 제거 상위 요소중 가장 가까운

position 지정 요소에 대해 상대적으로 오프셋지정

position 지정요소 : position속성에 속성값이 정의 되어 있는 요소

<div id="a1">1번</div>
<div id="a2">2번</div>



#a1{
    width: 100px;   height: 100px;
    background-color: aquamarine;
    position: absolute;
    top: 50px;
}
#a2{
    width: 200px; height: 200px;
    background-color: sandybrown;
}

 

 

- 부모의 position 속성이 없으면 브라우저 화면을 기준으로 따로 들어감

- 흐름에서도 벗어나서 개별적으로 들어감

<div id="z1">
    <div id="a1" class="a">1번</div>
    <div id="a2" class="a">2번</div>
</div>
<div id="z2">
    <div id="a3" class="a">3번</div>
    <div id="a4" class="a">4번</div>
</div>



body{
    background-color: sandybrown;
}
#z1, #z2{
    width: 300px;   height: 300px;
    border: 1px solid #000;
    background: yellowgreen;
    margin-left: 100px;
}
#z2{
    position: relative;
}
.a{
    width: 100px;   height: 100px;
    border: 1px solid #000;
    background: khaki;
}
#a1{
    position: absolute;
    left: 150px;    top: 0px;
    /* Z1번은  position속성이 없어서 상위로 들어감 따로 들어감*/
}
#a3{
    position: absolute;
    left: 150px;
}

 

 

 

 fixed(결정된)

absolute처럼 일반적인 문서 흐름에서 제거, 지정된 위치 고정

absolute는 상위의 position지정 요소를 찾지만 fixed는 고정

<div id="z">
    <div id="a1" class="a">1번</div>
    <div id="a2" class="a">2번</div>
    <div id="a3" class="a">3번</div>
</div>



#z{
    background-color: yellowgreen;
    margin-left: 100px;
    width: 300px;   height: 300px;
    position: relative;
}
.a{
    background-color: yellow;
    width: 100px;   height: 100px;
}
#a1{
   position: absolute;
   top: 50px;   left: 50px;   
}
#a2{
    position: fixed;
    top: 0px; left: 0px;
}

 

 

 

 sticky

일반적인 문서흐름에 따라 배치하고 스크롤되는 가장 가까운 상위에 오프셋적용

스크롤 이동으로 요소가 움직여도 고정상태 유지

<div id="a1" class="a">1번</div>
<div id="a2" class="a">2번</div>
<div id="a3" class="a">3번</div>



#a1,#a3{
    background-color: yellow;
    width: 200px;   height: 1000px;
}
#a2{
    background-color: red;
    width: 100px;   height: 100px;
    position: sticky;
    top: 0px;
}

 

 

 

 flexbox

 

 flexbox란

박스내 요소간의 공간 배분과 정렬 기능을 제공하기 위한 1차원 레이아웃 모델

레이아웃을 다룰때 한번에 하나의 차원(행이나 열)만을 다룸

<div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
</div>
    
    
    
.item{
    width: 50px; height: 50px;
    background-color: yellowgreen;
    border: 1px solid #000;
}
.container{
    display: flex;
}

 

 

 

 주축과 교차축

- 주축 : 1차원 레이아웃으로 요소의 진행방향을 지정하는 방향

- 교차축 : 주축의 엇갈리는 방향을 의미

- 주축은 기본적으로 가로방향임

- 사용자는 목적에 따라 방향을 변경할 수 있음

 

 flex-direction

flex 내 요소를 배치할 때 사용할 주축 및 방향을 지정(정방향, 역방향)

속성값  
row 기본값, 주축은 행으로 가로 콘텐츠 방향과 동일 
row-reverse 주축은 행으로 가로 콘텐츠 방향과 반대
column 주축은 열으로 세로 콘텐츠 방향과 동일 
column-reverse 주축은 열으로 세로 콘텐츠 방향과 반대
<div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
</div>


.item{
    width: 50px; height: 50px;
    background-color: yellowgreen;
    border: 1px solid #000;
}
.container{
    width: 200px; height: 200px;
    background-color: yellow;
    display: flex;
    flex-direction: row-reverse;
}

 

 flexbox 다루기

속성 내용
justify-content 주축 배치방법
flex-start(시작부분에 정렬), flex-end(끝부분정렬), center(가운데 정렬),
space-between(시작 마지막 맞추고 사이간격 동일),
space-around(중심으로 동일 여백, 좌우는 공간의 절반)
space-evenly(모든 아이템사이 컨테이너의 시작과 끝에 동일 간격)
align-item 교차축 배치방법
stretch(기본), flex-start(시작부분 정렬),
flex-end(끝부분 정렬), center(가운데 정렬),
baseline(기준선 정렬, 텍스트의 바닥선일치)
align-self 교차축 개별요소 배치 방법 item에 직접 설정
stretch(기본), flex-start(시작부분 정렬),
flex-end(끝부분 정렬), center(가운데 정렬),
baseline(기준선 정렬, 텍스트의 바닥선일치)
flex-wrap 한줄에 들어가지 않을 경우 줄 바꿈 여부
nowrap(기본값 크기를 줄여서라도 컨테이너 넣기), 
wrap(새로운 줄로 배치), wrap-reverse(반대방향으로 래핑)

 

 

 기타 선택자

 

 특성선택자

주어진 속성의 존재 여부나 그 값에 따라 요소를 선택한다.

 

- class 속성을 가지고 있는 요소 선택

[class]{
	background-color: red;
}

 

- class가 "x"인 요소 선택

[class = "x"]{
	background-color: red;
}

 

- class가 "x"로 시작하는 요소 선택

[class ^= "x"]{
	background-color: red;
}

 

- class가 "x"를 포함하는 요소 선택

[class *= "x"]{
	background-color: red;
}

 

- class가 "x"로 끝나는 요소 선택

[class $= "x"]{
	background-color: red;
}

 

 결합선택자 / 자손결합자

- 두개 이상의 선택자를 결합시켜 결합된 조건을 만족하는 요소를 선택

- 자손 결합자 두개의 선택자 중 첫 번째 선택자 요소의 자손을 선택할수 있다.

- div p : div 요소 안에 위치하는 모든 p 요소를 선택

- div>p : div 요소의 바로 아래에 위치하는 모든 p요소를 선택하기

div p {
	color:red;
}

div > p {
	color:red;
}

 

- 자손결합자 실습

body .a 로 클래스 명이 바로 아래의 a클래스(1번) 및 내부에 있는 (5번) 먼저 red를 실행

body>.a 로 바로 아래 (1번)이 blue 실행 1번 red에서 blue로 변경 

body .a 가 밑에 있었으면 선택자 우선순위에 우위에 있어 모두 red임

 

<h1>결합선택자</h1>
<p class="a">1번</p>
<p>2번</p>
<div>
    <p class="b">3번</p>
    <p>4번</p>
    <p class="a">5번</p>
    <p>6번</p>
</div>
   
   
   


p{
    margin: 0px 0px;
}
body .a{
    background-color: red;
}

body>.a{
    background-color: blue;
}

 

 

 

 결합선택자 / 형제 결합자

- 두개의 선택자 중 첫 번째 선택자 요소의 형제를 선택할 수 있다.

- 형제 : 상위, 하위 태그도 아닌 동일 선상에 있는 태그

- h1 ~ p : h1 요소의 뒤에 오는 형제 중 모든 p 요소를 선택하기

- h1 + p : h1 요소의 바로 뒤에 오는 형제 p요소를 선택하기

h1 ~ p {
    color: red;
}
h1 + p{
    color: blue;
}

 

- 형제선택자 실습

.b~p : b클래스 형제인 p태그 (4,5,6) red로 배경

.a+p : a클래스 바로 뒤의 형제인 p태그 (2,6) blue로 배경  6번 red-blue 변경

<h1>결합선택자</h1>
<p class="a">1번</p>
<p>2번</p>
<div>
    <p class="b">3번</p>
    <p>4번</p>
    <p class="a">5번</p>
    <p>6번</p>
</div>



p{
    margin: 0px 0px;
}

.b~p{
    background-color: red;
}

.a+p{
    background-color: blue;
}

 

 

 의사 클래스 (가상 클래스)

 

 의사 클래스

- 선택자에 추가하는 키워드로 요소는 고정되어 있지 않는다.

어떤 특정한 상태가 되었을 때 (사용자와의 상호작용 시점마다) 스타일을 다양하게 적용해주는 것

선택자:의사클래스{
	속성명: 속성값;
}

 

의사 클래스 의 미
hover 마우스 포인터가 요소 위로 올라올때
active 사용자가 요소를 활성화 ( 마우스 클릭등)
focus 요소가 포커스를 받고 있다.
disabled 비활성 상태의 요소
nth-child() 형제사이에서의 순서에 따라

 

 hover

- 마우스 커서가 올라오면 변경하겠다.

<div class="main">
    <div class="contents">

    </div>
</div>


.main{
    width: 300px; height: 300px;
    background-color: aquamarine;
}
.contents{
    width: 100px; height: 100px;
    background-color: blue;
}
.contents:hover{
    background-color: red;
}

 

 

 active

- 요소를 선택하면 변경된다.

<div class="main">
    <div class="contents">
        버튼 
    </div>
</div>


.main{
    width: 300px; height: 300px;
    background-color: aquamarine;
}
.contents{
    width: 100px; height: 30px;
    background-color: blue;
    border-radius: 10px;
    line-height: 30px;
    text-align: center;
    color: black;
}

/* .contents:hover{
   background-color: blueviolet;
   color: red;
    
} */
.contents:active{
    background-color: rosybrown;
    color: white;
}

 

 

 focus

- focus가 가르키고 있으면 실행

<div class="main">
    <input class="contents1" type="text">
    <input class="contents2" type="text">
</div>

.main{
    width: 300px; height: 300px;
    background-color: aquamarine;
}
.contents1:focus{
    background-color: red;
}
.contents2:focus{
    background-color: blue;
}

 

 

 nth-child()

- 형제 사이에서의 요소를 선택

body{
    display: flex;
    justify-content: space-between;
}
.box{
    width: 100px; height: 100px;
    background-color: red;
}
.box:nth-child(3){
    background-color: blue;
}

 

- nth-child(2n) : n에 0부터 들어오는데 그것에 맞게  0 2,4,

.box:nth-child(2n){
    background-color: blue;
}

 

- nth-child(n+3) : 3번부터 시작

.box:nth-child(n+3){
    background-color: blue;
}

 

 

 

 의사요소

 

 의사요소(pseudo-elements)

- 선택자에 추가하는 키워드로 요소의 특정 부분에 대한 스타일을 정의 할 수 있다.

선택자::의사요소{
	속성명:속성값;
}

 

 

 first-line (첫번째 줄만), first-letter (첫번째 글자)

<p>
    의사요소 처음 부분
    의사요소 처음 부분
    의사요소 처음 부분
    의사요소 처음 부분
    의사요소 처음 부분
    의사요소 처음 부분
</p>




p::first-line{/* 첫줄 */
    color: red;
    background-color: blueviolet;
}
p::first-letter{ /* 첫글자 */
    background-color: yellow;
    font-size: 20px;
    font-weight: 900;
}

 

 marker : 블릿 (기호) 가 있는 부분을 표시한다.

<ul>
    <li>강아지</li>
    <li>고양이</li>
    <li>호랑이</li>
    <li>타조</li>
</ul>

li::marker{
    color: red;
}

 

 

 before(요소의 앞), after(요소의 뒤)

<p>기본요소</p>

p::before{
    content: "앞";
    background: aqua;
}

p::after{
    content: "글자";
    color: red;
    background: violet;
}

 

 

 

 상속

 

 상속(Inheritance) : 하위요소가 상위요소의 스타일 속성값을 물려 받는 것

상위요소로 부터 상속이 이루어지는 속성이 있는 반면 그렇지 않는 속성도 있다.

상속 되는 속성 상속 되지 않은 속성
line-height, font-family, font-size, font-weight, text-align,
cursor, color
background-color, background-repeat, border, display, 

 상속관련 링크

 

- 실습

color 속성과 font-size 속성은 상위 요소에 작성해도 하위 요소가 상속상속되지 않는 속성들은 적용안됨상속되지 않는 속성들은 자기 자신에서 완성 시킬수 있고상속되는 속성들도 자기 자신에서 작성해도 문제 없음상속은 우선순위에서도 낮은 순위임

<div>
    <p>p태그</p>
</div>


div{
    width: 300px;   height: 300px; /* 상속 안됨 */
    color: red; /* 상속 */
    font-size: 30px; /* 상속 */
    border: 1px solid #000; /* 상속 안됨 */
}

 

 상속과 관련된 공용된 키워드

- 모든 CSS속성에 사용가능한 키워드

키워드 의미
inherit 상위 요소로부터 해당 속성의 값을 받아 사용
initial 브라우저에 지정된 기본 속성을 적용
unset 상속값을 초기화 시킨다

- unset 사용이유 : 대규모 웹 사이트나 애플리케이션에서 CSS복잡성을 관리

예상치 못한 스타일 상속을 방지, 유지보수를 용이 하게 한다.

<div id="a">
    <p>p태그</p>
</div>

div{
    width: 300px;   height: 300px;
    color: red; 
    font-size: 30px;
    border: 1px solid #000;
}
p{
    color: initial;
    border: inherit;
    font-size: unset;
}

 

 

 

 z-index

 

 z-index : 요소의 쌓임 순서를 정의할 수 있다.

Z축값을 정리 할수 있다.

<div class="a1"></div>
<div class="a2"></div>
<div class="a3"></div>
<div class="a4"></div>

div{
    width: 100px; height: 100px;
    position: relative;
    border: 1px solid #000;
}
.a1{
    background-color: red;
}
.a2{
    background-color: blue;
    bottom: 50px;
}
.a3{
    background-color: blueviolet;
    bottom: 100px;
}
.a4{
    background-color: brown;
    bottom: 150px;
}

 

- z-index 사용

겹쳐져 있는 순서가 사라진다.

position이 있는 상태에서 정의된다.

z-index의 값이 높을 수록 위로 올라가고 순서값을 -, 100 이런식으로 작성해도 문제 없음

div{
    width: 100px; height: 100px;
    position: relative;
    border: 1px solid #000;
}
.a1{
    background-color: red;
    z-index: 4;
    /* 가장 위로 */
}
.a2{
    background-color: blue;
    bottom: 50px;
    z-index: 3;
}
.a3{
    background-color: blueviolet;
    bottom: 100px;
    z-index: 2;
}
.a4{
    background-color: brown;
    bottom: 150px;
    z-index: 1;
    /* 가장 밑으로 */
}

 

 

 

'UIUX > 내용' 카테고리의 다른 글

grid  (1) 2024.04.08
CSS 기본 사용형태  (0) 2024.04.08
텍스트 스타일  (0) 2024.04.08
EMMET 약어 예제  (0) 2024.04.03
HTML 기초  (0) 2024.03.29