Веб-контент неправильно отображается в Safari - PullRequest
0 голосов
/ 29 марта 2020

После создания быстрого сайта я замечаю, что изображения либо не отображаются, либо неправильно отформатированы из Safari на моих iPhone и Ma c.

Например, я ожидаю assets/images/showza под @keyframes animate в index.css для отображения на 65% ширины устройства, которая работает на Chrome для Windows 10, но в Safari на самом деле кажется завышенной до 100%.

I Предположим, я ищу какие-либо зависимости Safari, которые я мог пропустить, я не привык к несоответствиям веб-разработки.

body, html {
    height: 100%;
    margin: 0;
}

.container{
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100vh;
    animation: animate 16s ease-in-out infinite;
    background-size: cover;
}

.outer{
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100vh;
    background: rgba(0,0,0,0.15)
}

@keyframes animate{
    
    0%,100%{
        background-image: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png"), url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_1.JPG?raw=true");
        height: 100%;
        
        -webkit-appearance: textfield;

        background-position: center;
        background-repeat: no-repeat;
        background-size: 65%, cover;
    }
    33%{
        background-image: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png"), url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_2.JPG?raw=true");
    }
    66%{
        background-image: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png"), url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_3.jpg?raw=trueg");
    }
}

.image {
    border-radius: 100px;
}

.itemDiv {
    height: 45px;
}

.item {
    color: white;
    font-family: Helvetica;
    font-weight: bold;
    font-style: normal;
    font-size: 30px;
}

.menuItem {
    color: white;
    font-family: Helvetica;
    font-weight: bold;
    font-style: normal;
    font-size: 40px;
}

.topnav {
    overflow: hidden;
    background-color: transparent;

}
  
.topnav a {
    float: left;
    display: block;
    color: black;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
    font-size: 17px;
}

.topnav a:hover {
    background-color: black;
    border-radius: 100px;
}

.topnav a.active {
    background-color: #4CAF50;
    color: white;
}

.topnav .icon {
    display: none;
}

@media screen and (max-width: 1200px) {
    .topnav a:not(:first-child) {display: none;}
    .topnav a.icon {
        float: right;
        display: block;
    }
}

@media screen and (max-width: 1200px) {
    .topnav.responsive {position: relative;}
    .topnav.responsive .icon {
        position: absolute;
        right: 0;
        top: 0;
    }
    .topnav.responsive a {
        float: none;
        display: block;
        text-align: left;
    }
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" lang="en">
  <title>
      showzatheband
  </title>
  <link rel='icon' href='favicon.ico' type='image/x-icon'>
  <link href="index.css" rel="stylesheet" type="text/css"/>
  <body class="body">
    <div class="container">
			<div class="outer">
		
          <div class="topnav" id="myTopnav">
            <a>
              <form name="myform" action="index.html" method="POST">
                <input type="image" class="image" src="assets/images/showzafavcon.jpg" alt="showza_icon" width="125" height="125">
              </form>
            </a>
            <div class="itemDiv"></div>
            <a href="#news">
              <div class="item">
                live dates
              </div>
            </a>
            <a href="#news">
              <div class="item">
                gallery
              </div>
            </a>
            <a href="#news">
              <div class="item">
                news
              </div>
            </a>
            <a href="javascript:void(0);" class="icon" onclick="myFunction()">
              <i class="fa fa-bars">
              <div class="menuItem">
                menu
              </div>
              </i>
            </a>
				</div>
			</div>
		</div>
  </body>
</html>

<script>
function myFunction() {
  var x = document.getElementById("myTopnav");
  if (x.className === "topnav") {
    x.className += " responsive";
  } else {
    x.className = "topnav";
  }
}
</script>

1 Ответ

1 голос
/ 31 марта 2020

Итак, основная проблема заключается в попытке анимировать два фоновых изображения. Я не нашел какой-либо известной ошибки с «Safari» + «несколько изображений», но, как мы видим, она работает не так, как ожидалось. Если вы удалите lo go из этой анимации, это будет работать в Safari, но это не то, что я бы назвал «приемлемым».

Примерно так:

66% {
  background-image: url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_3.jpg?raw=trueg");
}

Некоторые другие указатели:
1. Анимируйте только то, что меняется, и переместите общий материал в главный селектор css. Значения, которые вы добавляете в 0 и 100%, будут применяться только там, но я думаю, что вы хотите, чтобы они были общими для всех состояний. Так что лучше в .container

: (

.container{
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100vh;
    animation: animate 16s ease-in-out infinite;
    background-size: cover;
}
@keyframes animate{
    0%,100%{
        background-image: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png"), url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_1.JPG?raw=true");
        height: 100%;
        -webkit-appearance: textfield;
        background-position: center;
        background-repeat: no-repeat;
        background-size: 65%, cover;
    }
    33%{
        background-image: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png"), url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_2.JPG?raw=true");
    }
    66%{
        background-image: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png"), url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_3.jpg?raw=trueg");
    }
}

:)

.container{
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    animation: animate 16s ease-in-out infinite;
    background-size: cover;
    height: 100%;
    -webkit-appearance: textfield;
    background-position: center;
    background-repeat: no-repeat;
    background-size: 65%, cover;
}
@keyframes animate{
    0%,100%{
        background-image: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png"), url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_1.JPG?raw=true");
    }
    33%{
        background-image: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png"), url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_2.JPG?raw=true");
    }
    66%{
        background-image: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png"), url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_3.jpg?raw=trueg");
    }
}
Якоря должны переносить div s, когда используется только текст. Это мой уклон, но ваш HTML получил этот дивит.

