将图像居中(以div为单位)以进行响应式设计

时间:2019-04-18 05:48:40

标签: css

我正在尝试实现类似于维基百科的悬停在文字上的图像弹出除了在移动设备上查看外,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。

popup text is in the center of the page, no issues

popup text on left margin, image is off the page

1 个答案:

答案 0 :(得分:0)

根据我所看到的,触发弹出窗口的文本基本上可以在行的任何位置-在开头,中间或结尾。在这种情况下,由于弹出窗口相对于此位置,您不能使用CSS来适应它-您需要JS。

基本上,它将遵循以下原则: -显示/隐藏的mouseenter / mouseleave事件 -获取“悬停”目标的位置 -检查它是否靠近屏幕侧面(其大小+弹出窗口本身的大小) -如果距离太近(因此将不会包含整个图像),请对其位置进行调整。