Можно воспользоваться "смежными селекторами" (+
), комбинаторами если угодно.
.block {
position: absolute;
width: 600px;
height: 50px;
background: rgb(199, 199, 199);
top: 100px;
left: 600px;
}
a {
display: flex;
justify-content: space-around;
}
a::after {
animation: normal;
-webkit-animation: none;
}
.block2 {
display: none; /* скрываем по умолчанию */
width: 200px;
height: 50px;
text-align: center;
background-color: black;
border: 8px solid black;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
border-radius: 10px;
-webkit-box-shadow: 2px 2px 4px #888;
-moz-box-shadow: 2px 2px 4px #888;
box-shadow: 2px 2px 4px #888;
opacity: .7;
position: absolute;
top: 130px;
left: 790px;
}
.block:hover + .block2 {
display: block; /* показываем при наведении на `.block` */
}
#block2:start {
width: 200px;
height: 50px;
text-align: center;
background-color: black;
border: 8px solid black;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
border-radius: 10px;
-webkit-box-shadow: 2px 2px 4px #888;
-moz-box-shadow: 2px 2px 4px #888;
box-shadow: 2px 2px 4px #888;
opacity: .7;
position: absolute;
top: 130px;
left: 790px;
}
p {
color: white;
display: flex;
justify-content: center;
}
.block2 {
border: 1px solid black;
border-radius: 10px;
width: 200px;
height: 50px;
left: 800px;
position: relative;
background: black;
color: #fff;
box-shadow: 0 0 7px #000;
}
.block2::after,
.block2::before {
content: '';
position: absolute;
background: black;
left: 90px;
bottom: -11px;
width: 20px;
height: 20px;
box-shadow: 0 0 7px #000;
z-index: -1;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
top: -10px;
}
.block2::before {
z-index: 1;
box-shadow: none;
}
<div class="block">
<a href="#">Наведи на меня</a>
</div>
<div class="block2">
<p>Подсказочка!</p>
</div>
<div class="ugol"></div>
<div class="container"></div>
Это работает так:
Сначала нужно написать селектор для первого элемента.
.some-elem
Потом добавить знак +
(пробелы не обязательны)
.some-elem +
После чего селектор для второго элемента
.some-elem + #elem-two
То есть, получается такая конструкция:
- Если существует элемент который, совпадает с селектором слева
- Если после (только на один элемент впереди) него существует элемент который, совпадает с селектором справа
- Тогда применить стили к элементу который совпадает со вторым селектором
Есть похожый "селектор следующего элемента" (~
), который проверяет нет ли после элемента вообще хоть кого-то элемента совпадающего с селектором справа, а не только на один элемент вперёд.
Воспользовавшись этой конструкцией, я и написал такое решение:
.block:hover + .block2 { /* Если есть элемент `.block`, на который наводится пользователь, тогда к элементу с классом `block2` дать следующие стили: */
/* Ну и тут стили соответственно */
}
Более плавное решение:
.block {
position: absolute;
width: 600px;
height: 50px;
background: rgb(199, 199, 199);
top: 100px;
left: 600px;
}
a {
display: flex;
justify-content: space-around;
}
a::after {
animation: normal;
-webkit-animation: none;
}
.block2 {
opacity: 0;
pointer-events: none;
transition: .3s;
width: 200px;
height: 50px;
text-align: center;
background-color: black;
border: 8px solid black;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
border-radius: 10px;
-webkit-box-shadow: 2px 2px 4px #888;
-moz-box-shadow: 2px 2px 4px #888;
box-shadow: 2px 2px 4px #888;
position: absolute;
top: 130px;
left: 790px;
}
.block:hover + .block2 {
opacity: .7;
pointer-events: auto;
}
#block2:start {
width: 200px;
height: 50px;
text-align: center;
background-color: black;
border: 8px solid black;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
border-radius: 10px;
-webkit-box-shadow: 2px 2px 4px #888;
-moz-box-shadow: 2px 2px 4px #888;
box-shadow: 2px 2px 4px #888;
opacity: .7;
position: absolute;
top: 130px;
left: 790px;
}
p {
color: white;
display: flex;
justify-content: center;
}
.block2 {
border: 1px solid black;
border-radius: 10px;
width: 200px;
height: 50px;
left: 800px;
position: relative;
background: black;
color: #fff;
box-shadow: 0 0 7px #000;
}
.block2::after,
.block2::before {
content: '';
position: absolute;
background: black;
left: 90px;
bottom: -11px;
width: 20px;
height: 20px;
box-shadow: 0 0 7px #000;
z-index: -1;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
top: -10px;
}
.block2::before {
z-index: 1;
box-shadow: none;
}
<div class="block">
<a href="#">Наведи на меня</a>
</div>
<div class="block2">
<p>Подсказочка!</p>
</div>
<div class="ugol"></div>
<div class="container"></div>