mjeongriver
article thumbnail
Published 2022. 12. 21. 18:42
day50-css TIL/HTML&CSS

1. 패딩, 마진(매우 중요)

- 박스 속성은 웹 페이지의 레이아웃을 구성할 때 가장 중요한 속성이다.

- margin은 마진의 너비를 지정하는 속성 padding은 패딩의 너비를 지정하는 속성이다.

- margin 속성과 padding 속성은 width 속성과 height 속성과 별도로 적용된다.

<!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>
        p {
            width: 300px;
            height: 100px;
            /* border: 1px solid red; - 한번에 선분 다 그어져있는 것 */
            border-bottom: 1px solid red;
            border-top: 1px solid red;
            border-left: 1px solid red;
            border-right: 1px solid red;
            border-radius: 10%; /* 모서리 윤곽을 둥글게 함(%, px 둘 다 가능) */
        }

    </style>
</head>
<body>
    <p>윤곽</p>
</body>
</html>

 

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>

       body {background-image: url('img/bg_grid.jpg');}
       p{
            width: 300px;
            height: 100px;
            border: 1px solid #777;
            background-color: aqua;
            /* padding: 10px; 4, 3, 2, 1 */
            /* padding: 10px 20px 30px 40px; 시계 방향으로 10 ~ 40(위, 오른쪽, 아래, 왼쪽) */
            /* padding: 10px 30px; 위아래, 좌우 */
            /* padding: 10px 20px 30px; 위, 좌우, 아래 */
        }

    </style>

</head>
<body>
    
    <p>
        박스의 가로: width + padding + border = 322px;
    </p>

</body>
</html>

 

- 초록색 부분으로 표시된 곳이 패딩

 

 

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>

        body {background-image: url('img/bg_grid.jpg');}
        p{
             width: 300px;
             height: 100px;
             border: 1px solid #777;
             background-color: aqua;
            
            /* margin: 30px; */
            /* margin: 10px 20px 30px 40px;  위, 오른쪽, 아래, 왼쪽 */ 
            /* margin: 10px 20px 30px; 위, 좌우, 아래 */
            /* margin: 10px 20px; 위아래, 좌우 */
         }

         .box{
            text-align: center; /* 박스 안에 있는 텍스트의 정렬  */
            margin: 0 auto; /* 박스 크기가 지정되어야 함*/
         }
        
 
     </style>

</head>
<body>
    
    <p>
        마진: 윤곽 기준으로 바깥 여백
    </p> 
    
    <p>
        패딩은 겹치지 않지만 마진은 겹칩니다. (즉, 개발자 도구로 열었을 때 위 아래의 간격이 20씩 늘어나는게 아니라 10 중첩 됨.)
    </p>

    <p class = "box">
        상자를 정가운데로 보내고 싶으면 margin: 0 auto;
    </p>

</body>
</html>

 

2. box sizing

- width 속성과 height 속성은 글자를 감싸는 영역의 크기를 지정하는 속성이다. box-sizing 속성은 이러한 공식을 변경할 수 있는 CSS3 속성이다.

- content-box 키워드의 경우 박스의 크기를 다음 공식으로 구한다. (기본값) - 박스 너비 공식 

- border-box 키워드의 경우 박스의 크기를 다음 공식으로 구한다. (많이 사용됨) - border 값이 너비에서 빠진다 

box-sizing: border-box; /* 상자의 크기를 border, padding은 제외하고 계산 */

 

* 예제

