我有一个英雄形象的水平滑块。在iOS(和Safari)上,看起来最后一张图像没有考虑margin-right: $custom-offset;
的margin-right。第二个英雄图像也应该居中,就像第一个英雄图像一样。
当我在DOM中选择第一个元素和flexbox(.contract-slider)时,你会看到以下内容:
当我进入下一个元素时
代码如下:
.custom-slider__container {
width: 100%;
}
.custom-slider {
scroll-behavior: smooth;
display: flex;
gap: var(--custom-spacing-03);
align-items: stretch;
width: 100%;
height: 241.5px;
overflow: auto;
scroll-snap-type: x mandatory;
pointer-events: auto;
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
&::-webkit-scrollbar {
display: none;
}
}
$custom-width: min(320px, 65%);
$custom-offset: calc(50% - ($custom-width / 2));
.custom-contract {
display: flex;
align-items: center;
min-width: $custom-width;
height: 100%;
cursor: pointer;
scroll-snap-stop: always;
scroll-snap-align: center;
&:first-of-type {
margin-left: $custom-offset;
}
&:last-of-type {
margin-right: $custom-offset;
}
.custom-contract__content {
user-select: none;
transition: var(--custom-animation-timing-small) ease all;
transform: scale(0.8);
}
.custom-contract__image {
aspect-ratio: 800 / 500;
}
&--active {
transform: none;
.custom-contract__content {
transform: none;
}
}
}
<div class="custom-slider__container">
<div
ref="sliderContainer"
class="custom-slider"
>
<div
v-for="(customContract, index) in customContracts"
:key="customContract.Id"
:ref="($el) => { customContractRefs[customContract.Id] = $el }"
class="custom-contract"
:class="{
'custom-contract--active':
customContract.driverId === mostCenteredCustomContract
}"
:aria-label="custom-label"
@click="doSomething()"
>
<div class="custom-contract__content">
<img>
</div>
</div>
</div>
</div>
我已经尝试了以下方法
- 将
&:last-of-type
更改为&:last-child
- 在
&:last-of-type
之后添加了一个伪元素:
.contract::after {
margin-right: $offset;
}
以上都不起作用。为什么我的保证金权利没有出现?是因为flexbox在safari/iOS上的工作方式吗?
1条答案
按热度按时间liwlm1x91#
Safari似乎无法将合并滚动捕捉与边距结合起来。
你可以做的是使用
::before
和::after
伪类和一些flexbox技巧向容器添加边距。这意味着您可以放弃SCSS计算。