Я новичок в HTML и CSS и пытаюсь создать всплывающее окно под кнопкой из этого руководства - [How TO - Popup] [1] .
Я попытался изменить положение, отображение и другие атрибуты, но это не сработало.
CSS
.popup {
position: relative;
display: inline;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.popup .popuptext {
visibility: hidden;
width: 160px;
height: 160px;
background-color: #555;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 8px 0;
position: absolute;
z-index: 1;
bottom: 125%;
left: 50%;
margin-left: -80px;
}
.popup .popuptext::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #555 transparent transparent transparent;
}
.popup .show {
visibility: visible;
-webkit-animation: fadeIn 1s;
animation: fadeIn 1s;
}
HTML
<button class = "popup" onclick = "popupShow()"> Calendar
<span class = "popuptext" id = "myPopup">A Simple Popup!</span>
</button>
JavaScript
const popupShow = () => {
const popup = document.querySelector("#myPopup");
popup.classList.toggle("show");
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, вместо использования bottom:125% используйте значения pixel
Также не забывайте о всплывающей подсказке position и ее border-width.
РЕДАКТИРОВАТЬ: отрегулирована высота всплывающего окна для хорошего обзора
const popupShow = () => {
const popup = document.querySelector("#myPopup");
popup.classList.toggle("show");
}.popup {
position: relative;
display: inline;
left:50%;
margin-top:35px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.popup .popuptext {
visibility: hidden;
width: 160px;
height: 60px;
background-color: #555;
color: #fff;
display:inline-block;
text-align: center;
border-radius: 6px;
padding: 8px 0;
position: absolute;
z-index: 1;
/*bottom: 125%;*/
left: 0px;
/*margin-left: -80px;*/
bottom: -85px;
}
.popup .popuptext::after {
content: "";
position: absolute;
top: -5px;
left: 50%;
margin-left: -5px;
border-width: 0 5px 5px 5px;
border-style: solid;
border-color: #555 transparent;
}
.popup .show {
visibility: visible;
-webkit-animation: fadeIn 1s;
animation: fadeIn 1s;
}<button class = "popup" onclick = "popupShow()"> Calendar
<span class = "popuptext" id = "myPopup">A Simple Popup!</span>
</button>Все, что у вас есть в настоящее время, работает правильно, но если вы только визуализируете кнопку и всплывающее окно без каких-либо дополнительных стилей, вы обнаружите, что всплывающее окно с абсолютным позиционированием отображается за пределами экрана (потому что оно позиционируется абсолютным). Я добавил несколько стилей тела, чтобы отображать всплывающее окно в центре экрана.
Я также неверно истолковал ваш вопрос и подумал, что вы хотите, чтобы всплывающее окно показывалось внизу, поэтому оно немного отличается от вашего примера, но принцип все тот же.
const popupShow = () => {
const popup = document.querySelector("#myPopup");
popup.classList.toggle("show");
}body{
display:flex;
align-items:center;
justify-content:center;
width:100%;
height:100vh;
}
.popup {
position: relative;
display: inline;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.popup .popuptext {
visibility: hidden;
width: 160px;
height: 160px;
background-color: #555;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 8px 0;
position: absolute;
z-index: 1;
top:calc(100% + 8px);
left: 50%;
margin-left: -80px;
}
.popup .popuptext::after {
content: "";
position: absolute;
top: -10px;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: transparent transparent #555 transparent ;
}
.popup .show {
visibility: visible;
-webkit-animation: fadeIn 1s;
animation: fadeIn 1s;
}<button class = "popup" onclick = "popupShow()"> Calendar
<span class = "popuptext" id = "myPopup">A Simple Popup!</span>
</button>Я немного изменил ваш CSS. Смотрите строку с /*измененный*/.
const popupShow = () => {
const popup = document.querySelector("#myPopup");
popup.classList.toggle("show");
}.popup {
position: relative;
display: inline;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
margin: 50px; /*add*/
}
.popup .popuptext {
visibility: hidden;
width: 160px;
height: auto; /*changed*/
background-color: #555;
color: #fff;
text-align: center;
border-radius: 6px;
padding: 8px 0;
position: absolute;
z-index: 1;
bottom: -40px; /*changed*/
left: 50%;
margin-left: -80px;
}
.popup .popuptext::after {
content: "";
position: absolute;
top: -32%; /*changed*/
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: transparent transparent #555 transparent; /*changed*/
}
.popup .show {
visibility: visible;
-webkit-animation: fadeIn 1s;
animation: fadeIn 1s;
}<button class = "popup" onclick = "popupShow()"> Calendar
<span class = "popuptext" id = "myPopup">A Simple Popup!</span>
</button>
z-index: 1;попробуйте изменить значение на10000и посмотрите, работает ли