#javascript #html #css #reactjs
#javascript #HTML #css #reactjs
Вопрос:
HTML выглядит следующим образом (я использую React BTW) :
.iss {
width: 100%;
z-index: -1;
position: absolute;
left: 0;
transition: all 0.5s ease-in-out;
}
.heading-section {
margin-top: 250px;
pointer-events: none;
}
.dgs-heading {
color: white;
font-family: Verdana, Geneva, Tahoma, sans-serif;
margin: auto;
}
.dgs-para {
color: white;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
.iss:hover {
-webkit-filter: blur(5px);
filter: blur(5px);
}
<div class="dragon-sim">
<img class="iss" src="https://spacecraftearth.com/wp-content/uploads/2017/06/ISS-Earth-Mediterranean-2.jpg" alt="iss-img" />
<div class="heading-section">
<h1 class="dgs-heading">SpaceX Dragon 2 Simulator</h1>
<p class="dgs-para">Dock the SpaceX Dragon 2 Satellite to the International Space Station in this realtime simulator with the controls our astronauts use on their missions.</p>
<Button variant='outlined' class="dgs-btn"><a
href="https://iss-sim.spacex.com/">Try Now</a></Button>
</div>
</div>
Что я хочу, так это чтобы раздел заголовка был центрирован по изображению. Изображение имеет z — index = -1.
Следующее, что изображение должно быть размытым при наведении курсора мыши. Но проблема в том, что отступы или поля мешают и блокируют эффект наведения курсора.
Комментарии:
1. Если ваш z-индекс равен -1, как вы ожидаете, что изображение будет наведено на изображение? Я не думаю, что проблема здесь в вашем поле или заполнении
Ответ №1:
Возможно, это то, к чему вы стремитесь. Удалите pointer-events: none;
и измените position: absolute;
изображение на .heading-section
изображение вместо изображения. А также добавьте этот код:
.dragon-sim {
position: relative;
text-align: center;
}
Вот рабочий пример (я изменил className
class
только для запуска этого примера, просто измените его обратно на react)
Редактировать: добавьте это в свой CSS, чтобы получить размытие даже при наведении курсора мыши на заголовок.
.dragon-sim:hover .iss {
-webkit-filter: blur(5px);
filter: blur(5px);
}
Пример здесь:
.iss {
width: 100%;
z-index: -1;
transition: all 0.5s ease-in-out;
}
.dragon-sim {
position: relative;
text-align: center;
}
.heading-section {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.dgs-heading {
color: white;
font-family: Verdana, Geneva, Tahoma, sans-serif;
margin: auto;
}
.dgs-para {
color: white;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
.dragon-sim:hover .iss {
-webkit-filter: blur(5px);
filter: blur(5px);
}
<div class="dragon-sim">
<img class="iss"
src="https://spacecraftearth.com/wp-content/uploads/2017/06/ISS-Earth-Mediterranean-2.jpg"
alt="iss-img"/>
<div class="heading-section">
<h1 class="dgs-heading">SpaceX Dragon 2 Simulator</h1>
<p class="dgs-para">Dock the SpaceX Dragon 2 Satellite to the
International Space Station in this realtime simulator with the controls
our astronauts use on their missions.</p>
<Button variant='outlined' class="dgs-btn"><a
href="https://iss-sim.spacex.com/">Try Now</a></Button>
</div>
</div>
Комментарии:
1. Это центрирует заголовок, но как только вы наводите на него курсор, размытие на заднем плане исчезает, на самом деле это не указано в вопросе, но я думаю, что этого не должно произойти
2. Это очень легко исправить. Просто добавьте это в код CSS:
.dragon-sim:hover .iss { -webkit-filter: blur(5px); filter: blur(5px); }
я обновлю свой ответ, чтобы показать это.
Ответ №2:
Во-первых, пожалуйста, делайте отступы в своем HTML-коде, задавая вопрос.
попробуйте выполнить следующее для центрирования .heading-section
.heading-section {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
Ответ №3:
У вас должна быть оболочка, которая содержит как изображение, так и заголовок, и, когда эта оболочка наведена на вас, изображение размывается.
Естественно, вы можете центрировать раздел заголовка так, как упоминал Кевин.
Итак, основываясь на том, что я сказал, что мое решение будет таким: тот же html и css станут чем-то вроде:
.iss {
width: 100%;
z-index: -1;
left: 0;
transition: all 0.5s ease-in-out;
}
.heading-section {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.dgs-heading {
color: white;
font-family: Verdana, Geneva, Tahoma, sans-serif;
margin: auto;
}
.dgs-para {
color: white;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
.iss:hover {
-webkit-filter: blur(5px);
filter: blur(5px);
}
.dragon-sim {
position: relative;
}
.dragon-sim:hover > .iss {
-webkit-filter: blur(5px);
filter: blur(5px);
}
Кажется, это делает то, что вы хотели, оно размывает изображение, но не текст, и вы все равно можете без проблем взаимодействовать с текстом и кнопкой.
Кроме того, текст не очень удобочитаем, я бы посоветовал добавить прозрачный фон для раздела заголовка
Также обратите внимание, что я удалил pointer-events: none;
, поскольку в этом больше нет необходимости, плюс к тому, что вы не сможете нажать кнопку, поэтому вы определенно не хотите использовать это свойство
Комментарии:
1. Также мой ответ решает различные проблемы, но вы все равно можете захотеть добавить некоторые другие стили, например, для выравнивания текста и тому подобное, но это уже должно решить основную проблему, которую вы задали в вопросе, который я считаю
2. Я отредактировал свое решение после того, как решение Джона заставило меня понять, что на самом деле изображение не обязательно должно иметь абсолютное позиционирование 🙂
Ответ №4:
Если вы измените значение .heading-section
на position: absolute
, и pointer-events: none
, наведение курсора будет проходить до базового изображения.
Просмотрите это в режиме полной страницы:
.iss {
width: 100%;
z-index: -1;
position: absolute;
left: 0;
top: 50px;
transition: all 0.5s ease-in-out;
}
/* heading overlay: use absolute positioning */
.heading-section {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
pointer-events: none; /* passes hover to img */
}
.dgs-heading {
color: white;
font-family: Verdana, Geneva, Tahoma, sans-serif;
margin: auto;
}
.dgs-para {
color: white;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
/* override "pointer-events: none" to allow button click */
.dgs-btn {
pointer-events: auto;
}
.iss:hover {
-webkit-filter: blur(5px);
filter: blur(5px);
}
<div class="dragon-sim">
<img class="iss"
src="https://spacecraftearth.com/wp-content/uploads/2017/06/ISS-Earth-Mediterranean-2.jpg"
alt="iss-img"/>
<div class="heading-section">
<h1 class="dgs-heading">SpaceX Dragon 2 Simulator</h1>
<p class="dgs-para">Dock the SpaceX Dragon 2 Satellite to the
International Space Station in this realtime simulator with the controls
our astronauts use on their missions.</p>
<button class="dgs-btn" onclick="alert('click')">Try Now</button>
</div>
</div>
Комментарии:
1. Приятно, что ваше решение работает :), единственная проблема, которую я хочу упомянуть, заключается в том, что в вашей реализации кнопка внутри раздела заголовка недоступна для просмотра, я решил это по-другому в своем решении 🙂