2

我有一个 inline-block 容器,还有其他几个 inline-block 元素,如下所示: 作为工作

容器是蓝色背景,红色是元素。一切正常,直到元素太多并且内联块必须扩展: 由于不工作

inline-block 容器扩展到整个身体的宽度,但我希望它缩小到其内容的宽度。纯CSS可以做到这一点吗?有点像这样: 因为我想让它工作

JSFiddle

        #container {
            background: blue;
            display: inline-block;
        }

        .box {
            background: red;
            display: inline-block;
            width: 100px;
            height: 100px;
        }

哦,容器不能是固定宽度:(

4

1 回答 1

3

我相信您正在寻找的是这样的东西只有当另一个盒子可以根据窗口大小适合/不适合时,它才会调整容器的大小。据我所知,此功能目前在纯 CSS 中是不可能的,因为 CSS 无法根据动态内容按比例缩小(框的整个宽度)

CSS

#container {
    background:blue;
    text-align: left;
    font-size:0;
    display: inline-block;
    padding-left:5px;
    padding-bottom:5px;
    /* for ie6/7: */
    *display: inline;
    zoom:1;
}
.box {
    display:inline-block;
    background:red;
    height:50px;
    margin-top:5px;
    margin-right:5px;
    width: 100px;
    height: 100px;
}

和纯javascript

var boxAmount = 0;
var newWidth = 0;
setNewWidth();

window.onresize = function () {
    setNewWidth();
};

function setNewWidth() {
    var outerContainer = document.getElementsByTagName('body')[0];
    var outerWidth = outerContainer.offsetWidth;
    var box = document.getElementsByClassName('box');
    var boxWidth = box[0].offsetWidth;
    var innerContainer = document.getElementById('container');
    var containerPadding = parseInt(window.getComputedStyle(innerContainer, null).getPropertyValue('padding-left'), 10) 
    +  parseInt(window.getComputedStyle(innerContainer, null).getPropertyValue('padding-right'), 10);

    boxAmount = (outerWidth - containerPadding) / (boxWidth + containerPadding);
    boxAmount = Math.floor(boxAmount);
    if (boxAmount <= box.length) {
        newWidth = boxAmount * boxWidth + boxAmount * 5;
    }
    innerContainer.style.width = newWidth + 'px';
}

如果盒子周围有另一个容器,这是一个版本

这里有一个 jQuery 版本供有兴趣的人使用

于 2013-08-05T23:21:41.857 回答