How to position an element dead center in fluid layout with variable height?

Need to position box-inside div dead center to the wrapper div, where the wrapper div's height depends on the sidebar div height. The box-inside div was positioned absolute in relative to the wrapper div, and sets a variable width and height which is respective to the images and content inside it.

This can be accomplish by giving width and height to the box-inside div, but have to do with variable width and height.(the box-inside div have to be in same dimension as the img with padding)

The jsFiddle code here

This is the HTML code:

    <body>
        <div class="wrapper">
            <div class="sidebar"></div>
            <div class="inside-box">
                <img src="badge.gif" />
            </div>
        </div>
    </body>

The CSS

    * {
    margin: 0;
    }

html,body {
    height: 100%;
    }

body {
    background: white;
    display: block;
    font-family: Tahoma, Geneva, sans-serif;
    margin: 0;
    padding: 0;
    }

.wrapper {
    position:relative;
    height: auto;
    width:70%;
    margin: 0 auto ;
    background:green;

    }
.sidebar {
    height: 500px;
    width:30%;
    background: red;
    clear:both;
    }
.inside-box {
    margin: auto;
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;
    background:yellow;
    min-width:275px; min-height:183px;
    padding:10px;
    }

Currently 在这里输入图像描述

Expected Output 在这里输入图像描述


You need to add some extra wrapper elements as follows:

<div class="wrapper">
    <div class="sidebar"></div>
    <div class="inside-box">
        <div class="inside-wrap">
            <div class="inside-cell">
                <div class="content-wrapper">
                    <img src="http://s21.postimg.org/lgwltcynr/image.jpg" />
                    <p>Tyger Tyger burning bright...</p>
                </div>
            </div>
        </div>
    </div>
</div>

and apply the following CSS:

.inside-box {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
.inside-wrap {
    display: table;
    width: 100%;
    height: 100%;
}
.inside-cell {
    display: table-cell;
    width: 100%;
    height: 100%;
    text-align: center;
    vertical-align: middle;
}
.content-wrapper {
    background-color: yellow;
    padding: 10px;
    display: inline-block;
}

The solution depends on using CSS table-cells, which has pretty good support except for older IE browsers.

The .inside-box wrapper is used to recognize the dimensions of the parent block that depend on some of the child elements such as the sidebar.

The .inside-wrap uses display: table to capture the 100% height and width.

The .inside-cell uses display: table-cell and allows the vertical and horizontal alignment to work.

Finally, you need a .content-wrapper to paint the yellow background as you want with some padding.

.content-wrapper is a self-contained unit so you can place floated elements in it without breaking anything.

See demo at: http://jsfiddle.net/audetwebdesign/6XSqD/


Just try with this jsfiddle that is according to expected output & have very few changes to your code . Have a look on it -
jsfiddle

链接地址: http://www.djcxy.com/p/75832.html

上一篇: CSS垂直居中文本。 它为什么如此违反直觉?

下一篇: 如何将元素死点定位在高度可变的流体布局中?