【问题标题】:Issue Getting Div to Hug up close to another让 Div 靠近另一个拥抱的问题
【发布时间】:2015-06-13 13:53:27
【问题描述】:

我在一个容器 Div 中有 6 个 Div。这些 div 必须以某种方式满足客户的需求。我已经为我正在处理的客户网站采用了基本布局,并创建了一个要在此处发布的示例。我有一个常规的 CSS 文件和一个移动 CSS 文件。在移动视图中,Div 将按 1-6 的顺序排列。在常规视图中,Divs 1、3、4 和 5 将向右对齐。 Divs 2 和 6 将向左对齐。我需要 div 6 来拥抱 div 2 的底部,大约 10px 除外。使用我当前的代码,Div 之间有很大的差距,并且 6 被推到页面下方,右侧 Div 的内容越多。所有这些 Div 都具有动态内容,可以使它们增加或减少显示的内容量。我怎样才能让 Div 6 忽略右侧的 Divs 并拥抱 Div 2 而不会搞砸这些在移动设备中如何浓缩和出现? (您只需调整浏览器窗口的大小,以便移动版本显示此代码。)

这是我的 HTML 和 CSS:

/*
exampleCSS.css
*/
#containerDiv {
    width: 500px;
    margin-left: auto;
    margin-right: auto;
    padding: 10px;
}

#div1 {
    border: 1px solid red;
    background-color: red;
    margin-bottom: 10px;
    width: 25%;
    float: right;
}

#div2 {
    border: 1px solid blue;
    background-color: blue;
    margin-bottom: 10px;
    width: 65%;
    float: left;
}

#div3 {
    border: 1px solid green;
    background-color: green;
    margin-bottom: 10px;
    width: 25%;
    float: right;
}

#div4 {
    border: 1px solid orange;
    background-color: orange;
    margin-bottom: 10px;
    width: 25%;
    float: right;
    clear: right;
}

#div5 {
    border: 1px solid purple;
    background-color: purple;
    margin-bottom: 10px;
    width: 25%;
    float: right;
    clear: right;
}

#div6 {
    border: 1px solid pink;
    background-color: pink;
    margin-bottom: 10px;
    width: 65%;
    float: left;
}

/*
exampleCSSMobile.css
*/
#containerDiv {
    width: 100%;
}

#div1 {
    border: 1px solid red;
    background-color: red;
    margin-bottom: 10px;
    width: 100%;
}

#div2 {
    border: 1px solid blue;
    background-color: blue;
    margin-bottom: 10px;
    width: 100%;
}

#div3 {
    border: 1px solid green;
    background-color: green;
    margin-bottom: 10px;
    width: 100%;
}

#div4 {
    border: 1px solid orange;
    background-color: orange;
    margin-bottom: 10px;
    width: 100%;
}

#div5 {
    border: 1px solid purple;
    background-color: purple;
    margin-bottom: 10px;
    width: 100%;
}

#div6 {
    border: 1px solid pink;
    background-color: pink;
    margin-bottom: 10px;
    width: 100%;
}
<!DOCTYPE html>
<html>
    <head>
        <title>Example HTML</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="exampleCSSMobile.css" media="(max-width: 940px)" rel="stylesheet" type="text/css" />
        <link href="exampleCSS.css" media="(min-width: 940px)" rel="stylesheet"  type="text/css" />
    </head>
    <body>
        <div id="containerDiv">
            <div id="div1"><p>Test 1 Lorem Ipsum.</p></div>
            <div id="div2"><p>Test 2 Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim. Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim. Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim. Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim.</p></div>
            <div id="div3"><p>Test 3 Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. </p></div>
            <div id="div4"><p>Test 4 Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim.</p></div>
            <div id="div5"><p>Test 5 Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim.</p></div>
            <div id="div6"><p>Test 6 Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim. Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim. Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim. Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim. Lorem Ipsum. Prion gravida nibh vel velit auctor 
                            aliquet. Aenean solicitudin, lorem quis bibendum 
                            auctor, nisi elit consquat ipsum, nec sagittas sem 
                            nibh id elit. Duis sed odio sit amet nibh vulputate 
                            cursus a sit neque. Suspendisse in orci enim.</p></div>
        </div>
    </body>
</html>

2 到 6 之间的空格示例的图像:

【问题讨论】:

    标签: html css css-float


    【解决方案1】:

    浮动元素将尽可能地向左或向右移动在它原来的位置(这很重要#1)。

    所以这样说:

    我们有 2 个 div

    <div class="div5">div5</div>
    <div class="div6">div6</div>
    
    .div-blue{
        width:100px;
        height:100px;
        background: blue;
    }
    
    .div-red{
        width:50px;
        height:50px;
        background: red;
    }
    

    没有float,它们将是一个在另一个之下

    如果我们把float: rightdiv5定位到div6就行了,当它是div5时,

    /*the lines are just for illustrate*/

    所以如果现在我们 float: left div6 它将尽可能向左移动,“在这一行”(见上面的#1),所以如果 div5换行,div6 会跟上。

    现在让我们在等式中添加其他 div

    <div class="div4">div4</div>
    <div class="div5">div5</div>
    <div class="div6">div6</div>
    
    .div-gree{
        width:150px;
        height:150px;
        background: green;
    
        float:right;
    }
    

    我们有这个

    如果我们将clear: right 设置为div5,我们将强制它采用下面的行div4

    所以你知道为什么会发生。 Here the jsfiddle where I code this

    现在,如何修复它

    只需删除 &lt;div id="div6"&gt; 的浮动并设置 display: inline-block

    像这样:

    #div6 {
        border: 1px solid pink;
        background-color: pink;
        margin-bottom: 10px;
        width: 65%;
    
        /*float: left;*/    /*removed*/
    
        display: inline-block;  /*added*/
    }
    

    这将保持没有float 的元素的正常行为(浮动元素之后的元素将围绕它流动。)。 display: inline-block 是为您的情况维护margindiv2

    HERE A JSFIDDLE EXAMPLE WORKING FOR YOUR CASE

    我希望这对现在和将来都有帮助:)

    【讨论】:

      【解决方案2】:

      为此,您需要一些 javascript:

      window.onload = function(){
          var d6Id = document.getElementById( 'div6' ); 
          var d6distanceTop = d6Id.offsetTop; // Get height above div 6
      
          var d2height = document.getElementById( 'div2' ).clientHeight; // Get height of div 2
      
          var space = d6distanceTop - 30 - d2height; // 30 for padding top and bottom + 10px margin
      
          d6Id.style["margin-top"] = "-"+space+"px";
      }
      

      【讨论】:

        猜你喜欢
        • 2016-01-19
        • 1970-01-01
        • 1970-01-01
        • 2016-02-20
        • 2022-06-28
        • 2020-12-01
        • 2015-07-24
        • 2012-12-25
        • 2020-10-26
        相关资源
        最近更新 更多