#javascript #html #css
Вопрос:
Поэтому я пытаюсь создать несколько подсказок, когда пользователь наводит курсор на определенную кнопку. В принципе, у меня будет множество вкладок (в этом примере я создал только две для простоты), которые будут скользить по горизонтали внутрь и наружу. Из-за этого я хочу скрыть содержимое любой вкладки, которое является translated either to the left or right of the
элементом # element. To achieve this, I tried adding
переполнение содержимого-x: скрытый to the
элемент#слайдер. Хотя это работает должным образом, он также скрывает всплывающие подсказки, когда они переполняются в направлении y (вы можете увидеть это, если наведете курсор на первые две строки).
Вот мой код. Надеюсь, я объяснил, что я пытаюсь сделать, хотя я думаю, что это должно быть довольно очевидно, когда вы видите пример, если мое объяснение плохое.
window.onload = function() {
//populate l amp; r tab contents
for (var n = 1; n <= 15; n ) {
document.getElementById("l").insertAdjacentHTML("beforeEnd", "<p class='item tooltip'>L" n "<span class='tooltipText'>L" n "</span></p>")
document.getElementById("r").insertAdjacentHTML("beforeEnd", "<p class='item tooltip'>R" n "<span class='tooltipText'>Tooltip R" n "</span></p>")
}
document.querySelector("#tab-wr p[tab='l']").addEventListener("click", function() {
this.style.borderBottomColor = "green";
document.querySelector("#tab-wr p[tab='r']").style.borderBottomColor = "";
document.querySelector("#slider").style.transform = "translateX(0%)";
})
//ignore - messy code for changing tabs
document.querySelector("#tab-wr p[tab='r']").addEventListener("click", function() {
this.style.borderBottomColor = "green";
document.querySelector("#tab-wr p[tab='l']").style.borderBottomColor = "";
document.querySelector("#slider").style.transform = "translateX(-50%)";
})
}
* {
margin: 0;
padding: 0;
color: white;
font-family: sans-serif;
}
html {
height: 100%;
}
body {
height: 100%;
background: #333;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
#tab-wr {
display: flex;
width: 390px;
line-height: 40px;
margin-bottom: 10px;
}
#tab-wr p {
flex-grow: 1;
text-align: center;
border-bottom: 2px solid #555;
cursor: pointer;
}
#tab-wr p:hover {
border-bottom-color: green;
}
#tab-wr p:not(:last-child) {
margin-right: 10px;
}
#content {
width: 390px;
border: 1px solid #111;
overflow-x: hidden;
}
#slider {
width: 200%;
display: grid;
grid-template-columns: 1fr 1fr;
transition: ease-in-out 0.3s all;
}
#l,
#r {
display: grid;
grid-template-columns: repeat(3, 1fr)
}
.item {
width: 130px;
line-height: 50px;
background: #222;
text-align: center;
position: relative;
}
.tooltipText {
display: none;
}
.tooltip:hover {
background: #333;
cursor: defau<
}
.tooltip:hover .tooltipText {
display: block;
position: absolute;
top: -150px;
left: 0;
background: #0075b9;
width: 130px;
height: 150px;
display: flex;
justify-content: center;
align-items: center;
}
.tooltipText::after {
content: " ";
position: absolute;
top: 100%;
left: 50%;
margin-left: -10px;
margin-bottom: -10px;
border-width: 10px;
border-style: solid;
border-color: #0075b9 transparent transparent transparent;
z-index: 999;
}
<div id='tab-wr'>
<p tab="l">Left Tab</p>
<p tab="r">Right Tab</p>
</div>
<div id='content'>
<div id='slider'>
<div id='l'>
</div>
<div id='r'>
</div>
</div>
</div>
Basically, I’m wondering, how can I have both the sliding tabs amp; tooltip features working? And preferably without using js for positioning and ideally keeping the tooltips as children (or at least siblings) of the desired element to have hovered.
Thanks