https://d2.naver.com/helloworld/854017
flex-grow
- 아이템의 확대에 관련된 속성
- 0 또는 자연수
- 기본값 0
- 0 : 컨텐츠크기로 고정 (늘어나지 않음)
- 1 이상 : 컨테이너를 완전히 채우도록 늘어남
<div class="container">
<div class="item">아이템</div>
</div>
.container {
display: flex; height: 100px;
border: 3px solid #333;
}
.item{
flex-grow: 0;
margin: 5px;
background-color:skyblue;
}
.container {
display: flex; height: 100px;
border: 3px solid #333;
}
.item{
flex-grow: 1;
margin: 5px;
background-color:skyblue;
}
아래와 같이 아이템에 마우스를 올리면 바가 늘어나는 효과를 만들수 있다.
.container {
display: flex; height: 100px;
border: 3px solid #333;
}
.item{
flex-grow: 0;
margin: 5px;
background-color:skyblue;
transition: .5s;
}
.item:hover{
flex-grow: 1;
}
flex-shrink
- 아이템의 축소에 관련된 속성
- 0 또는 자연수
- 기본값 1
- 0 : 컨텐츠크기로 고정 (줄어들지 않음)
- 1 이상 : 컨테이너 크기에 맞게 줄어듦
<div class="container">
<div class="item">아이템</div>
</div>
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 50%;
}
.item{
flex-shrink: 0;
margin: 5px;
background-color:orange;
width: 1300px;
}
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 50%;
}
.item{
flex-shrink: 1;
margin: 5px;
background-color:orange;
width: 1300px;
}
flex-basis
- 아이템의 기본크기 지정
- width 에서 사용하는 모든 단위 가능(px, %, em, rem, vw, vh)
- 기본값 auto
- 0 : 컨테이너를 기준으로 아이템 크기가 결정됨
- auto: 아이템의 크기를 고려하여 크기가 결정됨
- 고정값 : 아이템 크기가 고정됨
<div class="container">
<div class="item">중간 아이템</div>
<div class="item">정말정말 긴 아이템</div>
<div class="item">짧음</div>
</div>
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 50%;
}
.item{
margin: 5px;
background-color:skyblue;
flex-basis: auto;
text-align: center; line-height: 100px;
}
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 50%;
}
.item{
margin: 5px;
background-color:skyblue;
flex-basis: 150px;
text-align: center; line-height: 100px;
}
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 50%;
}
.item{
margin: 5px;
background-color:skyblue;
flex-basis: 0px;
text-align: center; line-height: 100px;
}
flex:1 을 적용한 경우 flex-basis: 0 은 컨테이너 크기에 맞춰 균등분배한다.
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 50%;
}
.item{
margin: 5px;
background-color:skyblue;
flex: 1; flex-basis: 0;
text-align: center; line-height: 100px;
}
flex:1 을 적용한 경우 flex-basis: auto 은 아이템에 들어간 컨텐츠 길이에 따라 차등분배된다. 컨텐츠가 길면 공간을 더 많이 가져가고 컨텐츠가 짧으면 공간을 더 적게 가져간다.
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 50%;
}
.item{
margin: 5px;
background-color:skyblue;
flex: 1; flex-basis: auto;
text-align: center; line-height: 100px;
}
flex
- flex-grow flex-shrink flex-basis 를 한번에 설정
- 한개의 숫자만 설정하면 flex-grow 만 설정됨 (flex-shrink: 1 / flex-basis: 0)
- flex: 1 (1 1 0) flex:2 (2 1 0) flex:3 (3 1 0)
- flex:1 은 flex-grow:1 flex-shrink: 1이므로 컨테이너 크기에 따라 아이템이 늘어나거나 줄어듦
- 모든 아이템에 flex:1 을 설정하면 크기가 균등분배됨
<div class="container">
<div class="item">중간 아이템</div>
<div class="item">정말정말 긴 아이템</div>
<div class="item">짧음</div>
</div>
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 50%;
}
.item{
margin: 5px;
background-color:skyblue;
flex: 1;
text-align: center; line-height: 100px;
}
flex:1 은 flex-grow:1 이므로 컨테이너가 커지면 아이템의 너비는 늘어난다.
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 100%;
}
.item{
margin: 5px;
background-color:skyblue;
flex: 1;
text-align: center; line-height: 100px;
}
flex:1 은 flex-shrink:1 이므로 컨테이너가 줄어듦면 아이템의 너비는 함께 줄어든다.
.container {
display: flex; height: 100px;
border: 3px solid #333;
width: 20%;
}
.item{
margin: 5px;
background-color:skyblue;
flex: 1;
text-align: center; line-height: 100px;
}
flex: initial - 줄어들기만 함
컨테이너 크기가 줄어들면 아이템의 크기도 함께 줄어들지만, 컨테이너 크기가 커져도 늘어나지는 않는다. 디바이스 크기가 작아질때 반응형을 적용하려면 기본값을 사용하면 된다. flex: 0 1 auto 와 같은 의미다.
<div class="container">
<div class="item">아이템</div>
</div>
.container{
display: flex;
height: 100px;
border: 3px solid #333;
}
.container .item{
width: 500px;
margin: 5px;
background-color: #333;
}
브라우저 창을 줄여가면서 실험해보자!
max-width 와 유사하게 동작한다.
flex:none - 크기 고정
아이템의 크기가 컨테이너 크기에 따라 늘어나거나 줄어들지 않고 고정된 크기를 가진다. 크기가 고정되어야 하는 아이템은 flex:none 으로 설정하면 된다. flex: 0 0 auto와 같은 의미다.
<div class="container">
<div class="item">아이템</div>
</div>
.container{
display: flex;
height: 100px;
border: 3px solid #333;
}
.container .item{
width: 500px;
margin: 5px;
background-color: #333;
flex: none;
}
컨테이너의 크기가 줄어들어도 아이템의 크기는 고정된다. 브라우저 창을 줄이거나 늘리면서 실험해보자!
flex: auto / flex: 1 - 늘어나거나 줄어듦
컨테이너 크기에 맞춰 아이템이 늘어나거나 줄어든다. 디바이스가 커지거나 작아질때 반응형웹을 적용하려면 flex:auto 로 설정하면 된다. flex: 1 1 auto 와 같은 의미다.
<div class="container">
<div class="item">아이템</div>
</div>
.container{
display: flex;
height: 100px;
border: 3px solid #333;
}
.container .item{
width: 500px;
margin: 5px;
background-color: #333;
flex: auto;
}
컨테이너의 크기에 맞춰 아이템이 늘어나거나 줄어든다. 브라우저 창을 줄이거나 늘리면서 실험해보자!
flexbox 와 margin: auto 함께 사용하기 - 특정 아이템의 위치만 독립적으로 이동시킴
컨테이너에 display:flex 를 설정하고 아이템 margin 에 auto 를 적용하면 아이템의 위치를 독립적으로 제어할 수 있다.
<div class="container">
<div class="item">아이템</div>
</div>
아이템을 세로방향으로 가운데 위치시키려면 아래와 같이 margin: auto 0 를 설정하면 된다.
.container{
display: flex;
height: 500px;
border: 3px solid #333;
}
.container .item{
margin: 5px; height: 50px;
background-color: #333;
margin: auto 0;
}
컨테이너의 display: flex 설정을 비활성화하면 동작하지 않는다.
.container{
/* display: flex; */
height: 500px;
border: 3px solid #333;
}
.container .item{
margin: 5px; height: 50px;
background-color: #333;
margin: auto 0;
}
아이템을 가로방향으로 가운데 위치시키려면 아래와 같이 margin: 0 auto 를 설정하면 된다.
.container{
display: flex;
height: 500px;
border: 3px solid #333;
}
.container .item{
margin: 5px; height: 50px;
background-color: #333;
margin: 0 auto;
}
아이템을 컨테이너의 정중앙에 위치시키려면 margin: auto auto 를 설정하면 된다. 물론 컨테이너에 display: flex 가 적용된 경우에 한해서다.
.container{
display: flex;
height: 500px;
border: 3px solid #333;
}
.container .item{
margin: 5px; height: 50px;
background-color: #333;
margin: auto auto;
}
.container{
display: flex;
height: 500px;
border: 3px solid #333;
}
.container .item{
margin: 5px; height: 50px;
background-color: #333;
margin-top: auto;
}
컨테이너에 display:flex 를 적용하고 아이템에 margin-top: auto 를 지정하면 컨테이너 하단에 딱 붙어있다. 개발자 도구에서 컨테이너 높이를 변경하면서 실험해보자!
1. 스크롤이 없는 100% 레이아웃
<div class="container">
<header>헤더</header>
<div class="tab">탭</div>
<main>
<aside>사이드바</aside>
<section>메인컨텐츠</section>
</main>
</div>
*{
box-sizing: border-box;
}
html, body{
margin: 0; padding: 0;
}
.container {
display: flex; flex-direction: column;
width: 100%; height: 100vh;
border: 3px solid #333;
}
우선 컨테이너를 브라우저 창 사이즈에 맞게 설정하고, flex-direction 을 column 으로 지정하여 헤더, 탭, 메인 영역이 나란히 세로로 나열되도록 한다.
.container header, .container .tab{
border: 3px solid #333;
height: 70px; margin: .1rem;
}
.container main{
border: 3px solid #333;
}
헤더와 탭의 높이를 동일하게 고정값으로 설정한다.
flex:1 을 설정하면 메인 영역은 브라우저 높이(컨테이너)에 따라 높이가 늘어나거나 줄어든다. 브라우저 높이를 줄이거나 늘려보자!
.container main{
border: 3px solid #333;
flex: 1;
}
.container main{
border: 3px solid #333;
flex: 1;
display: flex;
}
.container main aside, .container main section{
border: 3px solid #333;
}
메인 영역 안에 위치한 사이드바와 메인 컨텐츠를 가로로 나열하기 위하여 main 에 display: flex 를 설정한다.
사이드바는 너비가 변하지 않도록 고정값(px)으로 설정한다. 메인컨텐츠에 flex:1 을 지정하면 브라우저 전체 너비에서 400px 을 제외한 나머지 공간을 채운다. 브라우저 너비가 변하면 메인컨텐츠 너비가 유동적으로 변한다. 브라우저에서 한번 실험해보자!
.container main aside{
width: 400px;
flex: none;
}
.container main section{
flex: 1;
overflow: auto;
}
flex: none 은 flex-grow: 0 flex-shrink: 0 flex-basis: auto 의 의미다. 즉, 사이드바가 컨테이너의 크기에 따라 늘어나거나 줄어들지 않고 고정된 크기를 가진다. 또한, 메인컨텐츠는 너비가 줄어들면 스크롤이 되도록 한다.
2. 네비게이션
<header>
<div class="logo">logo</div>
<div class="search">
<input type="text" placeholder="검색어를 입력하세요.">
<button>검색</button>
</div>
<div class="gnb">로그인</div>
</header>
우선 헤더 안에 있는 로고, 검색창, 로그인 버튼을 가로방향으로 나열하기 위하여 header 에 display: flex 를 적용한다.
html, body{
margin: 0; padding: 0;
box-sizing: border-box;
}
header{
display: flex;
height: 70px;
border: 3px solid #333;
}
로고, 검색창, 로그인 버튼에 flex:none 을 적용하여 크기를 고정한다.
.logo, .search, .gnb{
flex: none;
background-color: #eee;
}
로그인 버튼에 margin-left: auto 를 적용하여 해당 버튼만 우측에 위치시킨다. margin-left: auto 는 자신의 좌측에 위치한 모든 요소를 다 밀어내면서 자신은 우측에 위치한다. 다른 아이템들과 별개로 위치를 독립적으로 잡아야 할때 사용하면 된다. margin-left: auto 를 적용하면 컨테이너인 header에 justify-content: space-between 을 줘도 적용되지 않는다.
.gnb {
margin-left: auto;
}
로고와 로그인 버튼에 고정너비를 지정해주고 디자인한다.
.logo, .gnb{
width: 100px; height: 100%;
background-color: #333; color: #fff;
}
검색창 영역과 버튼에 고정너비를 지정해준다.
.search{
width: 500px;
}
.search button{
width: 100px;
}
검색 버튼을 디자인한다.
.search button{
width: 100px;
background-color: #333; color: #fff;
border: none;
}
검색영역에 display: flex 를 적용하고 사용자 입력창에 flex:1 을 지정해서 검색영역에서 검색버튼의 크기를 제외한 나머지 공간을 모두 차지할 수 있도록 한다. 즉, 입력창의 너비는 400px 이 된다.
.search{
width: 500px;
display: flex;
}
.search button{
width: 100px;
background-color: #333; color: #fff;
border: none;
}
.search input{
flex: 1;
}
3. 브라우저 하단에 붙어있는 푸터
<div class="container">
<footer>푸터</footer>
</div>
컨테이너 높이를 브라우저 창 높이에 맞춘다. 컨테이너에 display: flex 를 주고, 푸터에 flex:1 을 적용하면 컨테이너 크기에 맞게 늘어나고 줄어든다. 푸터에 margin-top: auto 를 지정하면 푸터가 브라우저 하단에 고정된다. 브라우저 높이를 변경하면서 실험해보자! 물론 컨테이너에 align-items: flex-end를 줘도 동일하게 동작하지만 이렇게 되면 컨테이너 안에 푸터 이외의 다른 요소들도 함께 브라우저 하단에 고정된다. 즉, 푸터만 따로 배치하려고 할때 margin-top: auto 를 사용하면 된다.
*{
box-sizing: border-box;
}
html, body{
margin: 0; padding: 0;
}
.container{
display: flex;
height: 100vh;
border: 3px solid #333;
}
.container footer{
flex: 1;
height: 70px; margin: 5px;
background-color: #333;
margin-top: auto;
color: #fff;
font-size: 2rem; text-align: center;
}
4. 정렬이 다른 메뉴
<header>
<div class="logo">로고</div>
<div class="search">검색창</div>
<div class="signup">로그인</div>
</header>
컨테이너 안에 위치한 아이템에 space-evenly 를 적용하면 중앙에서 균등한 여백을 두고 정렬된다.
*{
box-sizing: border-box;
}
header{
display: flex;
justify-content: space-evenly;
height: 70px;
border: 3px solid #333;
}
header *{
width: 100px; height: 100%;
background-color: #333; color: #fff;
}
5. 유동 너비 박스
https://codepen.io/witblog/pen/oPyvEa
컨테이너가 줄어들면서 아이템의 컨텐츠가 잘리면서 점(.)으로 표시되는 레이아웃을 만들어보자!
<div class="container">
<div class="text">나는 지난주에 뭐했는지 기억이 잘 나지 않는다.</div>
<div class="text">나는 지난</div>
<div class="text">나는 지난주에 뭐했는지</div>
<div class="text">나는 지난주에</div>
<button>버튼</button>
</div>
컨테이너에 display: flex 를 적용하여 글자를 수평으로 나열한다.
*{
box-sizing: border-box;
}
.container{
display: flex;
height: 70px;
border: 3px solid #333;
}
flex: 0 1 auto 이므로 컨테이너가 줄어들면 아이템의 너비도 함께 줄어든다. 아이템의 너비가 줄어들면 내부에 있는 글자가 밖으로 삐져나오는데 overflow: hidden 을 주고, white-space: nowrap 으로 적용하면 아이템이 줄어들때 글자는 여러줄이 아니라 한줄에 가로로 길게 늘여뜨려진다. 여기에서 text-overflow: ellipsis 를 적용하면 아이템의 너비가 텍스트 길이보다 작아질때 점(.)으로 표시된다. 그리고 아이템의 너비는 300px 로 제한한다.
.container .text{
flex: 0 1 auto;
max-width: 300px;
margin: 5px;
border: 3px solid #333;
overflow:hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
6. 위아래로 흐르는 목록
핀터리스트나 쇼핑몰 사이트처럼 위아래로 나열되는 목록을 만들어보자!
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
<div class="item">10</div>
</div>
10개의 아이템 목록을 만든다. 컨테이너에 flexbox 를 적용하고 아래로 나열되도록 flex-direction: column 을 지정한다. 컨테이너 높이를 브라우저 창 높이로 제한하고 flex-wrap: wrap 을 적용하면 위아래로 흐르는 목록을 구현할 수 있다. 마지막으로 수평방향과 수직방향에 대하여 균등한 여백을 주기 위하여 space-evenly 를 적용한다.
*{
box-sizing: border-box;
}
html,body{
margin: 0; padding: 0;
}
.container{
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: space-evenly;
align-content: space-evenly;
height: 100vh;
border: 3px solid #333;
}
.container .item{
width: 200px; height: 200px;
margin: 10px;
background-color: #333; color: #fff;
font-size: 5rem;
}
<div class="actions">
<img src="data:image/jpeg;base64,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" alt="profile-1">
<img src="data:image/jpeg;base64,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" alt="profile-2">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpwSuc5_00-b2FxK198sY73ArVySbThSLAXQ&usqp=CAU" alt="profile-3">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTQEZrATmgHOi5ls0YCCQBTkocia_atSw0X-Q&usqp=CAU" alt="profile-4">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRKDP-4Dg4s4b6YxTTriW24nV5Q0RL65zh7JA&usqp=CAU" alt="profile-5">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRhGE2phgRinbSsr8VJrLNwB954CTc8UZ1JhQ&usqp=CAU" alt="profile-6">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTkQUg_P0cc8EgSCk-SdT8Yvcm6E5SbdfuhzA&usqp=CAU" alt="profile-7">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRbMigoSI-w6bjLxl3qXVC3482EAbhYImiZXw&usqp=CAU" alt="profile-8">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQFacn0pb12vsSRTPKRUDnxFrP8sj7st13r8A&usqp=CAU" alt="profile-9">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRoZf-IXN17ph2s07rUcgVDwIpTxbOQh55noQ&usqp=CAU" alt="profile-10">
</div>
*{
box-sizing: border-box;
}
html,body{
margin: 0; padding: 0;
}
.actions{
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: space-evenly;
align-content: space-evenly;
height: 100vh;
border: 3px solid #333;
}
.actions img{
width: 200px; height: 200px;
margin: 10px;
background-color: #333; color: #fff;
font-size: 5rem;
}
이를 활용하면 아래와 같이 프로필 사진들을 위아래로 나열할 수 있다. 물론 제품사진 목록을 나열할 수도 있고, 의류목록도 나열할 수 있다.
*{
box-sizing: border-box;
}
html,body{
margin: 0; padding: 0;
}
.actions{
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: flex-start;
align-content: center;
height: 100vh;
border: 3px solid #333;
}
.actions img{
width: 200px; height: 200px;
margin: 10px;
background-color: #333; color: #fff;
font-size: 5rem;
border-radius: .5rem;
}
justify-content 와 align-items 설정을 수정하면 아래와 같이 된다.
참고로 columns 속성을 사용하면 플럭스박스보다 간단히 해결된다. columns 속성을 사용하는 예제는 아래에 링크를 걸어두었다.
https://syleemomo.tistory.com/52
7. 가로세로 비율을 유지하는 반응형 이미지 박스
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
컨테이너에서 아이템들의 너비가 일정비율로 유지되도록 하려면 flex-basis 를 적용하면 된다. 한줄에 3개의 아이템만 나열하려면 flex-wrap: wrap 과 flex-basis: 33.3% 을 설정하면 된다.
*{
box-sizing: border-box;
}
.container{
display: flex;
flex-wrap: wrap;
width: 50%; height: 800px; padding: 10px;
border: 3px solid #333;
}
.container .item{
flex-basis: 33.3%;
background-color: #333; color: #fff;
font-size: 3rem;
border: 2px solid yellow;
}
HTML 코드를 아래와 같이 수정한다.
<div class="container">
<div class="item">
<div class="img">이미지</div>
<button>버튼</button>
</div>
<div class="item">
<div class="img">이미지</div>
<button>버튼</button>
</div>
<div class="item">
<div class="img">이미지</div>
<button>버튼</button>
</div>
<div class="item">
<div class="img">이미지</div>
<button>버튼</button>
</div>
<div class="item">
<div class="img">이미지</div>
<button>버튼</button>
</div>
<div class="item">
<div class="img">이미지</div>
<button>버튼</button>
</div>
<div class="item">
<div class="img">이미지</div>
<button>버튼</button>
</div>
<div class="item">
<div class="img">이미지</div>
<button>버튼</button>
</div>
<div class="item">
<div class="img">이미지</div>
<button>버튼</button>
</div>
</div>
아이템에 다시 display: flex 와 flex-direction: column 을 설정해서 이미지와 버튼을 수직으로 나열한다. 버튼에 대한 스타일링을 해준다. 그리고 이미지에는 flex:auto 로 설정해서 컨테이너 사이즈에 따라 반응형이 되도록 한다.
*{
box-sizing: border-box;
}
.container{
display: flex;
flex-wrap: wrap;
width: 50%; height: 800px; padding: 10px;
border: 3px solid #333;
}
.container .item{
flex-basis: 33.3%;
background-color: #333; color: #fff;
font-size: 3rem;
border: 2px solid yellow;
display: flex;
flex-direction: column;
}
.container .item button{
margin-top: auto;
margin-bottom: .5rem; margin-left: .5rem; margin-right: .5rem;
height: 50px;
border: none;
background-color: orange;
cursor: pointer;
}
.container .item .img{
flex: auto; margin-bottom: 10px;
background-color:mediumspringgreen;
}
디바이스 크기가 줄어들때 한줄에 이미지가 2개, 1개만 보이도록 아래와 같이 반응형웹으로 flex-basis를 조절한다.
@media (max-width: 900px){
.container .item{
flex-basis: 50%;
}
}
@media (max-width: 700px){
.container .item{
flex-basis: 100%;
}
}
8. 반응형 페이지네이션 버튼
<div class="actions">
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
<button>5</button>
</div>
버튼을 감싸고 있는 컨테이너에 display: flex 를 적용한다.
.actions{
display: flex;
width: 500px; height: 30px;
border: 3px solid #333;
}
버튼에 flex: auto 를 설정하면 컨테이너 크기에 따라 버튼의 너비가 변한다. 지금은 고정값이지만 개발자도구에서 컨테이너의 너비값을 변경하면 버튼의 너비도 함께 변한다. flex: auto 는 flex: 1과 동일한 의미로 컨테이너 크기에 따라 내부 아이템이 늘어나거나 줄어든다.
.actions button{
flex: auto;
}
버튼에 마우스를 올렸을때 버튼의 너비를 키우려면 flex 값을 1보다 크게 설정하면 된다.
.actions{
display: flex;
width: 500px; height: 30px;
border: 3px solid #333;
}
.actions button{
flex: auto;
transition: .5s;
}
.actions button:hover{
flex: 3;
}
이렇게 하면 반응형 페이지 버튼을 만들수 있다.
<div class="actions">
<img src="data:image/jpeg;base64,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" alt="profile-1">
<img src="data:image/jpeg;base64,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" alt="profile-2">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpwSuc5_00-b2FxK198sY73ArVySbThSLAXQ&usqp=CAU" alt="profile-3">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTQEZrATmgHOi5ls0YCCQBTkocia_atSw0X-Q&usqp=CAU" alt="profile-4">
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRKDP-4Dg4s4b6YxTTriW24nV5Q0RL65zh7JA&usqp=CAU" alt="profile-5">
</div>
.actions{
display: flex;
height: 300px;
border: 3px solid #333;
}
.actions img{
flex: 1; overflow: hidden;
transition: .5s ease-out;
cursor: pointer;
}
.actions img:hover{
flex: 3;
}
이미지로 실험해보면 아래와 같이 재미난 효과를 만들수 있다.
object-fit: cover 와 object-position: center 를 적용하면 사진이 중앙위치에서 확대된다.
.actions img{
flex: 1;
transition: .5s ease-out;
cursor: pointer;
object-fit: cover;
object-position: center;
}
헤더와 푸터는 고정값(flex-basis나 width 나 max-width)으로 잡고 메인에 flex:auto를 주면 calc로 계산하지 않고도 헤더와 푸터를 제외한 나머지 영역을 메인이 차지한다.
'프론트엔드 > HTML & CSS 강의' 카테고리의 다른 글
테이블 연습 심화과제 (0) | 2024.02.04 |
---|---|
CSS 변수와 함수 (0) | 2023.06.26 |
4. 박스모델 (Box Model) (0) | 2023.06.15 |
3. 선택자 (0) | 2023.06.12 |
2. 색상과 단위 (0) | 2023.06.12 |