>  기사  >  웹 프론트엔드  >  CSS 마진에 대한 포괄적인 이해

CSS 마진에 대한 포괄적인 이해

高洛峰
高洛峰원래의
2017-02-16 13:36:231837검색

1. 여백은 음수일 수 있습니다.

박스 모델에서는 콘텐츠 영역의 너비/높이, 패딩 및 테두리가 음수일 수 없습니다. 단, 여백은 예외이므로 음수일 수 있습니다.

음수 마진 값을 사용하는 기술에 대해 잘 모르겠습니다. 나중에 기회가 생기면 더 추가하겠습니다. 여기에 마진-왼쪽의 음수 값이 결합됩니다. DOM 구조를 변경하지 않는 유동적인 레이아웃을 얻기 위해 플로팅합니다.

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <title>不改变DOM结构的流体布局</title>  
        <style>  
            .container {   
                width:600px;   
                margin-left: auto;   
                margin-right: auto;   
                background-color: orange;   
                font-size: 16px;   
                line-height: 1.5;   
            }   
  
            .box1 {   
                width:100%;   
                float:left;   
            }   
  
            .box2 {   
                margin-right: 220px;   
                padding-left: 20px;   
            }   
  
            img {   
                width:200px;   
                float:left;   
                margin-left:-200px;   
            }   
  
            .clearfix:after {   
                content: "";   
                display: table;   
                clear: both;   
            }   
  
            .clearfix {   
                *zoom: 1;   
            }   
  
        </style>  
    </head>  
    <body>  
        <div class="container clearfix">  
            <div class="box1">  
                <div class="box2">  
                <h3>不改变DOM位置的流体布局</h3>  
                <p>假如有一段文本和一幅图像,在DOM节点中,文本在前,图像在后,怎么能把图像定位到右边呢?</p>  
                <p>通常的做法是,调换DOM节点中图像与文本的位置,让图像在前,文本在后,然后将图像浮动到右边即可。</p>  
                <p>但这样改变DOM节点顺序始终不妥,还有什么更好的方法呢?</p>  
                <p>下面就介绍一种新的思路来完成布局。</p>  
                <ul>  
                    <li>将文本用div包起来,定义为box1;现在的结构是一个box1和一个img。</li>  
                    <li>将box1宽度设为100%,左浮动;将img设置一个宽度,也左浮动,然后margin-left设为负的宽度值;此时图像就定位到文本的右边啦。</li>  
                    <li>但是有一个问题,图像盖住了文本内容,这可怎么办?</li>  
                    <li>重点来了,在box1中增加一个box2,box2把文本全部包起来,然后margin-right设为图像的宽度(+额外的间距),这样就解决问题啦!</li>  
                </ul>  
                </div><!--关闭box2-->  
            </div><!--关闭box1-->  
            <img src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg" alt="a picture" style="width:200px;height:300px" />  
        </div><!--关闭container-->  
    </body>  
</html>

2. 여백의 백분율 값

여백 속성의 값이 백분율인 경우 항상 상위 요소의 너비를 기준으로 계산됩니다.

오랫동안 저를 괴롭혔던 아래 데모를 한번 봐주세요. . . 다만 너무 늦게 알았을 뿐이고, 너무 이야기하면 눈물이 날 것 같았다. . .

rree

3. 세로 방향의 여백 병합

이 문제는 종종 혼란을 야기하지만 세로 방향의 여백은 한 문장만 병합된다는 점만 기억하면 됩니다. 밀접 접촉자만 병합됩니다.

세로 방향의 여백 병합은 인접한 요소에서 발생하면 실제로 이해하기 쉽지만 상위 요소와 하위 요소 사이에서 발생하면 조금 이상합니다.

예를 살펴보겠습니다.

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <title>margin的百分数值</title>  
        <style>  
            .container {   
                width: 500px;   
                height: 300px;   
                margin: 50px auto;   
                background-color: orange;   
                border: 1px solid black;   
            }   
  
            .box {   
                width: 250px;   
                height: 150px;   
                margin-left: auto;   
                margin-right: auto;   
                background-color: cyan;   
            }   
  
            .box1 {   
                margin-top: 75px;   
                margin-bottom: 75px;   
                padding: 5px;   
            }   
               
            .box2 {   
                margin-top: 25%;   
                margin-bottom: 25%;   
                padding: 5px;   
            }   
        </style>  
    </head>  
  
    <body>  
        <div class="container">  
            <div class="box box1">  
                <p>父元素的高度为300px,子元素的高度为150px,只要margin-top和margin-bottom都为75px,这个盒子就能垂直居中。</p>  
                <p>OK,居中啦!!!</p>  
            </div>  
        </div>  
        <div class="container">  
            <div class="box box2">  
                <p>既然子元素的高度是父元素高度的50%,那么只要margin-top和margin-bottom都为25%,应该也能垂直居中。</p>  
                <p>额,这什么鬼?说好的居中呢?</p>  
            </div>  
        </div>  
    </body>  
</html>

세로 방향의 여백 병합을 제거하는 방법: 상위 요소에 테두리나 패딩을 추가하여 상위 요소의 여백 사이의 긴밀한 접촉을 끊습니다. 그리고 자식 요소.

마진 병합 규칙:

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <title>垂直方向上的margin合并</title>  
        <style>  
            .container {   
                width: 500px;   
                height: 300px;   
                margin: 50px auto;   
                background-color: orange;   
            }   
  
            .box {   
                width: 300px;   
                height: 200px;   
                margin-left: auto;   
                margin-right: auto;   
                background-color: cyan;   
                margin-top: 25px;   
                padding: 5px;   
            }   
  
            .border {   
                border: 1px solid black;   
                /*padding: 1px;*/   
            }   
        </style>  
    </head>  
  
    <body>  
        <div class="container">  
            <div class="box">  
                <p>父元素的margin-top为50px,子元素的margin-top为25px;</p>  
                <p>咦,子元素的margin-top呢?为什么都顶到父元素上边界了?</p>  
                <p>额,因为父元素与子元素的margin-top亲密接触了呀,所以它们合并在一起了啊。</p>  
            </div>  
        </div>  
        <div class="container border">  
            <div class="box">  
                <p>可是我就是想让子元素距离父元素的上边界25px啊,我不想让它们合并呀。</p>  
                <p>很简单,给父元素加个边框,它们就无法亲密接触了,就不会合并了啊。</p>  
                <p>或者给父元素设置padding也是可以的喔。</p>  
            </div>  
        </div>  
    </body>  
</html>

1. 두 마진은 모두 양수이며 더 큰 절대값을 취합니다.

2. 음수인 경우

3. 두 여백 모두 음수이므로 절대값이 더 큽니다.

위의 CSS 마진에 대한 포괄적인 이해는 편집자가 공유한 모든 내용이므로 참고가 되기를 바라며, 또한 모든 분들이 PHP 중국어 웹사이트를 응원해 주시길 바랍니다.

더 많은 CSS 마진 종합 정보 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.