Странная ошибка с divами на одной высоте, перекрывающимися различными z-индексами и со скрытым переполнением родителя: border-bottom всегда виден? - PullRequest
0 голосов
/ 31 августа 2018

Я создал speedometer, который работает очень хорошо и должен светиться (с CSS3, HTML и JS-кодом). Но я заметил странную ошибку с iphone ....

Это КОД:

$('#first').addClass('first-start');



//SECOND BAR
$('#second').addClass('second-start');

setTimeout(function() {
  $('#second').addClass('second-pause');
}, 400);
#page {
  margin-top: 50px;
  width: 300px;
  height: 300px;
  background-color: #000;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  z-index: 4;
  overflow: hidden;
}

#box-first,
#box-second {
  width: 200px;
  height: 100px;
  background-color: #fff;
  border-radius: 200px 200px 0 0;
  margin-top: 10px;
  margin-bottom: 10px;
  position: relative;
  display: flex;
  justify-content: flex-end;
  align-items: flex-start;
  z-index: 3;
  overflow: hidden;
}

#first,
#second {
  border-radius: 200px 200px 0 0;
  margin: 0;
  background: red;
  width: 200px;
  height: 100px;
  transform: rotate(180deg);
  -webkit-transform: rotate(180deg);
  -moz-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  -o-transform: rotate(180deg);
  transform-origin: 50% 100%;
  -webkit-transform-origin: 50% 100%;
  -moz-transform-origin: 50% 100%;
  -ms-transform-origin: 50% 100%;
  position: absolute;
  top: 0px;
  right: 0px;
  border: 0;
  z-index: 1;
}
#n1,
#n2 {
  font-size: 20px;
  color: #fff;
  font-weight: bold;
  position: absolute;
  left: 50px;
  right: 0;
  text-align: center;
  top: 50px;
  bottom: 0;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  width: 100px;
  height: 50px;
  background: #000;
  border-radius: 100px 100px 0 0;
  z-Index: 1;
  overflow: hidden;
}
@keyframes first {
  0% {
    background-color: green;
    transform: rotate(180deg);
  }
  33% {
    background-color: yellow;
    transform: rotate(240deg);
  }
  66% {
    background-color: orange;
    transform: rotate(300deg);
  }
  100% {
    background-color: red;
    transform: rotate(360deg);
  }
}
@keyframes second {
  0% {
    background-color: green;
    transform: rotate(180deg);
  }
  33% {
    background-color: yellow;
    transform: rotate(240deg);
  }
  66% {
    background-color: orange;
    transform: rotate(300deg);
  }
  100% {
    background-color: red;
    transform: rotate(360deg);
  }
}
.first-start,
.second-start {
  animation: first 2s linear forwards;
}
.first-pause,
.second-pause {
  animation-play-state: paused;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="page">
  <div id="box-first">
    <div id="first"></div>
    <div id="n1">1500</div>
  </div>
  <div id="box-second">
    <div id="second"></div>
    <div id="n2">270</div>
  </div>
</div>

С iphone, то есть с safari, под (на нижней стороне) div #n1 (черный div, где есть номер 1500 ), видна небольшая белая рамка или иногда красная (как #first). И это невозможно, потому что контейнер имеет overflow: hidden, все div имеют различный z-индекс и позиция absolute # n1 верна.

Как это возможно?

Спасибо и извините за мой английский

Это jsfiddle: Это jsfiddle: https://jsfiddle.net/k85t9zgq/33/

Это скриншот ошибки: enter image description here

ЭТО НОВЫЙ "ЖУК" добавление box-sizing:border-box

enter image description here

мне кажется, что добавление этого нового свойства не работает overflow:hidden свойство. Возможно?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Я не могу проверить это, но я почти уверен, что это связано с тем, что фон использует background-clip border-box по умолчанию, и это как-то проблема с отрисовкой. Возможное решение - сделать фон далеко от границы, добавив небольшой отступ и настроив background-clip

$('#first').addClass('first-start');



//SECOND BAR
$('#second').addClass('second-start');

setTimeout(function() {
  $('#second').addClass('second-pause');
}, 400);
#page {
  margin-top: 50px;
  width: 300px;
  height: 300px;
  background-color: #000;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  z-index: 4;
  overflow: hidden;
}

