我正在尝试实现类似于维基百科的悬停在文字上的图像弹出。 除了在移动设备上查看外,CSS都可以正常工作。由于弹出式文字可以位于最右端或最左端(取决于移动设备的屏幕宽度),因此弹出框可能超过屏幕的宽度,导致div的大小超过了屏幕的宽度。页面的其余部分。
我尝试使用CSS注释掉的部分来定位div。如果文本在最右边或最左边,则将页面推得更宽。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
line-height: 1.2;
font-size: 12px;
font-size: 1.0rem;
}
html { font-size: 90%; }
body {
background-color: black;
box-sizing: border-box;
}
img {
width: auto ;
max-width: 100% ;
height: auto;
margin: 0 auto;
}
.top-page {
width: 90%;
position: relative;
top: 0px;
margin: 0 auto;
background: #fff;
}
.flex-container {
display: flex;
flex-wrap: wrap;
margin: 10px 10px;
/*
flex-flow: row;
align-items: center;
justify-content: center;
*/
}
.popup_on_mouseover {/* - parent div - style for keyword */
position: relative;
display: inline-block;
border-bottom: thin dotted;
background: #ffffb3;
font-size: 1.2rem;
font-weight: bold;
}
.popup_on_mouseover:hover {
text-decoration: none;
background: #ffff00;
z-index: 66;
}
.popup_on_mouseover div {
position: absolute;
transform: translateX(-50%);
/*
left: 50%;
left: calc(50vw - 150px);
transform: translateX(-50%);
transform: translateX(50%) translateX(-150px); /* nested */
*/
top: 40px;
visibility: hidden;
width: 300px;
height: 280px;
background-color: rgba(0,0,0,0.85);
text-align: center;
padding: 15px 5px 5px 5px;
z-index:66;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
-webkit-box-shadow: 0px 24px 30px -4px rgba(175,175,175,0.87);
box-shadow: 0px 24px 30px -4px rgba(175,175,175,0.87);
}
.popup_on_mouseover:hover div {
visibility: visible;
}
.hold-text {
padding-right: 20px;
padding-left: 20px;
padding-top: 0px;
padding-bottom: 10px;
text-align:left;
}
img.resizeImg280x210 {
display: block;
width:280px;
max-height:210px;
margin-left: auto;
margin-right: auto;
}
.plainbrown12 {font-size: 1.2rem; color: #59493d }
.white12 {font-size: 1.2rem; color: #FFFFFF }
</style>
</head>
<body>
<div class="top-page">
<div class="flex-container">
<div class="hold-text plainbrown12">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
<div class="popup_on_mouseover">currency
<div>
<img src="https://i.stack.imgur.com/mgV0R.png" class="resizeImg280x210">
<br>
<span class="white12">currency</span>
</div>
</div>
, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
<div class="popup_on_mouseover">dude
<div>
<img src="https://i.stack.imgur.com/SUW9T.jpg" width="280" height="210">
<br>
<span class="white12">dude</span>
</div>
</div>
. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
<div class="popup_on_mouseover">dice
<div>
<img src="https://i.stack.imgur.com/DOCT3.png" width="280" height="210">
<br>
<span class="white12">dice</span>
</div>
</div>
non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
</div>
</div>
</body>
</html>
最好的情况是计算屏幕宽度并在文本下方显示弹出图像,对于任何将弹出div置于屏幕之外的屏幕宽度,将div移动到父对象的左侧/右侧div。
答案 0 :(得分:0)
根据我所看到的,触发弹出窗口的文本基本上可以在行的任何位置-在开头,中间或结尾。在这种情况下,由于弹出窗口相对于此位置,您不能使用CSS来适应它-您需要JS。
基本上,它将遵循以下原则: -显示/隐藏的mouseenter / mouseleave事件 -获取“悬停”目标的位置 -检查它是否靠近屏幕侧面(其大小+弹出窗口本身的大小) -如果距离太近(因此将不会包含整个图像),请对其位置进行调整。