<!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;}
        img {height: auto; max-width: 100%;}

        #header {
            background-color: #000;
            text-align: center;
        }
        .gnb li {display: inline;}
        .gnb li a {
            display: inline-block;
            color: #fff;
            text-decoration: none;
            width: 70px;
            height: 50px;
            line-height: 50px;
            padding: 0px 10px;
            box-sizing: border-box;
        }

        .gnb li a:hover {
            border-bottom: 3px solid #fff;
        }

        .wrab {
            margin: 0 auto;
            width: 1020px;
            margin-top: 50px;
        }

        .wrab .inner {border: 1px solid #777;}
        

    </style>

</head>
<body>
    
    <header id = "header">
        <nav class = "gnb">
        <ul>
            <li><a href="#">목록</a></li>
            <li><a href="#">목록</a></li>
            <li><a href="#">목록</a></li>
            <li><a href="#">목록</a></li>
        </ul>
        </nav>
    </header>

    <article>
        <img src="img/1.jpg" alt="배너1">
    </article>

    <section class="wrab">
        <h3>오늘의 발견</h3>
        <div class="inner">
            컨텐츠 내용...<br>
            컨텐츠 내용...<br>
            컨텐츠 내용...<br>
            컨텐츠 내용...<br>
            컨텐츠 내용...<br>
            컨텐츠 내용...<br>
        </div>
    </section>

</body>
</html>

 

3. float

- 웹 페이지 레이아웃을 구성할 때에 반드시 사용하는 속성

- float을 적용시키면 부모의 높이값이 지정이 안되는 현상때문에 문제가 발생한다.

이때 부모요소에

1) 가상요소:affter { content: ""; display: block; clear: both;}