#box-first,
#box-second {
  width: 200px;
  height: 100px;
  /* Changes*/
  background: linear-gradient(#fff,#fff) content-box;
  padding:1px;
  box-sizing:border-box;
  /**/
  border-radius: 200px 200px 0 0;
  margin-top: 10px;
  margin-bottom: 10px;
  position: relative;
  display: flex;
  justify-content: flex-end;
  align-items: flex-start;
  z-index: 3;
  overflow: hidden;
}

#first,
#second {
  border-radius: 200px 200px 0 0;
  margin: 0;
  background: red;
  width: 200px;
  height: 100px;
  transform: rotate(180deg);
  -webkit-transform: rotate(180deg);
  -moz-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  -o-transform: rotate(180deg);
  transform-origin: 50% 100%;
  -webkit-transform-origin: 50% 100%;
  -moz-transform-origin: 50% 100%;
  -ms-transform-origin: 50% 100%;
  position: absolute;
  top: 0px;
  right: 0px;
  border: 0;
  z-index: 1;
}
#n1,
#n2 {
  font-size: 20px;
  color: #fff;
  font-weight: bold;
  position: absolute;
  left: 50px;
  right: 0;
  text-align: center;
  top: 50px;
  bottom: 0;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  width: 100px;
  height: 50px;
  background: #000;
  border-radius: 100px 100px 0 0;
  z-Index: 1;
  overflow: hidden;
}
@keyframes first {
  0% {
    background-color: green;
    transform: rotate(180deg);
  }
  33% {
    background-color: yellow;
    transform: rotate(240deg);
  }
  66% {
    background-color: orange;
    transform: rotate(300deg);
  }
  100% {
    background-color: red;
    transform: rotate(360deg);
  }
}
@keyframes second {
  0% {
    background-color: green;
    transform: rotate(180deg);
  }
  33% {
    background-color: yellow;
    transform: rotate(240deg);
  }
  66% {
    background-color: orange;
    transform: rotate(300deg);
  }
  100% {
    background-color: red;
    transform: rotate(360deg);
  }
}
.first-start,
.second-start {
  animation: first 2s linear forwards;
}
.first-pause,
.second-pause {
  animation-play-state: paused;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="page">
  <div id="box-first">
    <div id="first"></div>
    <div id="n1">1500</div>
  </div>
  <div id="box-second">
    <div id="second"></div>
    <div id="n2">270</div>
  </div>
</div>
0 голосов
/ 01 сентября 2018

Я полагаю, что это ваше свойство border-radius на #first и #second - Поиграйте со значениями на нем, и вы полностью поймете, что я имею в виду.

Изменить это:

#first,
#second {
  border-radius: 200px 200px 0 0; /* ← CHANGE THIS */
  margin: 0;
  background: red;
  width: 200px; /* ← CHANGE THIS TOO */
  height: 100px;
  transform: rotate(180deg);
  transform-origin: 50% 100%;
  position: absolute;
  top: 0px;
  right: 0px;
  border: 0;
  z-index: 1;
}

до:

#first,
#second {
  border-radius: 0; /* ← THIS IS WHAT YOU WANT */
  margin: 0;
  background: red;
  width: 100%; /* ← THIS IS ALSO WHAT YOU WANT */
  height: 100px;
  transform: rotate(180deg);
  transform-origin: 50% 100%;
  position: absolute;
  top: 0px;
  right: 0px;
  border: 0;
  z-index: 1;
}

Эта слабая бело-серая линия вокруг вашего спидометра больше не присутствует.

ура и счастливого кодирования:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...