在 CSS 中将鼠标悬停在 div 上时显示内容
Show content when hovering over div in CSS
我正在使用 Freewall JS 插件生成马赛克图像网格。我还使用 opacity: 0.7
应用背景叠加颜色,当您将鼠标悬停在它上面时,背景叠加颜色变得清晰 opacity: 0.2
我在每个块中也有内容,我已将其设置为默认显示 none,但我无法让它在悬停时显示。
网格项是从 javascript 生成的,因此 HTML 是一个空的 div,id 为
jsFiddle https://jsfiddle.net/3o63eor8/3/
<div id="freewall" class="free-wall"></div>
CSS
.overlay-background {
position: relative;
}
.overlay-background:before{
position: absolute;
content:" ";
top:0;
left:0;
width:100%;
height:100%;
display: none;
z-index:0;
}
.overlay-background:before{
display: block;
}
.dark:before {
background-color: rgba(0,0,0,0.7);
}
.free-wall {
width: 100%;
height: 100%;
}
#freewall .dark:hover::before {
background-color: rgba(0,0,0,0.2);
}
#freewall .freewall-content span {
display: none
}
#freewall .freewall-content:hover span {
display: block
}
自动生成图像块的JS,我已经将我的css 类添加到temp
字符串
var temp = "<div class='brick overlay-background dark' style='width:{width}px; " +
"height: {height}px; " +
"background-image: url(assets/images/posts/post-{index}.jpg); " +
"background-repeat: no-repeat; " +
"background-size: cover; " +
"background-position: center center;" +
"background-color: {color}'>" +
"<div class='v-center text-center freewall-content'><span><i class='fa fa-search'></i></span></div>" +
"</div>";
var colour = [
"rgb(142, 68, 173)",
"rgb(243, 156, 18)",
"rgb(211, 84, 0)",
"rgb(0, 106, 63)",
"rgb(41, 128, 185)",
"rgb(192, 57, 43)",
"rgb(135, 0, 0)",
"rgb(39, 174, 96)"
];
var w = 1, h = 1, html = '', color = '', limitItem = 17;
for (var i = 0; i < limitItem; ++i) {
h = 1 + 3 * Math.random() << 0;
w = 1 + 3 * Math.random() << 0;
color = colour[colour.length * Math.random() << 0];
html += temp.replace(/\{height\}/g, h*150).replace(/\{width\}/g, w*150).replace("{color}", color).replace("{index}", i + 1);
}
$("#freewall").html(html);
问题在于您的 HTML 的结构。从技术上讲,div
其中 class="brick overlay-background dark"
位于 freewall-content
之上,因此您永远不会真正将鼠标悬停在它上面。您可以通过开发人员工具 (f12) 并查看实时 DOM 树
来了解这一点
将 css 选择器更改为 -
.brick.overlay-background.dark:hover .freewall-content .span {
display: block
}
不使用显示:none;
将父元素的不透明度设置为 1,然后将不透明度降低到 以便内容可见。
我认为您将具有简单解决方案的问题过于复杂化了。
https://jsfiddle.net/erwdepqp/
.brick {
width: 300px;
height: 300px
}
.overlay-background {
position: relative;
}
.overlay-background:before{
position: absolute;
content:" ";
top:0;
left:0;
width:100%;
height:100%;
display: none;
z-index:0;
}
.overlay-background:before{
display: block;
}
.dark:before {
background-color: rgba(0,0,0, 1);
}
.dark:hover::before {
background-color: rgba(0,0,0,0.2);
}
.freewall-content:hover span {
display: block;
}
我正在使用 Freewall JS 插件生成马赛克图像网格。我还使用 opacity: 0.7
应用背景叠加颜色,当您将鼠标悬停在它上面时,背景叠加颜色变得清晰 opacity: 0.2
我在每个块中也有内容,我已将其设置为默认显示 none,但我无法让它在悬停时显示。
网格项是从 javascript 生成的,因此 HTML 是一个空的 div,id 为
jsFiddle https://jsfiddle.net/3o63eor8/3/
<div id="freewall" class="free-wall"></div>
CSS
.overlay-background {
position: relative;
}
.overlay-background:before{
position: absolute;
content:" ";
top:0;
left:0;
width:100%;
height:100%;
display: none;
z-index:0;
}
.overlay-background:before{
display: block;
}
.dark:before {
background-color: rgba(0,0,0,0.7);
}
.free-wall {
width: 100%;
height: 100%;
}
#freewall .dark:hover::before {
background-color: rgba(0,0,0,0.2);
}
#freewall .freewall-content span {
display: none
}
#freewall .freewall-content:hover span {
display: block
}
自动生成图像块的JS,我已经将我的css 类添加到temp
字符串
var temp = "<div class='brick overlay-background dark' style='width:{width}px; " +
"height: {height}px; " +
"background-image: url(assets/images/posts/post-{index}.jpg); " +
"background-repeat: no-repeat; " +
"background-size: cover; " +
"background-position: center center;" +
"background-color: {color}'>" +
"<div class='v-center text-center freewall-content'><span><i class='fa fa-search'></i></span></div>" +
"</div>";
var colour = [
"rgb(142, 68, 173)",
"rgb(243, 156, 18)",
"rgb(211, 84, 0)",
"rgb(0, 106, 63)",
"rgb(41, 128, 185)",
"rgb(192, 57, 43)",
"rgb(135, 0, 0)",
"rgb(39, 174, 96)"
];
var w = 1, h = 1, html = '', color = '', limitItem = 17;
for (var i = 0; i < limitItem; ++i) {
h = 1 + 3 * Math.random() << 0;
w = 1 + 3 * Math.random() << 0;
color = colour[colour.length * Math.random() << 0];
html += temp.replace(/\{height\}/g, h*150).replace(/\{width\}/g, w*150).replace("{color}", color).replace("{index}", i + 1);
}
$("#freewall").html(html);
问题在于您的 HTML 的结构。从技术上讲,div
其中 class="brick overlay-background dark"
位于 freewall-content
之上,因此您永远不会真正将鼠标悬停在它上面。您可以通过开发人员工具 (f12) 并查看实时 DOM 树
将 css 选择器更改为 -
.brick.overlay-background.dark:hover .freewall-content .span {
display: block
}
不使用显示:none;
将父元素的不透明度设置为 1,然后将不透明度降低到 以便内容可见。
我认为您将具有简单解决方案的问题过于复杂化了。
https://jsfiddle.net/erwdepqp/
.brick {
width: 300px;
height: 300px
}
.overlay-background {
position: relative;
}
.overlay-background:before{
position: absolute;
content:" ";
top:0;
left:0;
width:100%;
height:100%;
display: none;
z-index:0;
}
.overlay-background:before{
display: block;
}
.dark:before {
background-color: rgba(0,0,0, 1);
}
.dark:hover::before {
background-color: rgba(0,0,0,0.2);
}
.freewall-content:hover span {
display: block;
}