关于css:div:折叠边框+更改悬停时边框的颜色+边框半径?


div: collapse border + change the color of the border on hover + border radius?

这个接缝很容易,但是我还没有找到任何办法。我有3个div(但解决方案必须适用于n个div),如以下模式所示:

| div 1 || div 2 || div 3 |

例如:

我想要这样的普通股利:

enter image description here

在特定div的悬停上,我希望此div的所有边框具有另一种颜色,如下所示:

enter image description here

最后,我不能做的是,我想要这里显示的角落:

enter image description here

我要首先破坏所有边界。与border-collapse:collapse一样容易。但是之后我还想更改悬停时整个单元格的边框颜色(顶部+左侧+底部+右侧边框)。边框也很容易:1px DOUBLE#000。但最后(在这一点上我要阻止)我还希望在div 1的左上角和左下角以及在div 3的右上角和右下角有一个圆角

看起来像border-collapse:collapse他们是不可能有圆角的...所以需要找到另一个解决方案

编辑:我尝试使用相对位置和z-index,它的工作效果更好!但是我需要知道如何将第二个div左移1px,将第三个div左移2像素,...以及将n div左移n-1像素?


实际上,这比您想象的要复杂一些。

border-collapse适用于表,而不适用于所有块元素。当然,您仍然可以使它与display:table / table-cell一起使用。
但是,由于折叠后的边框将属于第一个元素,因此悬停仍会存在缺陷-如果将鼠标悬停在第二个或第三个元素上,则左边框将保持不变。

直到那时,缺乏边界半径才使边界崩溃。

我想您将不得不采用其他方法。我可能会选择内联块(或可能使用"老式"浮点数来避免空格问题)的元素,其边界重叠1px,并在:hover中更改z-index,以将悬停的元素带到并确保其边框是显示的边框。


这是解决两个问题的解决方案:

  • 四舍五入。这使用first-of-typelast-of-type以及border-radius属性。
  • 重叠边界。

对于后者,发生的是创建右边框并更改了颜色,而不是使用z索引。然后,下一个li的左边框被清空。通过使用相邻的兄弟选择器(+)来清空下一个li

这是一个Codepen:http://codepen.io/anon/pen/JoyGxJ


是你想要的吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
.container {
  display: table;
}
.container > div {
  display: table-cell;
  width: 80px;
  height: 40px;
  text-align: center;
  vertical-align: middle;
  border-top: solid 1px gray;
  border-bottom: solid 1px gray;
  border-left: solid 1px gray;
}
.container > div:first-child {
  border-top-left-radius: 8px;
  border-bottom-left-radius: 8px;
}
.container > div:last-child {
  border-right: solid 1px gray;
  border-top-right-radius: 8px;
  border-bottom-right-radius: 8px;
}
.container > div:hover {
  background-color: lightgray;
  border-color: red;
  border-right: solid 1px red;
}
1
  123456


不太清楚您想要什么,而只是尝试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.one {
    width: 80px;
    height: 40px;
    display: table-cell;
    border-collapse: collapse;
    border: double 1px black;
}
.one:first-child {
    border-top-left-radius: 15px;
    border-bottom-left-radius: 15px;
}
.one:last-child {
    border-top-right-radius: 15px;
    border-bottom-right-radius: 15px;
}
1