프론트엔드 공부/CSS 기초

11일차 프론트엔드 공부 - Float, Flex

프망생222 2024. 9. 9. 19:50

- 11일차 프론트엔드 공부 -

 

레이아웃

CSS 레이아웃이란 CSS를 이용해서 단순한 문서 형태의 HTML을 보기 좋게 배치하고 재배열 하는 것. 관련 기능,완성된 배열 등을 포괄적으로 지칭한다.

 

선택자

 

전체 선택자

*{ 

property : property value 

}

 

그룹 선택자  

.class1, .class2 {

property : property value 

}

 

가상 클래스 선택자

실제로 html 요소를 수정하지 않고, css만으로 가상 요소를 추가해 선택할 수 있다.

선택자:가상 클래스 {

property : property value
}



:first-child

:class:first-child {

property : property value
}

 

:last-child

:class:last-child {

property : property value
}

 

:nth-child(n)

:class:nth-child(n) {

property : property value
}

 

:hover  - 마우스가 올라가면 나오게 하는 효과

:class:hover {

property : property value
}

 

Float 와  Flex 레이아웃

 

CSS 레이아웃의 흐름

Float -> Flex -> Grid

 

Float : 이제는 거의 사용하지 않음

Flex, Grid : 상황에 따라 혼용

 

Float가 쓰이지 않은 이유

반응형 웹이 적합하지 않기 때문

반응형 웹이란?

모바일, 테블릿, PC 등 접속하는 기기의 너비에 맞추어 레이아웃이 변하는 웹페이지

 

float

HTML 요소를 일반적인 흐름(normal flow)으로부터 벗어나서 특정한 컨테이너의 좌측 혹은 우측을 감싸는 형태로 강제 배치할 수 있도록 도와주는 속성입니다.

float: none (기본값)

float: left

float: right

 

clear

float가 적용된 요소에 추가로 줄 수 있는 속성으로, float의 영향력을 해당 요소에 한해 해제합니다.

clear: none (기본값)

clear: left

clear: right

clear: both

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="float_box">
        안녕!<br>
        나는 박스입니다.
    </div>
    <p>
        Lorem ipsum dolor sit amet, consectetur 
        adipiscing elit. Mauris risus sapien, 
        facilisis vitae feugiat ut, semper at ligula. 
        Vivamus cursus lectus tincidunt tellus tincidunt 
        pharetra. Donec pharetra dictum malesuada. Fusce 
        non sapien egestas, maximus urna vel, pulvinar 
        magna. Aenean ut dapibus lacus, in blandit ligula. 
        Vestibulum sit amet efficitur tortor. Phasellus id 
        viverra felis. Mauris magna est, luctus sit amet 
        neque et, sagittis ultrices elit. Morbi odio eros, 
        finibus non justo eget, sollicitudin dapibus ante. 
        Nunc maximus eu nunc et finibus. Vivamus viverra 
        feugiat pretium. Sed at tempus enim, et dignissim 
        ante. Mauris vel nisi leo. Nullam vel nibh suscipit, 
        lobortis ex eu, mollis nunc. Fusce in eros blandit, 
        vehicula libero et, euismod enim.
    </p>
</body>
</html>
.float_box {
    width: 200px;
    height: 200px;
    background-color: blue;
    color: white;
    padding: 30px;
    box-sizing: border-box;
    float: right;
}

p {
    font-size: 20px;
    clear: right;
}

 

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="float_box">
        안녕!<br>
        나는 박스입니다.
    </div>
    <p>
        Lorem ipsum dolor sit amet, consectetur 
        adipiscing elit. Mauris risus sapien, 
        facilisis vitae feugiat ut, semper at ligula. 
        Vivamus cursus lectus tincidunt tellus tincidunt 
        pharetra. Donec pharetra dictum malesuada. Fusce 
        non sapien egestas, maximus urna vel, pulvinar 
        magna. Aenean ut dapibus lacus, in blandit ligula. 
        Vestibulum sit amet efficitur tortor. Phasellus id 
        viverra felis. Mauris magna est, luctus sit amet 
        neque et, sagittis ultrices elit. Morbi odio eros, 
        finibus non justo eget, sollicitudin dapibus ante. 
        Nunc maximus eu nunc et finibus. Vivamus viverra 
        feugiat pretium. Sed at tempus enim, et dignissim 
        ante. Mauris vel nisi leo. Nullam vel nibh suscipit, 
        lobortis ex eu, mollis nunc. Fusce in eros blandit, 
        vehicula libero et, euismod enim.
    </p>
</body>
</html>

 

.box1 {
    height: 400px;
    background-color: red;
    float: left;
}

.box2 {
    height: 200px;
    background-color: blue;
    float: right;
}

.box {
    width: 300px;
    padding: 20px;
    box-sizing: border-box;
}

/* .box3 {
    clear: both;
} */

.clearfix {
    clear: both;
}

 

 

 

flex

요소의 속성을  flex로 변경

display : flex

부모요소를 Flex container , 자식요소를 Flex item 이라 한다

 

flex-direction

row (행) : 중심축을 가로 방향으로 배치 (기본값)

colum (열) : 중심축을 세로 방향으로 배치

 

justify-content : 중심축 방향 정렬

 

(row 기준으로)

 

justify-content : flex-start (기본값)

justify-content : flex-start

justify-content : flex-end

justify-content : flex-end

 

justify-content : center

justify-content : center

 

justify-content : space-between

justify-content : space-between

justify-content : space-around

justify-content : space-around

justify-content : space-evenly

justify-content : space-evenly

align-item : 중심축 반대 방향 정렬

 

align-item : streth (기본값)

align-item : streth


align-item : flex-start

align-item : flex-start

align-item : flex-end

align-item : flex-end

align-item : center

align-item : center

 

주의1

align-item은 flex-item이 한줄일 때만 우선 적용

두 줄 이상일 때에는 align-conten라는 속성을 사용해야 한다.

 

주의2

flex-direction이 바뀌면 중심축의 방향이 바뀐다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="flex_container">
        <div>Item 1</div>
        <div>Item 2 <br>테스트 문구<br>박스 사이즈를 키워봅시다.</div>
        <div>Item 3</div>
        <div>Item 4<br>중간 사이즈 박스</div>
        <div>Item 5</div>
    </div>
</body>
</html>

 

* {
    box-sizing: border-box;
}

.flex_container {
    height: 300px;
    background-color: aqua;
    padding: 15px;
    display: flex;
    flex-direction: row;
    justify-content: space-around;
    align-items: flex-end;
}

.flex_container div {
    background-color: white;
    border: 1px solid red;
}