我正在一个表单中构建一个输入,其中包含一个配置文件图片,当单击该图片时,用户可以选择一个新的图像。看起来,通常的做法是使用“file”类型的输入,然后通过各种方式隐藏它。对我来说,设置opacity:0
似乎是唯一合法的选项,因为这将使元素保持在DOM中,并且它仍然会检测点击或焦点。
然而,不具有不透明度的输入也将不具有可见的聚焦环,即使元素在技术上处于焦点中。为了在对焦时显示对焦环,我有哪些选择?先谢谢你了。
.profile-pic {
width: 156px;
height: 156px;
border-radius: 50%;
position: relative;
/* overflow: hidden; */
}
.profile-pic input[type='file'] {
opacity: 0;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: 0;
border: none;
border-radius: 50%;
cursor: pointer;
z-index: 10;
}
.profile-pic__img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 50%;
overflow: hidden;
z-index: 1;
}
.profile-pic__img img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
filter: brightness(0.65);
transition: filter 0.2s ease-in-out;
cursor: pointer;
}
.profile-pic__img img:hover {
filter: brightness(0.5);
}
.profile-pic__text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 90%;
display: flex;
flex-direction: column;
align-items: center;
z-index: 5;
}
.profile-pic__text .fa-camera {
color: #fff;
}
.profile-pic span {
color: #fff;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 400;
line-height: normal;
width: 90%;
}
<div class="profile-pic">
<input type="file" />
<div class="profile-pic__img">
<img src="[TEST_URL]" alt="" />
</div>
<div class="profile-pic__text">
<i class="fas fa-camera"></i>
<span>Click to change photo</span>
</div>
</div>
3条答案
按热度按时间icomxhvb1#
将the
:focus-within
pseudo-class应用于.profile-pic
,并在透明输入具有焦点时给予独特的样式。kmynzznz2#
基本上与Quentin's的答案相同,除了我想保持伪类应用于
input
,所以我使用了box-shadow
而不是outline
。半斤八两。kb5ga3dv3#
我不确定你是否需要一个隐形的元素来拥有一个聚焦环,如果它是隐形的。
您可以向
.profile-pic
元素添加焦点环,因为它实际上是可见的,并且具有视觉交互性。您可以通过向
tabindex="0"
元素添加tabindex="0"
属性来使其可聚焦。然后通过.profile-pic:focus
在CSS中选择它并设计一个对焦环。我知道我还没有真正回答你的问题,但我希望这对你有帮助。