2) overflow: hidden 중 택 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>
        * {padding: 0; margin: 0; list-style: none;}
        .box {
            border: 1px solid #777;
            /* float 적용시 부모가 자식을 감싸지 못하는 문제가 발생함 */
            /* 1. 가상 요소 방법 적용 */
            /* 2. 부모에 overflow:hidden; */
            overflow: hidden;
            width: 500px;
        }
        
        /* .box:after {content: ""; display: block; clear: both;} */
        
        .box li {
            float: left;
            width: 20.0000%;
            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>

    <style>

        .list {
            overflow: hidden;
            width: 800px;
            margin: 0 auto;
            border: 1px solid #777;
        }
        .list .inner {
            float : left;
            width: 25.0000%;
            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>

</head>
<body>

    <div class = "list">

        <div class = "inner">
            <img src="img/bgimg.png" alt="이미지">
            <div class = "content"><!-- overflow -->
                
                <div class ="left">
                <span>왼</span>
                <span>왼</span>
                <span>왼</span>
                </div>
                <div class = "right"> <!-- right -->
                    오른쪽
                </div>
                
                <!-- content 밖에다가 써도 되고, clear: both 사용하면 float 영향을 받지 않음 -->
                <div style = "clear: both;">
                    탑쌓기 해제
                </div>
                <div>
                    clear: both 쓰면 플롯의 영향을 받지 않습니다.
                </div>

            </div>

            <!-- 
                <div>
                탑쌓기 해제
                </div> 
            -->
            
        </div>

        <div class = "inner">
            <img src="img/bgimg.png" alt="이미지">
            <div class = "content"><!-- overflow -->
                
                <div class ="left">
                <span>왼</span>
                <span>왼</span>
                <span>왼</span>
                </div>
                <div class = "right"> <!-- right -->
                    오른쪽
                </div>
                
                <!-- content 밖에다가 써도 되고, clear: both 사용하면 float 영향을 받지 않음 -->
                <div style = "clear: both;">
                    탑쌓기 해제
                </div>
                <div>
                    clear: both 쓰면 플롯의 영향을 받지 않습니다.
                </div>

            </div>

            <!-- 
                <div>
                탑쌓기 해제
                </div> 
            -->
            
        </div>

        <div class = "inner">
            <img src="img/bgimg.png" alt="이미지">
            <div class = "content"><!-- overflow -->
                
                <div class ="left">
                <span>왼</span>
                <span>왼</span>
                <span>왼</span>
                </div>
                <div class = "right"> <!-- right -->
                    오른쪽
                </div>
                
                <!-- content 밖에다가 써도 되고, clear: both 사용하면 float 영향을 받지 않음 -->
                <div style = "clear: both;">
                    탑쌓기 해제
                </div>
                <div>
                    clear: both 쓰면 플롯의 영향을 받지 않습니다.
                </div>

            </div>

            <!-- 
                <div>
                탑쌓기 해제
                </div> 
            -->
            
        </div>

        <div class = "inner">
            <img src="img/bgimg.png" alt="이미지">
            <div class = "content"><!-- overflow -->
                
                <div class ="left">
                <span>왼</span>
                <span>왼</span>
                <span>왼</span>
                </div>
                <div class = "right"> <!-- right -->
                    오른쪽
                </div>
                
                <!-- content 밖에다가 써도 되고, clear: both 사용하면 float 영향을 받지 않음 -->
                <div style = "clear: both;">
                    탑쌓기 해제
                </div>
                <div>
                    clear: both 쓰면 플롯의 영향을 받지 않습니다.
                </div>

            </div>

            <!-- 
                <div>
                탑쌓기 해제
                </div> 
            -->
            
        </div>

    </div>

    
    
</body>
</html>

 

* 예제(1~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 {
            overflow: hidden;
            border: 1px solid #777;
            width: 800px;
            margin: 0 auto;
        }

        .box .inner {
            float: left;
            width: 50%;
            box-sizing: border-box;
        }

        .box .inner p {margin: 0px;}
        .wrap {border: 1px solid #777;}

        .content {overflow: hidden;}
        .content .left{float: left;}
        .content .right{float: right;}
        .content button {width: 50%;}
        .control {margin-top: 50px; border: 1px solid #777;}

    </style>
    
</head>
<body>

    <h3>과제2</h3>

    <div class = "box">
        <div class = "inner">
            사진
        </div>
        <div class = "inner wrap">
            <div>
                <p>제목: ~~~ </p>
                <p>내용: ~~~ </p>
            </div>
            <div class ="control">
                <div class = "content">
                    <span class = "left">가격</span>
                    <span class = "right">10000원</span>
                </div>
                <div class = "content">
                    <button type = "button" class = "left"> 구매하기 </button>
                    <button type = "button" class = "right"> 장바구니 </button>
                </div>
            </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: 800px;
            margin: 0 auto;
            border: 1px solid #777;
            padding: 5px;
        }

        .box .inner {
            float: left;
            width: 25%;
            padding: 5px;
            box-sizing: border-box;
        }

        .wrap {border: 1px solid #777;}

    </style>

</head>
<body>
    
    <h3>과제3</h3>
    
    <div class = "box"> <!-- 바깥 -->
        <div class= "inner"> <!-- 숨김 float: left -->
            <div class= "wrap"> <!-- 안쪽 -->
                <img src= "img/bgimg.png" alt="이미지">
                <div>
                    내용...
                </div>
            </div>
        </div>

        <div class= "inner"> <!-- 숨김 float: left -->
            <div class= "wrap"> <!-- 안쪽 -->
                <img src= "img/bgimg.png" alt="이미지">
                <div>
                    내용...
                </div>
            </div>
        </div>

        <div class= "inner"> <!-- 숨김 float: left -->
            <div class= "wrap"> <!-- 안쪽 -->
                <img src= "img/bgimg.png" alt="이미지">
                <div>
                    내용...
                </div>
            </div>
        </div>

        <div class= "inner"> <!-- 숨김 float: left -->
            <div class= "wrap"> <!-- 안쪽 -->
                <img src= "img/bgimg.png" alt="이미지">
                <div>
                    내용...
                </div>
            </div>
        </div>

        <div class= "inner"> <!-- 숨김 float: left -->
            <div class= "wrap"> <!-- 안쪽 -->
                <img src= "img/bgimg.png" alt="이미지">
                <div>
                    내용...
                </div>
            </div>
        </div>

        <div class= "inner"> <!-- 숨김 float: left -->
            <div class= "wrap"> <!-- 안쪽 -->
                <img src= "img/bgimg.png" alt="이미지">
                <div>
                    내용...
                </div>
            </div>
        </div>

        <div class= "inner"> <!-- 숨김 float: left -->
            <div class= "wrap"> <!-- 안쪽 -->
                <img src= "img/bgimg.png" alt="이미지">
                <div>
                    내용...
                </div>
            </div>
        </div>

        <div class= "inner"> <!-- 숨김 float: left -->
            <div class= "wrap"> <!-- 안쪽 -->
                <img src= "img/bgimg.png" alt="이미지">
                <div>
                    내용...
                </div>
            </div>
        </div>


    </div>
</body>
</html>

'TIL > HTML&CSS' 카테고리의 다른 글

day53-css  (0) 2022.12.26
day52-css  (1) 2022.12.23
day51-css  (0) 2022.12.22
day49-css  (0) 2022.12.20
day48-css(visual studio code)  (0) 2022.12.13
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그