【问题标题】:Transform scale change position element after in hover [duplicate]悬停后变换比例更改位置元素[重复]
【发布时间】:2019-02-20 19:43:09
【问题描述】:

我尝试使用transform:scale(1.2) 来获得图标周围出现圆圈的效果。 transform我加到了.icon-style:hover::after

现在这段代码被注释了,请取消注释这段代码,看看我想要得到什么。

例如,我尝试做这样的事情:click。但是scale换位置圈子。

我读过这个 article,但我现在不知道如何在我的 CSS 中使用 transform-origin

演示:JSFiddle

*{
    background-color: black;
}
.pos-footer {
    position: absolute;
    bottom: 20px;
    right: 30px;
}
.icon-social {
    display: flex;
}
.icon-social-pos {
    position: relative;
}
.icon-style {
    position: relative;
    background-repeat: no-repeat;
    background-position: center; 
    width: 30px;
    height: 30px;
    background-color: rgba(255, 255, 255, 0.25);
    padding: 10px;
    border-radius: 50%;
    transition: background-color .3s ease-in-out;
}
.icon-style:hover {
    background-color: rgba(255, 255, 255, 0.7);
}
.icon-style::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 1;
    width: 100%;
    height: 100%;
    border: 5px solid rgba(255, 255, 255, 0.425);
    border-radius: 50%;
    padding: 7px;
    opacity: 0;
    transition: all .4s ease-in-out;
}
.icon-style:hover::after {
    opacity: 1;
    /* transform: scale(1.2); */
}
.icon-github {
    background-image: url("https://img.icons8.com/windows/30/000000/github.png");
    margin-right: 10px;
}
.icon-linkedin {
    background-image: url("https://img.icons8.com/ios-glyphs/22/000000/linkedin-2.png");
    margin-left: 10px;
}
<div class="pos-footer">
    <div class="icon-social">
        <a href="#">
            <div class="icon-social-pos">
                <div class="icon-style icon-github"></div>
            </div>
        </a>
        <a href="#">
            <div class="icon-social-pos">
                <div class="icon-style icon-linkedin"></div>
            </div>
        </a>
    </div>
</div>

【问题讨论】:

  • 与接受的答案不同,您可以在末尾添加比例以避免更改原点(如重复)

标签: css css-animations css-transforms


【解决方案1】:

首先,悬停时的转换 (.icon-style:hover::after) 会覆盖您的 transform: translate(-50%, -50%);。解决它的一种方法是将翻译也添加到悬停:

.icon-style:hover::after {
    opacity: 1;
    transform: scale(1.2) translate(-50%, -50%);
}

然后你必须在.icon-styletop left; 中定义你的transform-origin

*{
    background-color: black;
}
.pos-footer {
    position: absolute;
    bottom: 20px;
    right: 30px;
}
.icon-social {
    display: flex;
}
.icon-social-pos {
    position: relative;
}
.icon-style {
    position: relative;
    background-repeat: no-repeat;
    background-position: center; 
    width: 30px;
    height: 30px;
    background-color: rgba(255, 255, 255, 0.25);
    padding: 10px;
    border-radius: 50%;
    transition: background-color .3s ease-in-out;
}
.icon-style:hover {
    background-color: rgba(255, 255, 255, 0.7);
}
.icon-style::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    transform-origin: top left;
    z-index: 1;
    width: 100%;
    height: 100%;
    border: 5px solid rgba(255, 255, 255, 0.425);
    border-radius: 50%;
    padding: 7px;
    opacity: 0;
    transition: all .4s ease-in-out;
}
.icon-style:hover::after {
    opacity: 1;
    transform: scale(1.2) translate(-50%, -50%);
}
.icon-github {
    background-image: url("https://img.icons8.com/windows/30/000000/github.png");
    margin-right: 10px;
}
.icon-linkedin {
    background-image: url("https://img.icons8.com/ios-glyphs/22/000000/linkedin-2.png");
    margin-left: 10px;
}
<div class="pos-footer">
    <div class="icon-social">
        <a href="#">
            <div class="icon-social-pos">
                <div class="icon-style icon-github"></div>
            </div>
        </a>
        <a href="#">
            <div class="icon-social-pos">
                <div class="icon-style icon-linkedin"></div>
            </div>
        </a>
    </div>
</div>

【讨论】:

  • 平移后移动刻度以避免改变原点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 2015-05-19
  • 1970-01-01
  • 2018-12-08
  • 2011-10-21
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多