티스토리 뷰

Skill/html js css

[CSS] 가로배치

진열사랑 2024. 3. 6. 14:45

출처  : https://velog.io/@sophia9901/CSS-%EA%B0%80%EB%A1%9C%EB%B0%B0%EC%B9%98-float

left: 요소가 컨테이너 왼쪽에 배치

<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>
block 속성을 가진 div 태그 사용

<style>
.parent{
    border: 5px solid red;
    width: 600px;
}
.child{
    background-color: gold;
    width: 200px;
    height: 200px;
}
</style>

부모선택자인 .parent에 높이값이 없으면 자식선택자 .child 높이값에 영향을 받음

여기서 float:left 를 주게되면?

<style>
.parent{
    border: 5px solid red;
    width: 600px;
}
.child{
    background-color: gold;
    width: 200px;
    height: 200px;
    float: left;
}
</style>

float 즉 둥둥 뜨다.
float:left 둥둥 떠서 왼쪽에 위치함
이때 자식 선택자 .child가 둥둥 떠있기 때문에 부모 선택자 .parent는 높이값을 잃음.

float: none 상태(default),
즉 float에 아무런 값을 주지 않았을 때와 float:left 값을 적용했을 때 노란 상자 위치는 변하지 않는다.
하지만 float 값이 없는 상태와 float 값을 적용한 상태는 분명한 차이가 있음
자식선택자가 float 값을 가지면 부모선택자는 높이값을 잃음

✏️부모선택자 높이값 찾아주기
height
<style>
.parent{
    border: 5px solid red;
    width: 600px;
    height: 200px;
}
.child{
    background-color: gold;
    width: 200px;
    height: 200px;
    float: left;
}
</style>

float으로 정렬 시 잃어버린 부모 높이값을 height로 찾아주면 높이를 다시 설정할 수 있다.
단점
자식선택자인 .child 높이값이 바뀌어도 부모선택자 높이값은 고정되어 사진과 같은 현상 발생.

overflow: hidden
<style>
.parent{
    border: 5px solid red;
    width: 600px;
    overflow: hidden;
}
.child{
    background-color: gold;
    width: 200px;
    height: 300px;
    float: left;
}
</style>


overflow:hidden 경우 자식선택자.child 높이값에 따라 부모선택자.parent 높이값을 찾아줄 수 있음

✏️float:right
right: 요소가 컨테이너 오른쪽 배치

<style>
.parent{
    border: 5px solid red;
    width: 600px;
    overflow: hidden;
}
.child{
    background-color: gold;
    width: 200px;
    height: 300px;
    float: right;
}
</style>


float:right 경우 자식선택자.child를 둥둥 띄워서 오른쪽 정렬할 수 있다

✏️margin:auto
margin: auto 요소를 중앙에 배치 (인라인, 인라인 블록은 적용 불가)

<style>
.parent{
    border: 5px solid red;
    width: 600px;
    overflow: hidden;
}
.child{
    background-color: gold;
    width: 200px;
    height: 300px;
    margin: auto;
}
</style>


margin:auto는 자식선택자.child를 중앙정렬한다.
주의
margin:auto는 속성값이 block일 경우에만 적용가능
자식선택자.child를 span태그로 바꿀 경우 margin:auto가 적용되지 않음.(inline-block 요소도 적용 불가)

✏️inline/ inline-block 중앙정렬
<style>
.parent{
    border: 5px solid red;
    width: 600px;
    overflow: hidden;
    text-align: center;
}
.child{
    background-color: gold;
    width: 200px;
    height: 300px;
    display: inline-block;
}
</style>


자식선택자.child를 inline-block 속성으로 바꿈
부모선택자.parent에 text-align: center 값을 주면 자신선택자.child가 중앙정렬된다.
inline 속성 경우도 동일
참고
반대로 자식이 block 속성일 경우 부모 요소에 text-align:center를 주면 적용 안됌.
🌱 float 상속 해제
✏️clear
float 속성이 적용되면 다음 요소가 float 속성을 상속 받는데 이걸 해제시킴.

clear:left ➪ 왼쪽으로 배치된 float 속성 상속을 해지
clear:right ➪ 오른쪽으로 배치된 float 속성 상속을 해지
clear:both ➪ 왼쪽 또는 오른쪽으로 배치된 모든 float 속성 상속을 해지
<body>
    <div class="parent">
        <div class="top">float: none</div>
        <div class="left">float: left</div>
        <div class="right">float: right</div>
        <div class="clear">clear: both</div>
    </div>
