【发布时间】:2019-12-26 22:50:29
【问题描述】:
有N张相同类别的卡片,每张卡片里面的文字数量不同。所有卡片都在同一个弹性容器中(行、换行)。在某些卡片中,部分文本是隐藏的,因为它超出了类的尺寸限制。我希望此类卡片在鼠标悬停时展开并显示全部内容。到目前为止,我可以使其仅覆盖文本(如图像中所示)或在移动邻居时扩展。相反,这样的卡片应该覆盖在相邻卡片之上而不移动它们。
理想情况下,悬停的卡片应水平展开(如果可能,对称展开,否则仅向左或向右)和垂直向下展开。
这是为这个问题创建的一个非常简单的示例。每张卡片都包含一个随机长度的子串 lorem ipsum。
JavaScript,生成带有随机文本数量的卡片:
'use strict';
const lorem = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ac auctor augue mauris augue neque gravida in fermentum et. Accumsan in nisl nisi scelerisque. Sed pulvinar proin gravida hendrerit lectus. Tortor id aliquet lectus proin nibh nisl condimentum. Erat pellentesque adipiscing commodo elit at imperdiet dui accumsan sit.';
const items = Array(30).fill(0)
.map(() => Math.ceil(lorem.length * Math.random()))
.map(idx => lorem.substring(0, idx))
.map(txt => `<div class="lorem-card">${txt}</div>`)
.join('');
const html = `<div class="cards-container">${items}</div>`;
document.body.innerHTML += html;
html只是一个骨架,因为内容是由JavaScript生成的
<html>
<head>
<meta charset="utf-8">
<title>Cards demo</title>
<link rel="stylesheet" type="text/css" href="./cards.css">
</head>
<body>
</body>
<script src="./gen.js"></script>
</html>
这是当前的 CSS:
.cards-container {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
align-items: flex-start;
align-content: space-between;
}
.lorem-card {
flex-grow: 1;
background-color: white;
border: 3px solid #008CBA;
padding: 15px;
margin: 15px;
max-width: 150px;
max-height: 200px;
overflow: hidden;
opacity: 1;
}
.lorem-card:hover {
flex-grow: 10;
height: auto;
width: auto;
overflow: visible;
border: 3px solid red;
z-index: 100;
}
【问题讨论】:
-
你试过 max-height: 100% on hover 吗?
-
我真的不会在悬停时执行此操作,除非您要通过 JS 放置叠加层,或者克隆节点并将其完全放在顶部。否则你会在每个场景中不断闪烁。
-
一个附带问题:投票结束这个问题的原因是什么?
-
我的回答能回答你的问题吗?
标签: javascript html css flexbox overflow