Larger div centered inside smaller div

前端 未结 3 1227
鱼传尺愫
鱼传尺愫 2021-02-08 00:47

I have a div (#containment) inside another div (#edit). The outer div is smaller. The inner div\'s size will be changed by some jQuery code.

相关标签:
3条回答
  • 2021-02-08 01:14

    Updated Fiddle

    #containment{
        width:500px; height:500px; opacity:0.5;  background:red;
        position : absolute;
        left: 50%;
        top: 50%;
        -webkit-transform: translate(-50%, -50%);
        -moz-transform: translate(-50%, -50%);
        -ms-transform: translate(-50%, -50%);
        transform: translate(-50%, -50%);
    }
    

    By using transform, you're not dependent of the width and height from the parent container. See caniuse for browser support.

    The properties left and top are setting the top-left-edge of the element to the center of the parent. By using translate, it shifts the X- and Y-Position back by 50 percent of its own dimensions.

    You can find more information about transform on developer.mozilla.org - transform

    0 讨论(0)
  • 2021-02-08 01:29

    Yes. You can do that.

    #edit{
        width:200px;
        height:200px;
        overflow:visible;
        margin:200px 0 0 200px;
        background:gray;
        position : relative;
    }
    #containment{
        width:500px;
        height:500px;
        opacity:0.5;
        background:red;
        position : absolute;
        top : -150px;
        left : -150px;
    }
    

    Demo: http://jsfiddle.net/fzAge/2/

    0 讨论(0)
  • 2021-02-08 01:29

    The child <div> should have the following CSS properties

    position: relative;
    width: 500px;
    height: 500px;
    left: 50%;
    margin-left: -250px; /* -(width/2) */
    top: 50%;
    margin-top: -250px; /* -(height/2) */
    

    So if you're changing the child div via jQuery then you must re-calculate the margins...

    JSFiddle

    http://jsfiddle.net/gvee/fzAge/5/

    Initialised CSS

    #edit
    {
        overflow: hidden;
    }
    
    #containment
    {
        background-image: url(http://placekitten.com/500/500);
        position: relative;
        left: 50%;
        top: 50%;
        margin-left: -250px;
        margin-top: -250px;
    }
    

    JQuery

    $('#edit').click(function() {
        var newWidth  = 100 + Math.floor(Math.random() * 500);
        var newHeight = 100 + Math.floor(Math.random() * 500);
        // Resize the child div
        $('#containment').width(newWidth).height(newHeight);
    
        // Let's assign a new background too, eh!
        $('#containment').css({'background-image': 'url(http://placekitten.com/' + newWidth + '/' + newHeight + ')'});
    
        // Now re-calculate the margins...
        var newLeftMargin = (newWidth  / -2);
        var newTopMargin  = (newHeight / -2);
        $('#containment').css({'margin-left': newLeftMargin, 'margin-top': newTopMargin});
    });
    
    0 讨论(0)
提交回复
热议问题