HTML CSS

2024.07.04 CSS flexbox FlexItem의 μ„Έλ°€ν•œ μ œμ–΄ flex 속성

μ •ν›ˆ5 2024. 7. 4. 08:40

 

πŸ’‘ ν•™μŠ΅ λͺ©ν‘œ

- Flex μ•„μ΄ν…œμ˜ 속성을 μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•  수 μžˆλ‹€.
- Flexbox λ ˆμ΄μ•„μ›ƒμ—μ„œ 각 μ•„μ΄ν…œμ˜ μˆœμ„œ, 크기 및 정렬을 μ œμ–΄ν•  수 μžˆλ‹€.
- order, flex-grow, flex-shrink, flex-basis, flex, align-self μ†μ„±μ˜ μ‚¬μš© λͺ©μ κ³Ό 상황을 νŒŒμ•…ν•  수 μžˆλ‹€.

 

Flex μ•„μ΄ν…œ 속성 μ‚¬μš© λͺ©μ 

order

μ•„μ΄ν…œμ˜ ν‘œμ‹œ μˆœμ„œλ₯Ό μ œμ–΄ν•˜μ—¬ μ€‘μš”λ„μ— 따라 배치 μˆœμ„œλ₯Ό λ³€κ²½ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.
즉, μ€‘μš”λ„μ— 따라 μˆœμ„œλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ νŠΉμ • μ•„μ΄ν…œμ„ 맨 μ•žμ΄λ‚˜ 맨 뒀에 λ°°μΉ˜ν•  λ•Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

flex-grow: Flex

μ»¨ν…Œμ΄λ„ˆ λ‚΄μ˜ 남은 곡간을 μ•„μ΄ν…œλ“€μ΄ λΉ„μœ¨μ— 맞게 μ°¨μ§€ν•˜λ„λ‘ ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.

λ˜λŠ” μ—¬λŸ¬ μ•„μ΄ν…œμ΄ 있고, νŠΉμ • μ•„μ΄ν…œμ΄ 더 λ§Žμ€ 곡간을 μ°¨μ§€ν•΄μ•Ό ν•  λ•Œ μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 

flex-shrink

곡간이 λΆ€μ‘±ν•  λ•Œ μ•„μ΄ν…œμ΄ μ–Όλ§ˆλ‚˜ 쀄어듀지λ₯Ό κ²°μ •ν•˜μ—¬ λ°˜μ‘ν˜• λ””μžμΈμ—μ„œ λ ˆμ΄μ•„μ›ƒμ„ μœ μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

flex-basis

μ•„μ΄ν…œμ˜ κΈ°λ³Έ 크기λ₯Ό μ„€μ •ν•˜μ—¬ 초기 크기λ₯Ό μ§€μ •ν•˜κ³  λ‚˜λ¨Έμ§€ 곡간을 flex-grow와 flex-shrink둜 μ‘°μ •ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€. 즉, μ•„μ΄ν…œμ˜ 초기 크기λ₯Ό μ„€μ •ν•˜κ³ , λ‚˜λ¨Έμ§€ 곡간을 flex-grow와 flex-shrink둜 μ‘°μ •ν•˜κ³  싢을 λ•Œ.

 

flex (단좕 속성)

flex-grow, flex-shrink, flex-basisλ₯Ό ν•œ λ²ˆμ— μ„€μ •ν•˜μ—¬ μ½”λ“œ 간결화와 νš¨μœ¨μ„±μ„ 높이기 μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

ex) padding : 10px 20px 30px 40px; (μ‹œκ³„λ°©ν–₯) {μ™Ό, μœ„, 였, λ°‘} {단좕 속성}

.item {
    flex: 1 1 200px;
}

 

 

μ‹œλ‚˜λ¦¬μ˜€ μ½”λ“œ 1

