CSS flex:行选择器中的最后一项和第一项

时间:2015-02-06 17:43:18

标签: javascript jquery html css flexbox

我在尝试选择第一行的最后一个元素和Flex容器的最后一行的第一个元素时遇到问题。

我的flex容器是flex-wrap: wrap;,我的所有元素都是flex: auto;,它们有不同的大小,并且通过flex auto我让元素在我的容器上合适,并且我的角元素各有各自转过来。

但是,问题是,我隐藏并显示带有事件的元素(比如点击),我需要在每次更改时设置圆角元素,如果它有一个我可以选择的网格容器按nth-child,因为它永远不会更改列数。但是在flex中每行有不同数量的元素。

我提出了一个Jquery解决方案(链接下来),但我认为它是ogle和big,可能有更聪明的方式或我无法使用的简单选择器。

请帮我提出一个更好的代码,所以不仅仅是我不能很好地利用它。

http://jsfiddle.net/aj1vk0rv/

编辑: 刚改进了一下代码 http://jsfiddle.net/aj1vk0rv/1/

1 个答案:

答案 0 :(得分:1)

我没有看到任何简单的解决方案,但这种方式有点干净:

var fun = function () {
var flex = $(".container");
var cw = flex.width(); // container width
var ch = flex.height(); // container height

var tl = $(".ui-widget:visible:first");
var tr = $(".ui-widget:visible").closestToOffset({left: cw-20, top: -20});
var bl = $(".ui-widget:visible").closestToOffset({left: 0+20, top: ch+20});
// those '20's are to to throw away from the others elements
var br = $(".ui-widget:visible:last");

$(".ui-widget").removeClass(function (index, css) {
    return (css.match(/\ui-corner-\S+/g) || []).join(' ');
});

tl.addClass("ui-corner-tl");
tr.addClass("ui-corner-tr");
bl.addClass("ui-corner-bl");
br.addClass("ui-corner-br");