* 전날 과제 예제(html, css)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- css 링크 -->
<link rel="stylesheet" href="css/bootstrap.min.css">
<!-- 제이쿼리 링크 -->
<script src="jquery/jquery-3.6.3.min.js"></script>
<!-- 부트스트랩 테마가 필요하면 이쯤 추가.. -->
<!-- js링크 -->
<script src="js/bootstrap.min.js"></script>
<!-- 커스터마이징 디자인(가장 밑에 만들어 줄 것)-->
<link rel="stylesheet" href="index03.css">
</head>
<body>
<section>
<div class ="container">
<h3>상세내용</h3>
<div class ="row">
<div class ="col-sm-6 col-xs-12">
<img src="img/detail.jpg" alt="이미지">
</div>
<div class ="col-sm-6 col-xs-12">
<div class = "detail"> <!--위-->
<p class = "title">[게릴라특가] 30일체험가능! 벨라페이스 3컬러 LED마스크 눈마사지 겸용/4단계 시간조절/피부홈케어 +사은품까지!</p>
<p class = "price">135,000원</p>
<p class = "deliver">무료배송<br>
상품별배송 ㅣ 택배배송 ㅣ당일출고, 12시 이전 결제 건까지 해당 (주말, 공휴일 제외)</p>
</div>
<div class ="detail-control"> <!--아래-->
<div class = "price">
<p class ="left">총 상품 금액</p>
<p class ="right">0원</p>
</div>
<div class = "order">
<button class = "left btn btn-default">장바구니</button>
<button class = "right btn btn-primary">구매하기</button>
</div>
</div>
</div>
</div>
</div>
</section>
<section style="margin-top: 100px;">
<div class = "container">
<div class = "row">
<div class ="col-xs-12">
<form class = "reply-wrap">
<div class = "reply-img">
<img src = "img/profile.png" alt ="프로필">
</div>
<div class = "reply-content">
<textarea class = "form-control" placeholder="500글자 이내"></textarea>
<div class ="reply-control">
<div class ="left"> <!--왼-->
<input type="text" class ="form-control" placeholder="아이디">
<input type="password" class ="form-control" placeholder="비밀번호">
</div>
<button class ="right btn btn-success">등록하기</button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
</body>
</html>
* {margin: 0px; padding: 0px; line-height: none;}
img{max-width: 100%; height: auto;}
.btn{border-radius: 0;}
.form-control {border-radius: 0;}
.detail .title {min-width: 350px;}
.detail .price {
font-size: 25px;
font-weight: 700;
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
padding: 10px 0;
}
.detail .deliver{font-size: 12px; color: #888;}
.detail-control .price,
.detail-control .order {
overflow: hidden;
}
.detail-control .price .left{float: left; font-weight: 500; height: 29px; line-height: 29px;}
.detail-control .price .right{float: right; font-size: 20px; font-weight: 700;}
.detail-control .order .left {float: left; width: 50%; padding: 10px 0;}
.detail-control .order .right {float: right; width: 50%; padding: 10px 0;}
/* *****댓글창***** */
.reply-wrap {
border: 1px solid #ddd;
background-color: #f5f5f5;
position: relative;
padding: 15px;
}
.reply-img {
position: absolute;
left: 15px;
top: 15px;
}
.reply-content {
padding-left: 55px;
}
.reply-content textarea {
resize: vertical;
height: 70px;
margin-bottom: 5px;
transition: all .3s ease-in-out;
}
.reply-content textarea:focus{ /*커서 찍으면 크기 늘어남*/
height: 150px;
}
.reply-control {overflow: hidden;}
.reply-control .left{float: left;}
.reply-control .left input:nth-child(1){ /*input 태그에 1번째 자식*/
margin-bottom: 5px;
}
.reply-control .right{float: right;}
1. flex
- 레이아웃을 구성할 때 flaot, position 을 사용하지만, flex문법을 통해서도 할 수 있습니다.
- flex 레이아웃은 부모박스에 flex를 선언하고, 안에 있는 박스 요소를 유연하게 배치하는 속성입니다.
1) 부모 박스 적용 속성
- display: flex container를 정의
- flex-direction: flex items의 주 축을 설정
- flex-wrap: flex items의 여러 줄 묶음 설정
- justify-content: 주 축의 정렬 방법을 설정
- align-content: 교차 축의 정렬 방법을 설정(2줄 이상)
- align-items: 교차 축에서 items의 정렬 방법을 설정(1줄)
2) display
- flex: block 특성의 flex container를 정의(80%)
- inline-flex: inline 특성의 flex container를 정의
3) flex-direction(중요)
- 메인축 방향을 설정
- row: items의 배치를 가로로 둠
- column: items의 배치를 세로로 둠
4) flex-wrap
- nowrap: 모든 items를 여러 줄로 묶지 않음
- wrap: items를 여러 줄로 묶음
- wrap-reverse: items를 wrap의 역 방향으로 여러 줄로 묶음
5) justify-content(주축 정렬)
- 메인축 정렬
- flex-start: items를 시작점으로 정렬
- flex-end: items를 끝점으로 정렬
- center: items를 가운데 정렬
- space-between: 시작 item은 시작점에, 마지막은 item은 끝점에 정렬되고 나머지 items는 사이에 고르게 정렬
- space-around: items를 균등한 여백을 포함하여 정렬
* 예제 1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {background-color: yellow; padding: 10px; height: 200px;}
.box .items {background-color: green; width: 50px; height: 50px; }
.container {
/* flex 기본 item의 너비 만큼 가로 배치 */
/* flex: flex - 블럭배치, inline-flex - 인라인 배치 */
display: flex;
/* 주축 설정 row 기본값 */
/* 세로 column */
flex-direction: row;
}
</style>
</head>
<body>
<h3>유연한 박스 flex</h3>
<div class ="container box">
<div class ="items">hello</div>
<div class ="items">hello</div>
<div class ="items">hello</div>
</div>
<!-- <div class ="container box">
<div class ="items">hello</div>
<div class ="items">hello</div>
<div class ="items">hello</div>
</div> -->
<style>
.box {
background-color: yellow;
padding: 10px;
}
.box .items {
background-color: green;
width: 50px;
height: 50px;
margin: 10px;
}
.container2 {
display: flex;
/* flex-flow는 direction과 wrap을 같이 작성하는 속성 */
flex-flow: row wrap;
/* flex-direction: row; flex-wrap: wrap; */
/* 더 이상 공간이 없을 때 줄바꿈처리, 기본값 nowrap */
}
</style>
<h3>flex-wrap(줄바꿈)</h3>
<div class ="container2 box">
<div class ="items">hello</div>
<div class ="items">hello</div>
<div class ="items">hello</div>
<div class ="items">hello</div>
<div class ="items">hello</div>
<div class ="items">hello</div>
</div>
</body>
</html>
6) align-item: 한줄, align-content: 여러줄
* 예제 2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
background-color: yellow;
padding: 10px;
height: 500px;
}
.box .items {
background-color: green;
width: 50px;
height: 50px;
margin: 10px;
}
.container {
display: flex;
/* flex-direction: column; row: 가로, colume일때는 주축이 세로로 바뀜 */
/* 주축 정렬 */
/* 아이템 사이 균등 */
/* justify-content: space-around; */
/* 양끝은 붙이고 사이 균등 */
/* justify-content: space-between */
/* 양 끝과 아이템 사이 균등 */
justify-content: space-evenly;
}
</style>
</head>
<body>
<h3>justify-content(주축 정렬)</h3>
<div class="container box">
<div class="items">hello</div>
<div class="items">hello</div>
<div class="items">hello</div>
<div class="items">hello</div>
</div>
<hr>
<h3>align-item(교차축 정렬-한줄일때)</h3>
<style>
.box {background-color: yellow; padding: 10px; height: 500px;}
.box .items2 {background-color: green; width: 50px; margin: 10px; height: 50px;}
.container2 {
display: flex;
/* 교차축 정렬 */
/* item의 높이가 고정이면 안됩니다. */
/* align-items: stretch; */ /* 잡아 당기기 */
/* align-items: flex-start; */ /* 수직 위 */
/* align-items: flex-end; */ /* 수직 아래 */
/* align-items: center; */ /* 수직 중앙 */
/* align-items: baseline; */ /* 아이템의 문자들 기준으로 수직 정렬 */
}
</style>
<div class="container2 box">
<div class="items2" style="line-height: 50px;">hello</div>
<div class="items2" style="line-height: 70px;">hello</div>
<div class="items2">hello</div>
<div class="items2">hello</div>
</div>
<hr>
<h3>align-content(교차축 정렬-두 줄 이상</h3>
<style>
.box {background-color: yellow; padding: 10px; height: 500px; width: 300px;}
.box .items3 {background-color: green; width: 50px; margin: 10px; height: 50px;}
.container3 {
display: flex;
flex-direction: row;
flex-wrap: wrap;
/* 교차축 정렬 - 두줄 이상*/
/* item 높이가 없어야 함*/
/* align-content: stretch; */
/* align-content: flex-start; */
/* align-content: flex-end; */
/* align-content: center; */
/* align-content: space-around; */
align-content: space-between;
}
</style>
<div class="container3 box">
<div class="items3">1</div>
<div class="items3">2</div>
<div class="items3">3</div>
<div class="items3">4</div>
<div class="items3">5</div>
<div class="items3">6</div>
<div class="items3">7</div>
<div class="items3">8</div>
<div class="items3">9</div>
<div class="items3">10</div>
</div>
</body>
</html>
7) 자식 박스에 적용하는 속성
- flex-basis: flex item의 기본 너비 설정
- order: flex item의 순서를 설정
- flex: flex-grow, flex-shrink, flex-basis의 단축 속성
* flex
- Item의 너비(grow, shrink, basis)를 한번에 쓰는 속성입니다
* flex-grow
- Item의 증가 너비 비율을 설정합니다. 숫자가 크면 더 많은 너비를 가집니다.
- item이 3개일때 1, 2, 1 이라면 첫 번째 Item은 총 너비의 25%(1/4)을, 두 번째 Item은 총 너비의 50%(2/4)를, 세 번째 Item은 총 너비의 25%(1/4)을 가집니다
* flex-shrink
- Item이 감소하는 너비의 비율을 설정합니다. 숫자가 크면 더 많은 너비가 감소합니다.
* flex-basis
- Item의 (공간 배분 전) 기본 너비를 설정합니다. 기본값 auto인 경우 width, height 등의 속성으로 item 너비를 설정할 수 있습니다.
8) order
- Item의 순서를 설정합니다. Item에 숫자를 지정하고 숫자가 클수록 순서가 밀립니다.
* 예제 3
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
background-color: yellow;
padding: 10px;
height: 500px;
}
.box .items {
background-color: green;
width: 50px;
height: 50px;
margin: 10px;
}
.container {
display: flex;
}
/*grow, shrink 컨테이너 사이즈가 변할 때, 아이템이 증가되거나, 감소되는 비율(속도)*/
/* basis 아이템 너비에 대한 비율 (기본값은 auto이며, 없으면 width 따라갑니다.) */
.item1 {
/* flex-grow: 2;
flex-shrink: 2; */
/* flex-basis: 33.3333%; */
flex: 2 2 33.3333%;
order: 10;
}
.item2 {
/* flex-grow: 1;
flex-shrink: 1; */
/* flex-basis: 33.3333%; */
flex: 1 1 33.3333%;
order: 1;
}
.item3 {
/* flex-grow: 0;
flex-shrink: 0; */
/* flex-basis: 33.3333%; */
flex: 0 0 33.3333%;
order: 5;
align-self: center; /* 아이템 하나만 교차축 정렬 */
}
</style>
</head>
<body>
<h3>item에 적용하는 속성들</h3>
<div class="container box">
<div class="items item1">1</div>
<div class="items item2">2</div>
<div class="items item3">3</div>
</div>
</body>
</html>