본문 바로가기
카테고리 없음

flex로 깨달아버린 css layout

by NEMNE 2021. 8. 29.

 

웹 개발 공부를 시작하고 항상 두려움에 떨어던 css를 이번 부스트캠프 멤버십 기간동안 지겹도록 하면서 깨달음을 얻은 지식을 바탕으로 작성하게 되었습니다.


"뭔가 위 아래가 틀린데..?"
"크기가 달라지면 깨지네..?"
"이건 왜 이래?"

 

그동안 CSS를 하면서 이런 고민을 자주 했었다. 그렇다면 이 문제를 어떻게 해결할 수 있을까?

 

예시를 보면서 해결해보자

현재 나는 다음 그림처럼 CSS를 꾸미고 싶어 했다.

그래서 일단 기초적인 코드를 작성한다.

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf8'>
        <title>css 뿌셔보자 </title>
        <link rel='stylesheet' type='text/css' href='index.css'/>
    <head>
    <body>
        <header>
            <div class='logo'>
                이건 로고야
            </div>

            <div class='member_info_box'>
                <span class='info_img'> 이건 회원 정보 위에 있는 이미지야 </span>
                <span class='info'> 이건 회원 정보고 </span>
            </div>
        </header>
    <body>
</html>


그러나 위 html 파일을 켜보면 아직 CSS가 구현이 안되어

이런식으로 동작한다...

그럼 어떻게 설계대로 구현 할 수 있을까?

1. display: inline-block과 margin이용

inline-block과 margin을 이용하면 얼추 구현할 수 있을 것 같다.

header {
    width: 100%;
    border: 1px solid black;
}

.logo {
    display: inline-block;
}

.member_info_box {
    margin-left: 79%;
    display: inline-block;
}

.info_img,
.info {
    display: block;
}

이렇게 만들면 얼추 만든 거 같다. 그러나 이상하게 거슬리는 부분이 몇가지 있다.

  1. 로고와 회원정보의 배치가 다르다.
  2. 화면의 끄기를 변경하면 깨진다.
  3. 이미 margin 속성을 사용했기 때문에 다른 요소를 넣기 번거롭다.

2. float : right 이용

header {
    width: 100%;
    height: 75px;
    border: 1px solid black;
}

.logo {
    float: left;
}

.member_info_box {
    margin-left: 71%;
    float: right;
}

.info_img,
.info {
    display: block;
}

 

1번보다는 float를 사용해서 깔끔하지만 여전히 아쉬운 점이 있다.

 

  1. 헤더의 높이를 설정해야한다.
  2. float속성으로 인해 기존 요소들보다 z 축으로 떠있게 된다는 점이 아쉽다.
  3. 여전히 logo와 member_info_box의 높이가 안맞는다.

 

 

(뭔가 아쉬워...)

 

3. flex 속성 이용

그렇다 답은 flex이다. 

 

header {

display: flex;

align-items: center; // 요소들의 높이를 중앙으로 맞춘다.

justify-content: space-between;	// 양끝부터 배치

width: 100%;

border: 1px solid black;

}



.info_img,

.info {

display: block;

}

flex와 관련된 align-items와 justify-content 속성을 사용하니 이전 코드들 보다 훨씬 간결해졌다!

 

물론 다른 1,2번 코드들도 추가적인 코드를 작성하면 충분히 설계대로 작성할 수 있다. 다만 이번 주제처럼 flex를 사용하면 훨씬 더 간결하고 효과적으로 css를 layout을 할 수 있을 것이다.