我有以下代码片段,其中有2个div,一个接一个。在.circle
我有一个悬停效果,其中边框在图像周围扩展。然后第二个div在这个下面“流动”,并将保留其他内容。
我只希望悬停效果出现在img
周围。为实现此目的,我设置了p{position: absolute;}
,因此边框不会包含p
标记。
问题是,如何在2个div之间保持一致的边距?
注意:
img
下会有多少行文字,所以硬编码.circle{margin-top: ?px}
不是一个选项。p
标记悬停时,我希望悬停效果仍然触发。
.circle {
display: inline-block;
margin: 40px 20px;
vertical-align: middle;
-webkit-transform: translateZ(0);
transform: translateZ(0);
box-shadow: 0 0 1px rgba(0, 0, 0, 0);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-moz-osx-font-smoothing: grayscale;
position: relative;
cursor: pointer;
}
.circle > p {
position: absolute;
display: block;
width: 100%;
margin-top: 20px;
text-align: center;
}
.circle>img {
border-radius: 50%;
width: 100%;
height: auto;
}
.circle:before {
content: '';
position: absolute;
border: #54314E solid 4px;
top: 0;
right: 0;
bottom: 0;
left: 0;
-webkit-transition-duration: 0.3s;
transition-duration: 0.3s;
-webkit-transition-property: top, right, bottom, left;
transition-property: top, right, bottom, left;
border-radius: 50%;
}
.circle:hover:before,
.circle:focus:before,
.circle:active:before,
.circle.active:before {
top: -15px;
right: -15px;
bottom: -15px;
left: -15px;
}
#underDiv {
display: block;
width: 100px;
height: 100px;
background-color: #f00;
}
<div class="circle">
<img src="http://placehold.it/150x150">
<p>OUR SERVICE PROMISE</p>
</div>
<div id="underDiv"><div>
答案 0 :(得分:1)
从圈子中删除p
标记,然后添加另一个包裹它们的div。根据该包装器的悬停状态触发动画
.circle {
display: inline-block;
margin: 40px 20px 0 20px;
vertical-align: middle;
-webkit-transform: translateZ(0);
transform: translateZ(0);
box-shadow: 0 0 1px rgba(0, 0, 0, 0);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-moz-osx-font-smoothing: grayscale;
position: relative;
cursor: pointer;
}
.circle>img {
border-radius: 50%;
width: 100%;
height: auto;
}
.circle:before {
content: '';
position: absolute;
border: #54314E solid 4px;
top: 0;
right: 0;
bottom: 0;
left: 0;
-webkit-transition-duration: 0.3s;
transition-duration: 0.3s;
-webkit-transition-property: top, right, bottom, left;
transition-property: top, right, bottom, left;
border-radius: 50%;
}
.circle-wrap:hover .circle:before,
.circle-wrap:focus .circle:before,
.circle-wrap:active .circle:before,
.circle-wrap.active .circle:before {
top: -15px;
right: -15px;
bottom: -15px;
left: -15px;
}
#underDiv {
display: block;
width: 100px;
height: 100px;
background-color: #f00;
}
&#13;
<div class="circle-wrap">
<div class="circle">
<img src="http://placehold.it/150x150">
</div>
<p>OUR SERVICE PROMISE</p>
</div>
<div id="underDiv"><div>
&#13;
答案 1 :(得分:1)
我认为可能有更好的设置来处理这种效果,但这是一个解决方案,给出了当前的设置。
在圈子的:hover
上添加一些额外的margin-bottom
来计算边框圈增长的额外金额。例如,您的圈子的半径增长15px,因此margin-bottom
上的.circle
增加15px
。然后将transition
添加到margin-bottom
上的.circle
进行转换,添加与圈边框增长相同的速度。
.circle {
display: inline-block;
margin: 40px 20px;
vertical-align: middle;
-webkit-transform: translateZ(0);
transform: translateZ(0);
box-shadow: 0 0 1px rgba(0, 0, 0, 0);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-moz-osx-font-smoothing: grayscale;
position: relative;
cursor: pointer;
-webkit-transition-duration: 0.3s;
transition-duration: 0.3s;
-webkit-transition-property: margin-bottom;
transition-property: margin-bottom;
}
.circle > p {
position: absolute;
display: block;
width: 100%;
margin-top: 20px;
text-align: center;
}
.circle>img {
border-radius: 50%;
width: 100%;
height: auto;
}
.circle:before {
content: '';
position: absolute;
border: #54314E solid 4px;
top: 0;
right: 0;
bottom: 0;
left: 0;
-webkit-transition-duration: 0.3s;
transition-duration: 0.3s;
-webkit-transition-property: top, right, bottom, left;
transition-property: top, right, bottom, left;
border-radius: 50%;
}
.circle:hover {
margin-bottom: 55px;
}
.circle:hover:before,
.circle:focus:before,
.circle:active:before,
.circle.active:before {
top: -15px;
right: -15px;
bottom: -15px;
left: -15px;
}
#underDiv {
display: block;
width: 100px;
height: 100px;
background-color: #f00;
}
&#13;
<div class="circle">
<img src="http://placehold.it/150x150">
<p>OUR SERVICE PROMISE</p>
</div>
<div id="underDiv"><div>
&#13;
答案 2 :(得分:1)
只需将圆圈包裹在一个新元素中,然后使用新元素在圆圈周围绘制圆环,然后在将鼠标悬停在包裹圆圈和段落的父级上方时触发圆环展开。
.circle {
display: inline-block;
margin: 40px 20px;
vertical-align: middle;
-webkit-transform: translateZ(0);
transform: translateZ(0);
box-shadow: 0 0 1px rgba(0, 0, 0, 0);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-moz-osx-font-smoothing: grayscale;
cursor: pointer;
}
.circle > p {
display: block;
width: 100%;
text-align: center;
margin: 40px 0 0;
}
.circle>div {
position: relative;
}
.circle>div:before {
content: '';
position: absolute;
border: #54314E solid 4px;
top: 0;
right: 0;
bottom: 0;
left: 0;
-webkit-transition-duration: 0.3s;
transition-duration: 0.3s;
-webkit-transition-property: top, right, bottom, left;
transition-property: top, right, bottom, left;
border-radius: 50%;
z-index: 1;
}
.circle>div>img {
border-radius: 50%;
width: 100%;
height: auto;
}
.circle:hover > div:before {
top: -15px;
right: -15px;
bottom: -15px;
left: -15px;
}
#underDiv {
display: block;
width: 100px;
height: 100px;
background-color: #f00;
}
&#13;
<div class="circle">
<div>
<img src="http://placehold.it/150x150">
</div>
<p>OUR SERVICE PROMISE</p>
</div>
<div id="underDiv"><div>
&#13;