在卡片上应用负边距以实现砌体效果
Applying negative margins on cards to achieve masonry effect
我正在尝试实现如下所示的砌体效果:
如您所见,此布局中间的卡片 60px
高于周围的卡片。
为此,我尝试将 -60px margin
添加到中心卡片中,但它不起作用。
我看不出有什么方法可以使用 :nth-child(2n+1)
之类的东西来完成这项工作,例如,第 5 张牌不符合 css 规则。
这是解决它的最佳方法还是可以通过 css 网格实现,没有负边距?
.section {
padding: 100px 0;
}
.card{
max-width: 320px;
margin: 0 auto;
margin-bottom: 32px;
}
.card__image {
width: 100%;
height: 467px;
background-size: cover;
background-repeat: no-repeat;
}
/* have tried below */
.card:nth-child(2){
margin-top: -60px;
}
.section__card--2{
margin-top: -60px;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<section class="section">
<div class="container">
<div class="row">
<div class="col-12 col-md-4 section__card section__card--1">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--2">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--3">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--4">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--5">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--6">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
</div>
</div>
</section>
您的尝试非常接近。最好的办法是将行适当地分成 CSS 行(因为您已经使用 col-md-4
定义了每行 3 张图像的规则)。
因此,在您的 HTML 中,对于每 3 张图像,您可以使用自定义 class 将它们分成几行(例如:section__row
)。按照您的风格,您只需添加:
.section__row > .section__card:nth-child(2){
margin-top: -60px;
}
最终代码:
.section {
padding: 100px 0;
}
.card{
max-width: 320px;
margin: 0 auto;
margin-bottom: 32px;
}
.card__image {
width: 100%;
height: 467px;
background-size: cover;
background-repeat: no-repeat;
}
.section__row > .section__card:nth-child(2){
margin-top: -60px;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<section class="section">
<div class="container">
<div class="row section__row">
<div class="col-12 col-md-4 section__card section__card--1">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--2">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--3">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
</div>
<div class="row section__row">
<div class="col-12 col-md-4 section__card section__card--4">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--5">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--6">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
</div>
</div>
</section>
应用 margin-top
属性 到 .section__card
class.
.section {
padding: 100px 0;
}
.card {
max-width: 320px;
margin: 0 auto;
margin-bottom: 32px;
}
.card__image {
width: 100%;
height: 467px;
background-size: cover;
background-repeat: no-repeat;
}
/* have tried below */
.section__card:nth-child(2) {
margin-top:-60px;
}
.section__card:nth-child(5) {
margin-top:-60px;
}
.section__card--2 {
margin-top: -60px;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<section class="section">
<div class="container">
<div class="row">
<div class="col-12 col-md-4 section__card section__card--1">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--2">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--3">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--4">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--5">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--6">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
</div>
</div>
</section>
我正在尝试实现如下所示的砌体效果:
如您所见,此布局中间的卡片 60px
高于周围的卡片。
为此,我尝试将 -60px margin
添加到中心卡片中,但它不起作用。
我看不出有什么方法可以使用 :nth-child(2n+1)
之类的东西来完成这项工作,例如,第 5 张牌不符合 css 规则。
这是解决它的最佳方法还是可以通过 css 网格实现,没有负边距?
.section {
padding: 100px 0;
}
.card{
max-width: 320px;
margin: 0 auto;
margin-bottom: 32px;
}
.card__image {
width: 100%;
height: 467px;
background-size: cover;
background-repeat: no-repeat;
}
/* have tried below */
.card:nth-child(2){
margin-top: -60px;
}
.section__card--2{
margin-top: -60px;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<section class="section">
<div class="container">
<div class="row">
<div class="col-12 col-md-4 section__card section__card--1">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--2">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--3">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--4">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--5">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--6">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
</div>
</div>
</section>
您的尝试非常接近。最好的办法是将行适当地分成 CSS 行(因为您已经使用 col-md-4
定义了每行 3 张图像的规则)。
因此,在您的 HTML 中,对于每 3 张图像,您可以使用自定义 class 将它们分成几行(例如:section__row
)。按照您的风格,您只需添加:
.section__row > .section__card:nth-child(2){
margin-top: -60px;
}
最终代码:
.section {
padding: 100px 0;
}
.card{
max-width: 320px;
margin: 0 auto;
margin-bottom: 32px;
}
.card__image {
width: 100%;
height: 467px;
background-size: cover;
background-repeat: no-repeat;
}
.section__row > .section__card:nth-child(2){
margin-top: -60px;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<section class="section">
<div class="container">
<div class="row section__row">
<div class="col-12 col-md-4 section__card section__card--1">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--2">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--3">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
</div>
<div class="row section__row">
<div class="col-12 col-md-4 section__card section__card--4">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--5">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--6">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
</div>
</div>
</section>
应用 margin-top
属性 到 .section__card
class.
.section {
padding: 100px 0;
}
.card {
max-width: 320px;
margin: 0 auto;
margin-bottom: 32px;
}
.card__image {
width: 100%;
height: 467px;
background-size: cover;
background-repeat: no-repeat;
}
/* have tried below */
.section__card:nth-child(2) {
margin-top:-60px;
}
.section__card:nth-child(5) {
margin-top:-60px;
}
.section__card--2 {
margin-top: -60px;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<section class="section">
<div class="container">
<div class="row">
<div class="col-12 col-md-4 section__card section__card--1">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--2">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--3">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--4">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--5">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
<div class="col-12 col-md-4 section__card section__card--6">
<div class="card">
<div class="card__image" style="background-image: url( https://i.picsum.photos/id/219/200/300.jpg?hmac=RGnJfbO2380zLCFSj2tm_q0vW0wtw67d0fhWHX2IoDk ); "></div>
</div>
</div>
</div>
</div>
</section>