【问题标题】:Positioned element is off when on Safari`在 Safari 上时定位元素关闭
【发布时间】:2021-05-30 02:01:54
【问题描述】:

我有一个带有箭头的按钮,当鼠标悬停时应该会出现并向下移动。在 Chrome 和 Firefox 上它工作正常,但是当我在 Safari 上打开它时,箭头太低——它们的位置不正确。我听说有人指定“top”和:left”,但这似乎对我不起作用。我不知道为什么会这样,但这似乎是由于位置:相对。
代码:

<a class="details" href="#scroll"> <span class="details__border--bottom">More Details</span>
</a>
    
    <div class="top-portion__arrows">
        <span class="top-portion__arrows--hide"></span> 
        <span class="top-portion__arrows--hide"></span>
        <span class="top-portion__arrows--hide"></span>
    </div>



   a.details {
    border: 2.5px solid white;
    padding: 8px 62px;
    padding-top: 11px;
    font-family: 'Roboto', sans-serif;
    font-size: 1.75rem;
    background-color: rgba(214, 128, 0, 0.45);
    color: white;
    cursor: pointer;
    position: relative;
    -webkit-transform: translateX(-50%);
        -ms-transform: translateX(-50%);
            transform: translateX(-50%);
    left: 50%;
    top: 5%;
    z-index: 1;
    display: inline-block;  
}


a.details:hover,
a.details:focus {
    background-color: rgba(231, 147, 21, 0.25);
    -webkit-transition: .5s ease-in;
    -o-transition: .5s ease-in;
    transition: .5s ease-in;
}
a.details:hover,
a.details:focus {
    border: 3.5px solid white;
    -webkit-transition: .15s;
    -o-transition: .15s;
    transition: .15s;
}
a.details:active {
    background-color: rgba(247, 195, 100, 0.75);
    -webkit-transition: .15s;
    -o-transition: .15s;
    transition: .15s;
}

.details__border--bottom {
    display: inline-block;
    padding: 2px 0px 4px;
    margin: 0px 8px 0px;
    position: relative;
}


 .details__border--bottom:before {
    content: '';
    position: absolute;
    width: 100%;
    height: 0px;
    border-bottom: 2.5px solid white;
    bottom: 2px;
    -webkit-transform: scaleX(0);
    -ms-transform: scaleX(0);
    transform: scaleX(0);
    -webkit-transition: -webkit-transform 0.25s ease-in-out;
    -webkit-transition: -webkit-transform 0.45s ease-in-out;
    transition: -webkit-transform 0.45s ease-in-out;
    -o-transition: transform 0.45s ease-in-out;
    transition: transform 0.45s ease-in-out;
    transition: transform 0.45s ease-in-out, -webkit-transform 0.45s ease-in-out;
}

a:hover .details__border--bottom:before,
a:focus  .details__border--bottom:before {
    -webkit-transform: scaleX(1);
    -ms-transform: scaleX(1);
    transform: scaleX(1);
}

.top-portion__arrows {
    position: relative;
    width: 0%;
    top: 10%;
    left: 51.5%;
    
}

.top-portion__arrows .top-portion__arrows--hide {
    opacity: 0;
    display: block;
    width: 120px;
    height: 120px;
    border-bottom: 3px solid white;
    border-right: 3px solid white;
    -webkit-transform: rotate(45deg);
        -ms-transform: rotate(45deg);
            transform: rotate(45deg);
    margin: -85px;
}

a.details:hover + .top-portion__arrows .top-portion__arrows--hide,
a.details:focus + .top-portion__arrows .top-portion__arrows--hide {
    opacity: 1;
    -webkit-animation: animate .65s ease;
            animation: animate .65s ease;
}

.top-portion__arrows .top-portion__arrows--hide:hover .details__border--full,
.top-portion__arrows .top-portion__arrows--hide:focus .details__border--full {
    border: 2.5px solid white;
    -webkit-transition: .2s ease-in;
    -o-transition: .2s ease-in;
    transition: .2s ease-in;
}

@-webkit-keyframes animate {
    0%{
        opacity: 0;
        -webkit-transform: rotate(45deg) translate(-10px,-10px);
                transform: rotate(45deg) translate(-10px,-10px);
    }
    50%{
        opacity: .5;
    }
    100%{
        opacity: 1;
        -webkit-transform: rotate(45deg) translate(0px,0px);
                transform: rotate(45deg) translate(0px,0px);
    }
}

@keyframes animate {
    0%{
        opacity: 0;
        -webkit-transform: rotate(45deg) translate(-10px,-10px);
                transform: rotate(45deg) translate(-10px,-10px);
    }
    50%{
        opacity: .5;
    }
    100%{
        opacity: 1;
        -webkit-transform: rotate(45deg) translate(0px,0px);
                transform: rotate(45deg) translate(0px,0px);
    }
}

【问题讨论】:

  • 您好,如果我的回答对您有所帮助,如果您能接受它作为答案,那将非常有帮助。

标签: html css safari css-position


【解决方案1】:

您可以检测用户是否正在使用一些 javascript 在 safari 上浏览,然后如果他们正在 safari 上浏览,则通过更改 margin-left 和 margin-top 以某种方式设置按钮的样式。下面是检测用户是否在 safari 上的代码:

var ua = navigator.userAgent.toLowerCase(); 
if (ua.indexOf('safari') != -1) { 
  if (ua.indexOf('chrome') > -1) {
    alert("chrome") // Chrome
  } else {
    alert("safari") // Safari
  }
}

编辑:您的完整代码:

var ua = navigator.userAgent.toLowerCase(); 
if (ua.indexOf('safari') != -1) { 
  if (ua.indexOf('chrome') > -1) {
  } else {
document.getElementById("btn1").style.marginTop = "80%";  }
}  

【讨论】:

  • 好吧,我不太喜欢 JS,但我把它放在我的代码中,现在当它在 chrome 上打开时我会收到警报。如何仅更改 safari 的边距?
  • 您可以通过按钮的 id 获取按钮,并且样式使用 JavaScript。首先为按钮分配一个id。将 id="btn1" 添加到按钮。然后,如果在 safari 上浏览,则取出警报并将该代码替换为以下行: document.getElementById("btn1").style.marginTop = "80%";您可以编辑百分比以获得更好的结果并使其适合您的需求。我编辑了答案以包含整个代码。确保将 id 添加到按钮以使代码正常工作。
  • 所以它可以工作,但问题是当我在我的 mac 上进入响应式设计模式并转到 1920 x 1080 时,箭头太高了。我不知道如何解决这个问题。
  • 这完全是一个不同的问题。有了这个问题,您需要根据屏幕宽度来设置按钮的 margin-top 样式。你可以用css做到这一点。 W3 学校有一个关于如何实现这一目标的优秀教程。这是链接:w3schools.com/css/css_rwd_mediaqueries.asp 假设您为按钮分配了一个 btn1 的 id。在媒体查询中使用 #btn1 { 并在 #btn1 中使用 margin-top 属性来设置按钮的样式。
  • 当我在 Xcode 中使用模拟器时,它在我的 Ipad 上也关闭了。它每次都这样做。它在我的 Chrome 模拟器上看起来很正常,但是当它出现在苹果设备上时,它通常是关闭的。位置属性没有响应 IMO
猜你喜欢
  • 2016-09-01
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
相关资源
最近更新 更多