: (

<a href="#news">
  <div class="item">
    live dates
  </div>
</a>

:)

<a href="#news" title="Some helpful title" class="item">live dates</a>

или

<a href="#news" title="Some helpful title"><span class="item">live dates</span></a>
Кроме того, запустите ваш CSS через какой-либо вид автоприставки в надежде на лучшую кросс-браузерную поддержку. Я фанат: https://autoprefixer.github.io/

Я перестроил это так, как сделал бы это, что включало в себя все до некоторой степени. Надеюсь, это поможет вам на вашем пути. Это полностью предвзято, яда, яда, но я думаю, что это достигнет ваших целей, и вы можете построить это.

// This just creates a timer to change the data-background of the body
window.setInterval(function(){
  var currentBackground = document.body.getAttribute("data-background") * 1,
      nextBackground = currentBackground + 1;
  if (currentBackground >= 3) {
    nextBackground = 1;
  }
  document.body.setAttribute("data-background", nextBackground);
}, 5000);
// menu controls
var toggleMenu = document.querySelector(".topnav");
var toggleMenuButton = toggleMenu.querySelector(" button");
var toggleMenuState = function (evt) {
  evt.preventDefault();
  var currentState = toggleMenu.getAttribute("data-state");
  if (currentState === "closed") {
    toggleMenu.setAttribute("data-state", "open");
  } else {
    toggleMenu.setAttribute("data-state", "closed");
  }
};
toggleMenuButton.addEventListener("click", toggleMenuState);
/* prefixed by https://autoprefixer.github.io (PostCSS: v7.0.26, autoprefixer: v9.7.3) */

body {
    height: 100vh;
    margin: 0;
}
body {
  font-family: Helvetica;
  color: white;
  font-weight: bold;
  font-style: normal;
  font-size: 30px;
}
.topnav {
  position: fixed;
  top: 0;
  left: 0;
  list-style: none;
  z-index: 3;
  margin: 0;
  padding: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
}
.topnav .logo img {
  border-radius: 100px;
}
.topnav button {
  display: none;
}
.topnav ul {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
}
.topnav li {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.topnav a,
.topnav button {
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  
  color: white;
  font-weight: bold;
  font-style: normal;
  font-size: 40px;
}
.topnav button {
  border: inherit;
  background: inherit;
  cursor:pointer;
}
.topnav button:before {
  content: "» ";
  margin-right: 0.25em;
}
.topnav[data-state="open"] button:before {
  content: "x ";
}
.topnav a:hover,
.topnav button:hover {
    background-color: black;
    border-radius: 100px;
}
.topnav a.active {
    background-color: #4CAF50;
    color: white;
}
.gallery {
  position: fixed;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  z-index: 1;
  margin: 0;
  padding: 0;
}
.gallery li {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  opacity: 0;
  -webkit-transition: opacity 2.0s ease-in-out 0.0s;
  -o-transition: opacity 2.0s ease-in-out 0.0s;
  transition: opacity 2.0s ease-in-out 0.0s;
}
.gallery li:nth-child(1) {
  background-image: url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_1.JPG?raw=true");
}
.gallery li:nth-child(2) {
  background-image: url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_2.JPG?raw=true");
}
.gallery li:nth-child(3) {
  background-image: url("https://github.com/showzadomain/showzatheband.github.io/blob/master/assets/images/bg_3.jpg?raw=trueg");
}
[data-background="1"] .gallery li:nth-child(1),
[data-background="2"] .gallery li:nth-child(2),
[data-background="3"] .gallery li:nth-child(3) {
  opacity: 1;
}
.hero {
  position: relative;
  z-index: 2;
  width: 100%;
  height: 100%;
  background: url("https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showza.png") rgba(0,0,0,0.15) center center no-repeat;
  background-size: 65%;
}
@media screen and (max-width: 1200px) {
    .topnav {
      -webkit-box-pack: justify;
          -ms-flex-pack: justify;
              justify-content: space-between;
      -webkit-box-align: center;
          -ms-flex-align: center;
              align-items: center;
      width: 100%;
    }
    .topnav button {
      display: inherit;
    }
    .topnav ul {
      -webkit-box-orient: vertical;
      -webkit-box-direction: normal;
          -ms-flex-direction: column;
              flex-direction: column;
      position: absolute;
      top: 100%;
      right: 0;
      margin: 0;
      padding: 0;
    }
    .topnav ul li {
      -webkit-box-pack: end;
          -ms-flex-pack: end;
              justify-content: flex-end;
    }
    .topnav[data-state="closed"] ul {
      display: none;
    }
}
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>showzatheband</title>
    <link rel='icon' href='favicon.ico' type='image/x-icon'>
    <link href="index.css" rel="stylesheet" type="text/css"/>
  </head>
  <body data-background="1">
    <menu class="topnav" data-state="closed">
      <a href="/" title="Homepage" class="logo"><img src="https://raw.githubusercontent.com/showzadomain/showzatheband.github.io/master/assets/images/showzafavcon.jpg" alt="showza_icon" width="125" height="125" /></a>
      <button>menu</button>
      <ul>
        <li><a href="#news" class="item">live dates</a></li>
        <li><a href="#news" class="item">gallery</a></li>
        <li><a href="#news" class="item">news</a></li>
      </ul>
    </menu>
    <div class="hero"></div>
    <ul class="gallery">
      <li></li>
      <li></li>
      <li></li>
    </ul>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...