简体   繁体   中英

Min-height flexbox container

I want to center the content inside container horizontally. I used the min-height & flexbox, but in Internet Explorer this solution doesn't work. I can't use simple height , because:

  • the layout are responsive
  • content can have different lengths

In the case, where the content will be longer that container, the layout will be break (when using height - so I must using min-height...)

I prepare a small demo with 'hack' for the IE: http://jsfiddle.net/pujceaam

HTML

<div id="content" class="flex-center">
<div id="content2">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam fugit eum modi aspernatur dicta, similique. Cupiditate sapiente at facilis tempore assumenda, eaque inventore veritatis aperiam et tenetur aliquam totam quo sequi dolor illo est amet quibusdam repellat, sed eius voluptate, a repudiandae molestiae asperiores! Alias omnis aperiam nam perferendis maiores quae minus repellat similique repellendus dolor quos magnam, labore architecto quasi vitae cumque officiis adipisci exercitationem autem eius fugiat. Velit nesciunt, excepturi neque. Perspiciatis delectus, autem rerum soluta esse, nulla necessitatibus repellat ducimus ex eligendi culpa! Iusto, repellat hic aliquam sit illum tempore, adipisci modi? At doloribus, illum quod perferendis ab dolorum aut, itaque laborum, voluptates nihil ea. Quia molestias tempore repudiandae pariatur laudantium ut velit inventore, consectetur distinctio officia deserunt laborum natus sunt voluptates alias corrupti veniam tempora exercitationem, fugiat aliquam provident soluta. Provident repellat odit totam aliquam culpa distinctio voluptas expedita ipsa deleniti quasi nesciunt qui eius esse iste debitis vitae ad soluta dolorem, amet, optio aperiam ullam. Dolorem ab dolores veniam, dolore, asperiores adipisci enim maiores quas accusantium porro consectetur sapiente officia exercitationem doloremque neque aperiam hic impedit nihil inventore alias ullam voluptatem soluta earum quisquam. Obcaecati, sapiente, at. Obcaecati eius ex, delectus! Atque, ullam et vitae.</div>

CSS

.flex-center {
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -ms-flex-align: center;
    -webkit-align-items: center;
    align-items: center;
    background: rgba(125, 125, 125, .5);
    min-height: calc(100vh - 100px);
}
.va-parent {
    width: 100%;
    display: table;
}
.va-children {
    display: table-cell;
    vertical-align: middle;
}

JS

$(function () {

    //detect IE
    var isIE = (window.navigator.msPointerEnabled) || (document.all && document.addEventListener && !window.atob);

    //old method to vertical align content
    function flexible() {
        var c1 = $('#content'),
            c2 = $('#content2');

        if (c1.height() > c2.height()) {
            c1.addClass('va-parent');
            c2.addClass('va-children');
        }
    }

    //apply old method if IE
    if (isIE) flexible();

});

But I don't know if it's a good solution?
Or maybe someone has another idea?

EDIT: In content can be grids, images, tables, lists etc. content - not only a text :)

Truncate String with Ellipsis

.truncate {
  width: 250px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM