转到http://store.apple.com/us/buy-mac/mac-pro?product=MD878LL/A&step=config,加载一堆项目,然后查看侧栏上扩展的扩展列表。该列表是一个无序列表,其中包含一堆li元素。为了创建附加组件的第二列,它们使那些li的左边距留有足够大的空间以将其移到上方,然后在该行的第一个元素上分配margin-top:-170使其到达顶部。发生了两个我无法复制的截然不同的事情。


当分配负的margin-top时,左边的margin似乎无关紧要,li的第一列不更改位置,第二行不考虑它们的方式
给定li下的所有元素都与上面的li相同,因此当它们将li向上推到第二行时,下面的所有元素也将向上进行,而无需任何进一步的修改


我怎样才能做到这一点?我已经审查了他们的CSS,对此一无所知。如果我编写类似的代码,我可以走得更远,但是当我尝试将其拉高时,它看起来像是this

我的HTML是在模板中生成的,然后由javascript进行修改,所以this当一切都说完了,这就是CSS

.optli{
    width:300px;
    position:relative;
}
.optli li{
    line-height:20px;
    min-height:20px;
}
.optli_right{
    margin-left:320px;
}
.optli_left{
}
.optli_container{
    width:640px;
    height:auto;
}
.optli_container_hidden{
    overflow:hidden;
    background-color:transparent;
}
.optli_container_open{
    overflow:visible;
    background-color:#AAAAAA;
}

最佳答案

编辑:实际解决方案(请参阅注释)

问题是因为OP浮动了每个li中的内容,而没有清除它们。通过将overflow: hidden应用于每个li,问题得以解决。



因为您尚未发布实现的功能示例(使用JavaScript),所以我无法告诉您实现为何无法正常工作,但这可能是由于CSS specificity和覆盖空白所致。

HTML和CSS确实非常简单,您应该可以像这样实现它:

工作示例(http://jsfiddle.net/georeith/7kDyQ/5/

HTML:

<ul id="products">
    <li>product 1</li>
    <li>product 2</li>
    <li>product 3</li>
    <li class="column-2 up">product 4</li>
    <li class="column-2">product 5</li>
    <li class="column-2">product 6</li>
    <a href="#" id="show-more">Show more &raquo;</a>
</ul>


CSS:

#products {
    width: 100px; /* Width of one column */
    border: 1px solid;
    list-style-type: none;
    margin: 0;
    padding: 5px;
    overflow: hidden; /* Hide offset list items */
    float: right;
}

#products.open {
    width: 200px; /* Width of however many columns you need to show */
}

#products li {
    width: 100px; /* Here you specify the width of a column */
    margin: 0;
    padding: 0 5px;
    height: 20px; /* We use equal height here, you will want to change this and calculate the height of each column with JavaScript */
}

#products li.column-2.up {
    margin-top: -60px; /* You should do this with JavaScript in production as you can't guarantee the height depending on your content's length */
}

#products li.column-2 {
    margin-left: 100px; /* (Column width X (Column number - 1)); */
}

#show-more {
    display: block;
    padding: 5px;
    text-align: right;
}


JS(使用jQuery):

var $products = $("#products");
var open = $products.hasClass("open");
$("#show-more").on("click", function(e) {
    e.preventDefault();
    e.stopPropagation();
    if (open) {
        $products.removeClass("open");
        this.innerHTML = "Show more &raquo;"
    } else {
        $products.addClass("open");
        this.innerHTML = "Close &otimes;";
    }
    open = !open;
});


修改以满足您的需求。

10-06 04:23
查看更多