원지의 개발
article thumbnail
728x90

Float

  • 레이아웃을 구성할 때 반드시 사용하는 속성
  • left / right 뿐

float 의 법칙 (암기)

  • 부모의 높이값이 지정되지 않은 상태에서 문제가 발생 ()
  • 부모요소에 적용
    1. 가상요소: after { content: " " ; display: block; clear: both; }
    2. 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의 법칙

  1. absolute를 사용하면 기준이 되는 태그가 body 영역 기준으로 올라옴
    relative는 내 위치 기준(상대위치)으로 올림
    부모에게 사용하면 부모 기반으로 박스가 올라옴
  2. 자식 요소에 absolute를 사용하면 부모요소의 relative를 넣어줌
  3. 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
profile

원지의 개발

@원지다

250x250