我正在尝试为具有相同CSS类的div具有不同的CSS样式,而对于同一类的单个div具有不同的CSS样式。
如果解释令人困惑,这就是我要实现的目标。
.row {
display: flex;
margin: 20px;
}
.number {
width: 32px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
}
.number.bg {
background-color: #e24381;
color: #ffffff;
border-radius: 24px 0 0 24px;
}
.number.bg ~ .number.bg {
border-radius: 0 24px 24px 0;
}
<div class="row">
<div class="number">1</div>
<div class="number bg">2</div>
<div class="number bg">3</div>
<div class="number bg">4</div>
<div class="number">5</div>
<div class="number">6</div>
<div class="number bg">7</div>
</div>
这应该是输出:
可以仅通过 CSS 完成此操作,还是也需要 JavaScript ?
答案 0 :(得分:4)
对于普通的CSS解决方案,您可以使用 pseudo元素为您完成此操作:
将border-radius: 25px
设置为bg
元素,
使用绝对定位在 且堆积在bg
元素后面的伪元素来填充连续bg
元素中的边界空白,并使用负边距进行移位。
请参见下面的演示
.row {
display: flex;
margin: 20px;
}
.number {
width: 32px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
}
.number.bg {
background-color: #e24381;
color: #ffffff;
border-radius: 25px;
position: relative;
}
.number.bg+.bg:before {
content: '';
display: block;
background-color: #e24381;
margin-left: -50%;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: -1;
position: absolute;
}
<div class="row">
<div class="number">1</div>
<div class="number bg">2</div>
<div class="number bg">3</div>
<div class="number bg">4</div>
<div class="number">5</div>
<div class="number">6</div>
<div class="number bg">7</div>
</div>
答案 1 :(得分:3)
这是一个使用一些伪元素但没有JS的想法:
.row {
display: flex;
margin: 20px;
position:relative;
z-index:0;
}
.number {
width: 32px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
}
.number.bg {
background-color: #e24381;
color: #ffffff;
border-radius: 24px;
position:relative;
}
.bg +.bg:before {
content:"";
position:absolute;
z-index:-1;
background:inherit;
top:0;
bottom:0;
left:-50%;
right:50%;
}
body {
background:pink;
}
<div class="row">
<div class="number">1</div>
<div class="number bg">2</div>
<div class="number bg">3</div>
<div class="number bg">4</div>
<div class="number">5</div>
<div class="number">6</div>
<div class="number bg">7</div>
</div>
答案 2 :(得分:0)
如果您想使用动态解决方案,则需要使用JavaScript,因为CSS只能识别紧随其后的( < strong>有关真正智能的纯CSS解决方案,请参见上面的答案。为了性能起见,应优先于此解决方案。 SELECT ROW_NUMBER() OVER () AS rownum
, newColumnName
, decimal_column
, nvarchar_column
FROM OPENJSON(@JSON_String)
WITH (
newColumnName BIGINT '$.id_column',
decimal_column DEC(28,8),
nvarchar_column NVARCHAR(30)
)
)或同级兄弟(+
)。
有关可能的JavaScript解决方案,请参见下文。除了像我一样操作类之外,还可以直接使用以下方法调整CSS:
~
number.style.borderRadius = `24px`;
number.style.borderRadius = `24px 0 0 24px`;
number.style.borderRadius = `0 24px 24px 0`;
window.onload = () => {
[...document.querySelectorAll(".number.bg")].map(number => {
let next = number.nextElementSibling;
let prev = number.previousElementSibling;
if (next !== null) {
if (next.classList.contains('bg') && !prev.classList.contains('left')) {
number.classList.add("left");
}
}
if (next == null || !next.classList.contains('bg')) {
number.classList.add(!prev.classList.contains('bg') ? "round" : "right");
}
});
};
.row {
display: flex;
margin: 20px;
}
.number {
width: 32px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
}
.number.bg {
background-color: #e24381;
color: #ffffff;
border-radius: 0;
}
.number.bg.round {
border-radius: 24px;
}
.number.bg.right {
border-radius: 0 24px 24px 0;
}
.number.bg.left {
border-radius: 24px 0 0 24px;
}