728x90
Float
- 레이아웃을 구성할 때 반드시 사용하는 속성
- left / right 뿐
float 의 법칙 (암기)
- 부모의 높이값이 지정되지 않은 상태에서 문제가 발생 ()
- 부모요소에 적용
- 가상요소: after { content: " " ; display: block; clear: both; }
- overflow: hidden;
float 해제 - clear: both;
<!-- float의 영향을 받지않고, 그 이후에는 원래 블록 성질 따라감 -->
<div style="clear:both;">
탑쌓기해제
</div>
실습
<!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>
* {padding: 0; margin: 0; list-style: none;}
.box {border: 1px solid #777;
/* float 적용시 부모가 자식을 감싸지 못하는 문제 발생 */
/* 1. 가상요소방법 */
/* 2. 부모에게 overflow:hiddem) */
overflow: hidden;
width: 500px;
}
/* .box::after {
content: ""; display: block; clear: both;
} */
.box li {float: left;
width: 20.00000%; /* 상자크기 정확히 몇등분 할지 나눠줌 */
border: 1px solid #777;
box-sizing: border-box;
}
</style>
</head>
<body>
<ul class="box">
<li>박스1</li>
<li>박스2</li>
<li>박스3</li>
<li>박스4</li>
<li>박스5</li>
</ul>
</body>
</html>
<!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>
</head>
<style>
.list { /* 부모한테 무조건 overflow:hidden; */
overflow: hidden;
width: 800px;
margin: 0 auto;
border: 1px solid #777
}
.list .inner{
float: left;
width: 25.0000%; /* 100기준 정확히 4등분 시킬거니까 */
border: 1px solid #777;
box-sizing: border-box; /* 이거 안하면 넘어가면서 상자 떨어짐 */
}
.content {
overflow: hidden;
}
.content .left {
float: left;
}
.content .right {
float: right;
}
.content .left span {
display: block;
}
</style>
<body>
<div class="list">
<div class="inner"> <!-- inner가 총 4개 -->
<img src="img/1.png" alt="이미지">
<div class="content"> <!-- overflow -->
<div class="left"> <!-- float left -->
<span>왼쪽</span> <!-- span은 inline이어서 아래로 안 내려가니까 display:block 처리 -->
<span>왼쪽</span>
<span>왼쪽</span>
</div>
<div class="right"><!-- float right -->
<span>오른쪽</span>
</div>
<div style="clear:both;"> <!-- float의 영향을 받지않고, 그 이후에는 원래 블록 성질 따라감 -->
탑쌓기해제
</div>
<div>
플롯의 영향을 받지 않음
</div>
</div>
<!--
<div>
탑쌓기해제
</div>
-->
</div>
<div class="inner"> <!-- inner가 총 4개 -->
<img src="img/1.png" alt="이미지">
<div class="content"> <!-- overflow -->
<div class="left"> <!-- float left -->
<span>왼쪽</span> <!-- span은 inline이어서 아래로 안 내려가니까 display:block 처리 -->
<span>왼쪽</span>
<span>왼쪽</span>
</div>
<div class="right"><!-- float right -->
<span>오른쪽</span>
</div>
<div style="clear:both;"> <!-- float의 영향을 받지않고, 그 이후에는 원래 블록 성질 따라감 -->
탑쌓기해제
</div>
<div>
플롯의 영향을 받지 않음
</div>
</div>
<!--
<div>
탑쌓기해제
</div>
-->
</div>
<div class="inner"> <!-- inner가 총 4개 -->
<img src="img/1.png" alt="이미지">
<div class="content"> <!-- overflow -->
<div class="left"> <!-- float left -->
<span>왼쪽</span> <!-- span은 inline이어서 아래로 안 내려가니까 display:block 처리 -->
<span>왼쪽</span>
<span>왼쪽</span>
</div>
<div class="right"><!-- float right -->
<span>오른쪽</span>
</div>
<div style="clear:both;"> <!-- float의 영향을 받지않고, 그 이후에는 원래 블록 성질 따라감 -->
탑쌓기해제
</div>
<div>
플롯의 영향을 받지 않음
</div>
</div>
<!--
<div>
탑쌓기해제
</div>
-->
</div>
<div class="inner"> <!-- inner가 총 4개 -->
<img src="img/1.png" alt="이미지">
<div class="content"> <!-- overflow -->
<div class="left"> <!-- float left -->
<span>왼쪽</span> <!-- span은 inline이어서 아래로 안 내려가니까 display:block 처리 -->
<span>왼쪽</span>
<span>왼쪽</span>
</div>
<div class="right"><!-- float right -->
<span>오른쪽</span>
</div>
<div style="clear:both;"> <!-- float의 영향을 받지않고, 그 이후에는 원래 블록 성질 따라감 -->
탑쌓기해제
</div>
<div>
플롯의 영향을 받지 않음
</div>
</div>
<!--
<div>
탑쌓기해제
</div>
-->
</div>
</div>
</body>
</html>
초보자가 많이 하는 실수!
padding-bottom 으로 간격주기
버튼은 div로 주면 X
<!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>
.main {
overflow: hidden;
border: 1px solid #777;
width: 800px;
margin: 0 auto;
}
.content1 {
float: left;
box-sizing: border-box;
}
.content2 {
float: right;
box-sizing: border-box;
width: 50.00%;
border: 1px solid #777;
}
.write {
border: 1px solid #777;
/* display: block; */
padding-bottom: 50px;
}
.money {
overflow: hidden;
border: 1px solid black;
}
.money .moneyleft {
float: left;
}
.money .moneyright {
float: right;
}
/* main에서 width가 잡혀 있어서 따로 주지 않아도 float 가능 */
/* .click{
overflow: hidden;
width: 400px;
} */
.click .clickleft{
float: left;
width: 50.000%;
box-sizing: border-box;
}
.click .clickright{
float: right;
width: 50.000%;
box-sizing: border-box;
}
</style>
</head>
<body>
<h3>과제2</h3>
<div class="main"><!-- 제일 바깥쪽 -->
<div class="content1"><!-- 사진 왼쪽 -->
사진
</div>
<div class="content2"><!-- 내용 오른쪽 -->
<div class="write"><!-- 글작성 -->
제목: 패딩바텀 50px<br>
내용: 아마도
</div>
<div class="money"><!-- 가격 -->
<div class="moneyleft"><!-- 가격 왼쪽 -->
가격
</div>
<div class="moneyright"><!-- 가격 오른쪽 -->
10000원
</div>
</div>
<div class="click"><!-- 클릭 -->
<!-- 버튼은 div로 담으면 안됨!!!!!!! -->
<!-- 장바구니 왼쪽 -->
<button type="button" class="clickleft">장바구니</button>
<!-- 구매하기 오른쪽 -->
<button type="button" class="clickright">구매하기</button>
</div>
</div>
</div>
</body>
</html>
border에 속지 마라
border가 안들어간 상자가 있고,
left로 25씩 쪼개고 쌓아서 올린 것
<!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>
.main {
overflow: hidden;
border: 1px solid #777;
width: 800px;
margin: 0 auto;
}
.content1 {
float: left;
box-sizing: border-box;
}
.content2 {
float: right;
box-sizing: border-box;
width: 50.00%;
border: 1px solid #777;
}
.write {
border: 1px solid #777;
/* display: block; */
padding-bottom: 50px;
}
.money {
overflow: hidden;
border: 1px solid black;
}
.money .moneyleft {
float: left;
}
.money .moneyright {
float: right;
}
/* main에서 width가 잡혀 있어서 따로 주지 않아도 float 가능 */
/* .click{
overflow: hidden;
width: 400px;
} */
.click .clickleft{
float: left;
width: 50.000%;
box-sizing: border-box;
}
.click .clickright{
float: right;
width: 50.000%;
box-sizing: border-box;
}
</style>
</head>
<body>
<h3>과제2</h3>
<div class="main"><!-- 제일 바깥쪽 -->
<div class="content1"><!-- 사진 왼쪽 -->
사진
</div>
<div class="content2"><!-- 내용 오른쪽 -->
<div class="write"><!-- 글작성 -->
제목: 패딩바텀 50px<br>
내용: 아마도
</div>
<div class="money"><!-- 가격 -->
<div class="moneyleft"><!-- 가격 왼쪽 -->
가격
</div>
<div class="moneyright"><!-- 가격 오른쪽 -->
10000원
</div>
</div>
<div class="click"><!-- 클릭 -->
<!-- 버튼은 div로 담으면 안됨!!!!!!! -->
<!-- 장바구니 왼쪽 -->
<button type="button" class="clickleft">장바구니</button>
<!-- 구매하기 오른쪽 -->
<button type="button" class="clickright">구매하기</button>
</div>
</div>
</div>
</body>
</html>
<!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 {
overflow: hidden;
width: 1020px;
padding: 50px;
margin: 0 auto;
}
.box .content {
float: left;
box-sizing: border-box;
}
.box .new {
overflow: hidden;
width: 480px
}
.album {
float: left;
box-sizing: border-box;
border: 1px solid #777;
height: 155px;
width: 33.3333%;
}
.box .hotalbum {
width: 236px;
height: 310px;
margin-left: 8px;
border: 1px solid #777;
}
.box .user{
width: 280px;
height: 310px;
margin-left: 8px;
/* border: 1px solid #777; */
/* text-align: center; */
}
.inner {
height: 155px;
/* line-height: 155px; */
width: 100%;
padding: 0px 20px;
border: 1px solid #777;
box-sizing: border-box;
color: #777;
font-size: 12px;
overflow: hidden;
}
.left {
float: left;
}
.right {
float: right;
}
.btn-wrap {
border: 1px solid #777;
text-decoration: none;
background-color: #00d344;
border: none;
color: white;
font-size: 15px;
font-weight: 600;
padding: 20px 50px;
cursor: pointer;
}
.btn-wrap:hover {
background-color: rgb(121, 125, 125);
}
.inner button{width: 100%; margin-top: 13px;}
</style>
</head>
<body>
<div class="box"><!-- 바깥영역 -->
<div class="content new"><!-- 최신앨범 -->
<div class="album"><!-- 최신앨범개인 -->
사진이다
</div>
<div class="album"><!-- 최신앨범개인 -->
사진
</div>
<div class="album"><!-- 최신앨범개인 -->
사진
</div>
<div class="album"><!-- 최신앨범개인 -->
사진
</div>
<div class="album"><!-- 최신앨범개인 -->
사진
</div>
<div class="album"><!-- 최신앨범개인 -->
사진
</div>
</div>
<div class="content hotalbum"><!-- 핫앨범 -->
이미지영역, 높이, 왼쪽마진
</div>
<div class="content user">
<div class="inner"><!-- 로그인 -->
<div class="left">멜론을 더 안전하게 이용하세요</div>
<div class="right">회원가입</div>
<button type="button" class="btn-wrap">로그인</button>
</div>
<div class="inner"> </div>
</div>
</div>
</body>
</html>
Position
- 태그의 위치 설정 방법을 변경할 때 사용
- 포지션을 주면 z축으로 올린다
static | 위에서 아래로 순서대로 배치 (안씀) | |
relative | 초기 위치 상태에서 상하좌우로 위치 이동 | 부모 |
absolute | 절대적 위치 좌표 설정 | 자식 |
fixed | 화면 기준으로 절대적 위치 좌표 설정 |
position 다음 반드시 스타일 속성 필요 (top, bottom, left, right)
position의 법칙
- absolute를 사용하면 기준이 되는 태그가 body 영역 기준으로 올라옴
relative는 내 위치 기준(상대위치)으로 올림
부모에게 사용하면 부모 기반으로 박스가 올라옴 - 자식 요소에 absolute를 사용하면 부모요소의 relative를 넣어줌
- top, bottom 중 1개, left, right 중 1개로 위치 조정
z-index 속성
- HTML 태그는 3D 형태를 나타냄
- 포지션이 겹칠 때 높은 친구(z) 가 최우선적으로 올라옴
- 큰 값을 입력할수록 위로 올라옴
sticky
- 붙어서 사용
- sticky는 top, bottom, left, right 중 필수적으로 하나를 설정
-
부모태그에 overflow 속성이 있다면 동작이 안됨
-
top속성에 fixed 되는 지점을 기록하면 됨
실습
position 실습
<!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>
* {margin: 0; padding: 0;}
.list {
width: 50%; /* body영역 기준 50%임 */
margin: 0 auto;
border: 1px solid #777;
}
p {height: 100px;}
/* 아무것도 안주면 body기준인데, 부모영역(기반으로 잡고 싶은곳)에 relative를 주면 그 영역을 기준으로 바뀜 */
.content {
position: relative;
}
.item1 {background-color: rgb(180, 235, 180);}
.item2 {
background-color: rgb(255, 203, 203);
/* 포지션 absolute를 적용하면 부모에 relative가 들어갑니다. (들어가지 않으면 위치가 body 기준이 됨) */
/* 포지션을 적용하면 top, bottom 중 1개, left, right 중 1개를 선택해서 위치조정 */
position: absolute;
top: 10px;
left: 30px;
width: 50px;
height: 50px;
}
.item3 {background-color: rgb(171, 217, 247);}
</style>
</head>
<body>
<div class="list">
<div class="content">
<p class="item1">포지션</p>
<p class="item2">포지션</p>
<p class="item3">포지션</p>
</div>
</div>
</body>
</html>
position 실습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>
section {
width: 500px;
overflow: hidden;
margin: 0 auto;
}
section .box {
float: left;
width: 25%;
background-color: rgb(209, 253, 120);
height: 100px;
}
.pos {
background-color: rgb(248, 123, 148);
/* 상대위치(박스의 원래 위치) 기준으로 z축 올림 */
/* position: relative; */
position: absolute;
top: 30px;
left: 30px;
}
</style>
</head>
<body>
<!-- position: relative; 가 있는 위치 기준으로 올라가게 됩니다. -->
<section style="position: relative;">
<div class="box">박스1</div>
<div class="box">박스1</div>
<div class="box">박스1</div>
<div class="box">
박스1
<div class="pos">포지션</div>
</div>
</section>
</body>
</html>
position 실습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>
* {padding: 0; margin: 0; list-style: none;}
section {height: 2000px;
background-color: rgb(196, 222, 245);
margin-top: 150px;
}
header {
background-color: white;
position: fixed; /* 스크롤을 따라다님 */
left: 0;
top: 0;
width: 100%;
text-align: center;
z-index: 5;
}
.menu ul {background-color: rgb(65, 65, 65);}
.menu ul li {display: inline;}
.menu ul li a {
display: inline-block;
color: rgb(255, 255, 255);
text-decoration: none;
width: 70px;
height: 50px;
line-height: 50px;
}
.side {
position: fixed;
right: 0;
top: 200px;
/* 포지션이 겹치는 경우 z축의 우선순위 지정, 보통 1~10 사이값 */
z-index: 10;
background-color: rgb(65, 65, 65);
text-align: center;
}
.side ul li a {
color: #fff;
text-decoration: none;
font-size: 14px;
display: inline-block; /* a가 inline이어서 height가 안들어가니까 inline-block, boloc해줘야 함 */
height: 80px;
line-height: 80px;
width: 100px;
border-top: 1px solid rgb(190, 190, 190);
}
</style>
</head>
<body>
<header>
<div>
<img src="img/1.png" alt="로고">
</div>
<nav class="menu">
<ul>
<li><a href="#">메뉴</a></li>
<li><a href="#">메뉴</a></li>
<li><a href="#">메뉴</a></li>
<li><a href="#">메뉴</a></li>
</ul>
</nav>
</header>
<aside class="side">
<ul>
<li><a href="#">카톡</a></li>
<li><a href="#">전화번호</a></li>
<li><a href="#">메뉴1</a></li>
<li><a href="#">메뉴2</a></li>
</ul>
</aside>
<!-- 그냥 놔두면 section이 아래로 말려들어가서
f12 눌러서 margin-top으로 위치 확인후 넣어주기 -->
<section>
관련 내용
</section>
</body>
</html>
sticky 실습
<!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>
* {margin: 0; padding: 0;}
.inner1 {height: 200px; background-color: rgb(240, 240, 81);}
.inner2 {
background-color: rgb(62, 150, 250);
/*
1. sticky는 top, bottom, left, right 중 필수적으로 하나를 설정해야합니다.
2. 부모태그에 overflow 속성이 있다면 동작이 안됩니다.
3. top속성에 fixed 되는 지점을 기록하면 됩니다.
*/
position: sticky;
top: 0;
left: 0;
}
.inner3 {height: 2000px; background-color: rgb(0, 219, 110)}
</style>
</head>
<body>
<section>
<div class="inner1">
내용1
</div>
<aside class="inner2">
sticky는 특정높이 전까지는 고정으로 있다가, 특정높이 도달하면 fixed되는 속성
</aside>
<div class="inner3">
내용3
</div>
</section>
</body>
</html>
position 실습4
<!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>
* {margin: 0; padding: 0; list-style: none;}
.main {
margin: 0 auto;
position: relative;
border: 2px solid #777;
width: 500px;
padding: 20px;
/* line-height: 400px; */
box-sizing: border-box;
}
.main .pos {
position: absolute;
top: 20px;
left: 20px;
}
.wrap {
padding-left: 120px;
overflow: hidden;
}
.wrap .left {
float: left;
box-sizing: border-box;
}
.wrap .right {
float: right;
}
.left input {
display: block;
}
</style>
</head>
<body>
<div class="main"> <!-- margin: 0 auto -->
<div class="pos"> <!-- 포지션 -->
<img src="img/1.png" alt="로고">
</div>
<div class="wrap"> <!-- 패딩 left -->
<textarea name="hint" id="text" cols="40" rows="12"></textarea>
<div class="left"><!-- float: left -->
<input type="text">
<input type="text">
</div>
<!-- float:right -->
<button type="butto" class="right">등록</button>
</div>
</div>
</body>
</html>
position 실습5
<!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>
* {margin: 0; padding: 0; list-style: none;}
.wrap {
margin: 0 auto;
border: 1px solid #777;
width: 500px;
padding: 20px;
position: relative;
}
.wrap-img {
position: absolute;
top: 20px;
left: 20px;
}
.wrap .wrap-content {
padding-left: 70px;
overflow: hidden;
}
.wrap-content textarea {
width: 100%;
height: 200px;
box-sizing: border-box; /* textarea에 기본적으로 border가 들어가 있으니까 box-sizing 넣어줘야 함 */
resize: none; /* textarea 움직이기 방지 */
}
.wrap-content .left {
float: left;
}
.wrap-content .right {
float: right;
}
.left input { /* input은 inline → block으로 바꿔주면 내려감, input에서 조정해줘야 함 */
display: block;
margin-top: 5px;
}
button {
width: 100px;
}
.wrap-img img {
width: 50px;
}
/* .wrap .btn .right { 위에서 썼던 position:right 그대로 사용 가능
float: right;
box-sizing: border-box;
} */
/* .content2 { 두번째 제목, 내용부분 class=content2 안 만들어도 됨
float: left;
} */
</style>
</head>
<body>
<div class="wrap"> <!-- margin: 0 auto -->
<div class="wrap-img"> <!-- 포지션 -->
<img src="img/1.png" alt="로고">
</div>
<div class="wrap-content"> <!-- 패딩 left -->
<textarea name="hint" id="text"></textarea>
<div class="left"><!-- float: left -->
<input type="text">
<input type="text">
</div>
<!-- float:right -->
<button type="butto" class="right">등록</button>
</div>
</div>
<div class="wrap">
<div class="wrap-img">
<img src="img/1.png" alt="로고">
</div>
<div class="wrap-content">
<div class="left">
<h3>제목</h3>
<p>내용</p>
</div>
<button type="button" class="right">삭제</button>
<button type="button" class="right">수정</button>
</div>
</div>
</body>
</html>
728x90
'클라이언트 > HTML & CSS' 카테고리의 다른 글
[HTML] Flex 문법 (0) | 2022.12.27 |
---|---|
[HTML] padding(패딩), margine(마진), box-sizing(속성) (0) | 2022.12.21 |
[HTML] CSS 문법 (선택자, 폰트&텍스트, display, background) (0) | 2022.12.20 |
[HTML] Visual Studio Code, HTML 태그 (0) | 2022.12.13 |
[JSP&HTML] 웹 프로그래밍, HTML 태그 (0) | 2022.11.28 |