해결된 질문
작성
·
493
·
수정됨
0
싸이월드 만들기 1탄 과제 만들기 코드를
제가 한 과제와 비교하면서 공부하고 있습니다.
저하고 다른 부분이 있어서 그 이유가 궁금합니다.
<div class="left__body__footer">
<div class="wrapper__feel">
<div class="feel__title">오늘의 기분</div>
<select class="feel__select">
<option>기쁨 😊</option>
<option>슬픔 😭</option>
<option>화남 😠</option>
<option>분노 😡</option>
</select>
</div>
</div>
html은 과제 class 이름 참고하면서 만들어서 똑같습니다.
.wrapper__feel { <--------- 과제 예시 코드
display: flex;
flex-direction: column;
justify-content: center;
width: 100%;
}
위의 코드가 과제 예시 코드입니다.
아래 코드가 제가 한 코드입니다.
.feel__select { <------ 제가 한 코드
width: 100%;
}
저는 div
태그가 블록레벨 태그라서 <div class="feel__title">
오늘의 기분</div>
안에 있는 '오늘의 기분'은 왼쪽으로 정렬되기 때문에 그대로 두고
위의 코드 예시처럼 select
박스만 크기 조절하여 해결했습니다.
저는 과제 내용의 셀렉트 박스의 width를 select 박스 자체에 100%로 주었고
과제 예시 코드는 자식요소의 div와 select가 포함된 <div class="wrapper__feel">
div를 정렬한 뒤 width 100%를 주었더라구요.
그런데 아래의 코드처럼 flex 정렬부분을 주석처리하니깐 width
속성이 안 먹더라구요.
그 이유가 궁금합니다.
.wrapper__feel {
/* display: flex;
flex-direction: column;
justify-content: center; */
width: 100%;
}
+++ 제가 한 코드를 지우고 과제 예시 코드 중 width: 100%; 부분을 지워도
과제 예시 코드와 결과와 같습니다.
flex 정렬이 되면 footer의 width 100% 속성이 상속되는 건가요?
.wrapper__feel {
display: flex;
flex-direction: column;
justify-content: center;
/* width: 100%; */ <---- 과제 예시 코드의
이 부분을 지워도 결과가 같습니다.
}
제가 한 코드를 지우고 이렇게만 해도 같은 결과가 나옵니다. 차이를 알고 싶습니다.
.feel__select { <- 제가 한 이 코드를 지우고 위의 코드 정렬부분만 실행해도 결과가 같음.
width: 100%;
}
답변 1
0
안녕하세요 hyun 님!
CSS는 부모의 속성이 자식에게 상속이 되는 특징이 있습니다.
따라서 최상단 부모가 width값을 가지고 있고, 자식에게는 따로 width를 지정하지 않아줬다면 자식은 부모의 속성을 따라가게 됩니다.
display:flex
를 주게되면, 자식 요소들은 flex의 item으로 인식하게 됩니다.
flex는 direction에 따라 제어하는 부분이 달라지게 됩니다.
direction:row 를 주게 되면 제어하는 파트가 width 값이 되고, direction:colum을 주게 되면 제어하는 파트가 height가 됩니다.
따라서 flex의 컨테이너 부분에 아무리 width:100%를 주면 container의 크기만 100%가 되고, item의 width 값은 내용물의 크기만큼만 넓이를 가지고 가게 됩니다.
따라서 아이템의 width를 바꾸고 싶다면, item하나하나에 직접 width 값을 주어야 합니다.(flex의 제어 속성이 상속되니까요!)
하지만 display:flex
부분에 주석을 걸면, 해당 div는 태그 본래 속성인 display:block
으로 속성을 적용받게 됩니다.
그럼 내부 자식요소들은 flex와 다르게 item이 아닌 각각의 자식요소로 인식하게 됩니다.
따라서 select는 태그 고유의 속성 display:inline-block 이 적용되게 되고, inline-block은 본인의 내용물 넓이에 따른 width값 만큼만 넓이를 가져갑니다.
자식태그인 select태그 자체에 고유 width 값이 지정되어 있기 때문에 해당 부분에 주석을 걸게 되면 width 값이 상속되지 않습니다.
상속값이 어떻게 적용되고 있는지 개발자 도구의 elements 탭을 이용해서 한번 알아보시면 조금 더 도움이 될 수 있을 것 같습니다.
답변 감사합니다~