class_flexbox_03 폴더 생성

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<style type="text/css">
	
	.container{
		display: flex;
		flex-wrap: wrap;
		border: 2px solid #333;
		padding: 10px;
		background-color: #f9f9f9;
	}
	
	.item {
	/* width: calc(33.333% -10px); */  /* μ•„μ΄ν…œ 크기 쑰절 */ /* flex-grow 속성 ν•˜λ©΄μ„œ μ£Όμ„μ²˜λ¦¬ 함 */
	/* flex-basisμ—μ„œ  속성 μ£Όμ„μ²˜λ¦¬ */  /*flex-shrink 속성 μ£Όμ„μ²˜λ¦¬ ν•΄μ œ */
		background-color: brown;
		color: white;
		margin: 5px;
		padding: 20px;
		text-align: center;
		border-radius: 5px;
	}
	
	.order-1{
		order: 1; /* μˆœμ„œλ₯Ό μ§€μ •ν•  수 μžˆλ‹€. */
	}
	
	.order-2{
		order: 2;
	}
	
	/* μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 더 μš°μ„ μˆœμœ„λ₯Ό κ°€μ§„λ‹€. */
	
	.order-3{
		order: 3;
	}
	
	/* flex-grow 속성은 νŠΉμ • flex μ•„μ΄ν…œμ΄ 더 λ§Žμ€ 곡간을 μ°¨μ§€ν•΄μ•Ό ν•  λ•Œ μ‚¬μš© */
	.grow-1 {
		flex-grow: 1;
	}
	
	/* flex-shrink 속성은 (곡간이 λΆ€μ‘±ν•  λ•Œ μ–Όλ§ˆλ‚˜ 쀄어듀지λ₯Ό κ²°μ •)
		νŠΉμ • μ•„μ΄ν…œμ΄ μ€„μ–΄λ“€λ©΄μ„œ λ‹€λ₯Έ μ•„μ΄ν…œκ³Ό κ· ν˜•μ„ λ§žμΆ”μ–΄μ•Ό ν•  λ•Œ ν™œμš©λœλ‹€.
	*/
	.shrink-1 {
		flex-shrink: 1;
	}
	
	.basis-100 {
		flex-basis: 300px;
	}
	
	/* flex(단좕 속성) - flex-grow, flex-shrink, flex-basisλ₯Ό ν•œλ²ˆμ— μ„€μ •ν•˜λŠ” 속성이닀. */
	.flex-combined{
		flex: 1 1 300px;
	}
	
</style>

</head>
<body>
	<%--
		JSP : HTML + JAVA 기술 --> 컴파일 과정을 거쳐야 ν•œλ‹€. (μ›Ή μ„œλ²„λŠ” 컴파일 μ•ˆλœλ‹€.(μ •μ λ§Œ κ°€λŠ₯))
		
		http://localhost:8080/flex/index.jsp
		http://localhost:8080/flex  <-- root νŒŒμΌμ— μžˆκΈ°μ— μ΄λ ‡κ²Œ 써도 λœλ‹€. 
		 
	 --%>
	 
	 <h2>order 속성</h2>
	 <div class="container">
	 	<div class="item order-2">μ•„μ΄ν…œ1</div>
	 	<div class="item order-1">μ•„μ΄ν…œ2</div>
	 	<div class="item order-3">μ•„μ΄ν…œ3</div>
	 </div>
	 
	 <h2>flex-grow 속성</h2>
	 <div class="container">
	 	<div class="item grow-1">μ•„μ΄ν…œ1</div>
	 	<div class="item">μ•„μ΄ν…œ2</div>
	 	<div class="item">μ•„μ΄ν…œ3</div>
	 </div>
	 
	 <h2>flex-shrink 속성</h2>
	 <div class="container" style="width: 550px;">
	 	<div class="item shrink-1">μ•„μ΄ν…œ1 (flex-shrink : 1)</div>
	 	<div class="item">μ•„μ΄ν…œ2 (flex-shrink : 0)</div>
	 	<div class="item">μ•„μ΄ν…œ3 (flex-shrink : 0)</div>
	 </div>
	 
	 <h2>flex-basis 속성</h2>
	 <div class="container">
	 	<div class="item basis-100">μ•„μ΄ν…œ1 (flex-basis : 100px)</div>
	 	<div class="item">μ•„μ΄ν…œ2</div>
	 	<div class="item">μ•„μ΄ν…œ3</div>
	 </div>
	 
	 <h2>flex-단좕 속성</h2>
	 <div class="container">
	 	<div class="item flex-combined">μ•„μ΄ν…œ 1</div>
	 	<div class="item flex-combined">μ•„μ΄ν…œ 2</div>
	 	<div class="item flex-combined">μ•„μ΄ν…œ 3</div>
	 </div>
	
</body>
</html>