问题
I'm styling a box with a simple gradient background and overlaying it with an SVG background image, like this:
HTML:
<div class="card-image-none">
<img src="/graphics/16-9.png" class="w-100 img-fluid">
</div>
CSS:
.card-image-none {
height: auto;
background-image: linear-gradient(to bottom, rgba(0,0,0,0.05) 0%,rgba(0,0,0,0.2) 100%);
}
.card-image-none:after {
content: "";
display: block;
position: absolute;
top: 0;
left: 0;
background-image: url('/fontawesome/svgs/solid/quote-right.svg');
background-size: 40%;
background-position: 50% 50%;
background-repeat: no-repeat;
width: 100%;
height: 100%;
opacity: 0.1;
}
BTW, image 16-9.png is a transparent box that's used to maintain a specific (and responsive) dimension to the box. The problem is that the overlay image defined in card-image-none:after doesn't stay confined within the parent box because of height: 100%. It can sometimes look like this:
But if I add transform: scale(1); to card-image-none, then it stays confined within the parent box, like this:
.card-image-none {
height: auto;
background-image: linear-gradient(to bottom, rgba(0,0,0,0.05) 0%,rgba(0,0,0,0.2) 100%);
transform: scale(1);
}
It works as I want when I include transform: scale(1), and I'm not sure why or if there's a better way to do this without transform.
回答1:
It looks like it's because you didn't add a position property to your main element .card-image-none.
Because you are using absolute positioning for your :after element, it will position itself to the nearest element with a position set.
Just add position: relative to the .card-image-none
.card-image-none {
position: relative;
height: auto;
background-image: linear-gradient(to bottom, rgba(0,0,0,0.05) 0%,rgba(0,0,0,0.2) 100%);
}
A little more background to the specific query:
Adding transform: scale(0) worked because transform creates a new positioning context (very last bullet on the page), just like adding position: relative
来源:https://stackoverflow.com/questions/61840695/how-do-i-make-after-box-same-size-as-parent-and-responsive-transform-scale1