Я пытаюсь воспроизвести вид солнечного затмения. У меня есть стартовый экран, на котором отображается <div> с радиусом границы 50% и шириной/высотой 20vw. Это, конечно, дает округлый вид, и с помощью некоторой тени я в значительной степени добиваюсь этого.
Но я бы хотел улучшить эстетику с помощью наложения с каким-нибудь режимом наложения (я повозился с осветлением цвета и жестким светом, поэтому как-нибудь сделаю и то, и другое)
Но прямо сейчас я упираюсь в стену, потому что не могу подогнать наложение затмения так, чтобы оно идеально соответствовало моему кругу. И я беспокоюсь, что переход к десятичным точкам позже приведет к поломке моего дизайна из-за единиц, которые я использую, чтобы сделать его отзывчивым, но я не знаю, как еще я мог бы попытаться сохранить текущий макет при синхронизации моего наложения. с моей фигурой.
Я чувствую, что должен быть лучший способ.
Я новичок в переполнении стека, поэтому прошу прощения, если я плохо отформатировал. Я прикрепил наложенное изображение , которое использую , к этому вопросу, а также ссылку на изображение, которое пытаюсь воспроизвести
наложенное изображение (если предыдущая ссылка не работает): https://imgur.com/a/jYMDkaR
.startup-screen {
position: absolute;
z-index: 99;
display: flex;
overflow: hidden;
align-items: center;
flex-direction: column;
justify-content: center;
width: 100vw;
height: 100vh;
background: black;
}
.startup-screen__eclipse {
display: flex;
align-items: center;
justify-content: center;
width: 20%;
height: 40%;
padding: 5%;
box-shadow: 17px 17px 18px rgba(255, 255, 255, 1),
5px 5px 5px rgb(255, 213, 0),
6px 6px 6px rgb(66, 230, 255),
50px 50px 100px rgb(230, 207, 255);
border-radius: 50%;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-ms-border-radius: 50%;
-o-border-radius: 50%;
}
.startup-screen__eclipse__overlay {
position: absolute;
width: fit-content;
height: fit-content;
border: 2px solid red;
top: 13%;
left: 33%;
/* mix-blend-mode: color-dodge; */
}
.startup-screen__eclipse__overlay img {
width: 35vw;
height: 35vw;
mix-blend-mode: hard-light;
}
<div class = "startup-screen" id = "startupScreen">
<div class = "startup-screen__eclipse">
<div class = "startup-screen__eclipse__overlay">
<img src = "https://i.sstatic.net/6OwwlZBM.png">
</div>
</div>
</div>
Изображение не отображается. Чтобы сопоставить изображение с фоном, нам нужно проверить, что это за изображение. и у изображения есть position: absolute;
, но у родителя нет position: relative
@NINE Я добавил резервную копию в пост, а также сюда: ссылка
@prettyinpink определенно пытаюсь, я не против использования JavaScript, но я думаю, этого можно достичь только с помощью CSS... верно?
@NINE извините, я только что понял, что вы имели в виду, что изображение не отображается во фрагменте кода, я исправил это. подскажите пожалуйста, что я могу сделать :(
Фон и красная рамка одинаковы
Чтобы получить правильные значения, я использовал вертикальные и горизонтальные соотношения в единицах VW.
Точнее, возможно, было бы лучше установить желаемый процент с помощью JS.
Остальное вы можете настроить сами, верно?
.startup-screen {
position: absolute;
z-index: 99;
display: flex;
overflow: hidden;
align-items: center;
flex-direction: column;
justify-content: center;
width: 100vw;
height: 100vh;
background: black;
}
.startup-screen__eclipse {
display: flex;
align-items: center;
justify-content: center;
width: 20vw;
height: 20vw;
padding: 5%;
box-shadow: 17px 17px 18px rgba(255, 255, 255, 1), 5px 5px 5px rgb(255, 213, 0), 6px 6px 6px rgb(66, 230, 255), 50px 50px 100px rgb(230, 207, 255);
border-radius: 50%;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-ms-border-radius: 50%;
-o-border-radius: 50%;
position: relative;
}
.startup-screen__eclipse__overlay {
position: absolute;
width: 100%;
height: 100%;
border: 2px solid red;
/* mix-blend-mode: color-dodge; */
}
.startup-screen__eclipse__overlay img {
width: 100%;
height: 100%;
mix-blend-mode: hard-light;
}
<div class = "startup-screen" id = "startupScreen">
<div class = "startup-screen__eclipse">
<div class = "startup-screen__eclipse__overlay">
<img src = "https://i.sstatic.net/6OwwlZBM.png">
</div>
</div>
</div>
Конечно, со временем я это пойму, спасибо за ответ.
Структура HTML очень важна, и то, как она у вас есть сейчас, немного усложняет выполнение того, что вы хотите. Я бы структурировал свой HTML примерно так, как показано в следующем примере.
html,
body {
margin: 0;
padding: 0;
}
.startup-screen {
display: flex;
justify-content: center;
align-items: start;
width: 100vw;
min-height: 100vh;
background: black;
}
.startup-screen__eclipse-wrapper {
position: relative;
border: 2px solid red;
width: 40%;
aspect-ratio: 1;
}
.startup-screen__eclipse-image {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
mix-blend-mode: hard-light;
}
.startup-screen__eclipse-overlay {
position: absolute;
top: 47%;
left: 47%;
width: 52%;
aspect-ratio: 1;
transform: translate(-50%, -50%);
box-shadow: 17px 17px 18px rgba(255, 255, 255, 1), 5px 5px 5px rgb(255, 213, 0), 6px 6px 6px rgb(66, 230, 255), 50px 50px 100px rgb(230, 207, 255);
border-radius: 50%;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-ms-border-radius: 50%;
-o-border-radius: 50%;
}
<div class = "startup-screen" id = "startupScreen">
<div class = "startup-screen__eclipse-wrapper">
<img src = "https://i.sstatic.net/6OwwlZBM.png" class = "startup-screen__eclipse-image">
<div class = "startup-screen__eclipse-overlay"></div>
</div>
</div>
Я добавил оболочку как для изображения, так и для пользовательского наложения, а затем поместил изображение и наложение как родственные элементы внутри. Таким образом, я могу точно определить размер и расположение обоих элементов, не беспокоясь о том, что это испортит дочерние элементы.
Вы просто находка, спасибо - есть ли способ разместить изображение (.startup-screen__eclipse-image) сзади с этой текущей настройкой?
В настоящее время изображение отображается за наложением, но вы можете поменять порядок элементов, чтобы изменить это.
Ты мне очень помог,дай Бог здоровья
Вы пытаетесь воспроизвести изображение только с помощью CSS?