</body>
<style>
.parent{
    border: 5px solid red;
    width: 600px;
}
.top{
    background-color: purple;
    height: 50px;
}
.left{
    background-color: gray;
    height: 100px;
    width: 200px;
    float: left;
}
.right{
    background-color: orange;
    height: 100px;
    width: 400px;
    float: right;
}
.clear{
    background-color: purple;
    height: 50px;
    clear: both;
}
</style>
float 속성을 부여하기 전


float 속성을 부여하기 전, block 요소인 div가 수직 정렬된다.

float 속성을 부여하면


grey박스와 orange박스에 각각 float:left와 float:right값을 준 상태
공중에 떠서 왼쪽, 오른쪽으로 정렬된 상태.
가장 아래 div는 float 속성을 상속받아서 뒤에 숨겨진 상태.
상속된 float 속성을 해제하면(최종)


마지막 div 상자에 clear:both로 float 속성이 해제되어 grey상자와 orange상자 밑으로 확인 가능

🌱 가로정렬 2가지 방법
✏️float
float와 overflow 사용해 배치

<body>
    <section>
        <article>article</article>
        <article>article</article>
        <article>article</article>
    </section>
</body>
<style>
section{
    border: 5px solid black;
    width: 600px;
    overflow: hidden;
}
section article{
    background-color: gold;
    width: 200px;
    height: 100px;
    float: left;
}
</style>


단 float으로 가로배치할 경우 1px도 틀리면 안됌

article 상자에 1px border 값을 주면


각 article에 px 값이 추가되어 마지막 article이 밀려나는 현상 발생

해결하려면

<style>
section{
    border: 5px solid black;
    width: 600px;
    overflow: hidden;
}
section article{
    background-color: gold;
    width: 200px;
    height: 100px;
    float: left;
    border: 1px solid red;
    box-sizing: border-box;
}
</style>
box-sizing: border-box ➪ 테두리 기준으로 크기

box-sizing 영역을 content 영역 기준이 아닌 border-box 기준으로 속성값을 바꿔줌.

✏️display
display:inline-block 사용해 배치

<body>
    <section>
        <article>article</article>
        <article>article</article>
        <article>article</article>
    </section>
</body>
<style>
section{
    border: 5px solid black;
    text-align: center;
}
section article{
    background-color: gold;
    width: 200px;
    height: 100px;
    border: 1px solid red;
    display: inline-block;
}
</style>


dispaly:inline-block 으로 가로 정렬 가능.
중앙정렬은 부모태그에 text-align:center 값을 주면 가능.

✏️float/display 차이
어떤게 나아?
그런거 없음

위 사진을 보면 알 수 있듯 float으로 가로 정렬한 경우 각 article 사이에 빈틈이 없는 걸 볼 수 있음.
하지만 display:inline-block으로 가로 정렬한 경우 각 article 사이에 빈틈이 생기는 걸 볼 수 있음.

✏️float/display 차이 결론
조금 여유가 있어도 가로 배치만 된다면 dispaly: inline-block 사용
정확하게 값을 주는 걸 원하면 float 사용
🌷 결론
가로 정렬을 하는 방법 2가지
float랑 dispaly:inline-block

float는
정밀한 가로 정렬 가능
둥둥뜨는 속성이 아래로 상속되기 때문에 이를 해제하려면 clear 속성값을 줄 필요가 있다.
또한 둥둥뜨는 속성으로 인해 부모선택자가 높이값을 잃어버리기 때문에 이를 찾아주기 위해 overflow:hidden 사용
가로 중앙정렬은 margin:auto 사용

display:inline-block는
여유가 있지만 가로 정렬만 가능하면 된다
display:inline-block 중앙정렬은 부모선택자에게 text-align:center를 주면 됨

'Skill > html js css' 카테고리의 다른 글

jquery 선택자 not 두개이상  (0) 2024.03.13
Jquery select option 선택  (0) 2024.03.13
css word-break  (1) 2024.02.23
DataTable render 속성  (0) 2024.02.23
[js] 기능키 점검  (0) 2024.02.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함