css grid - 防止文本在右侧溢出

标签 css

<div class='card'>
<div class='cardleft'><img class='imgcard' src="..." alt='img'></div>
<div class='cardright'>
    <div class='cardtitle'>TITLE</div>
    <div class='cardintro'>lorem ipsum...</div>
</div>
</div>

CSS

.card{
    display:grid;
    grid-template-columns: 320px auto;
}

.imgcard{
    display:block;
    width:100%;
    margin:0 auto;
}

.cardright{
    overflow:hidden;
}

.cardintro{
    margin-top:9px;
}

有时,cardintro 内容(lorem ipsum...)太长,会改变整个card 的高度。

我想让整个card的max-height是imgcard的高度,不固定,防止cardintro文字溢出超过该卡片的高度。

我想这可以通过 javascript 解决,但我希望通过 grid-template-rows 或以某种方式使用 css。

有什么帮助吗?

最佳答案

您可以使用包含 cardintro 的 cardright div 的绝对定位,并设置隐藏在卡片上的溢出。这是一个片段,其中三张卡片上的文本数量相同,但图像高度都不同。

.card {
  display: block;
  position: relative;
  overflow: hidden;
  margin-bottom: 20px;
}

.imgcard {
  display: block;
  width: 100%;
  margin: 0 auto;
}

.cardright {
  position: absolute;
  left: 330px;
  top: 0;
  right: 0;
  bottom: 0;
  height: 100%;
}

.cardleft {
  display: inline-block;
  width: 320px;
}

.cardintro {
  margin-top: 9px;
}
<div class='card'>
  <div class='cardleft'><img class='imgcard' src="http://via.placeholder.com/320x150" alt='img'></div>
  <div class='cardright'>
    <div class='cardtitle'>TITLE</div>
    <div class='cardintro'>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque rutrum metus vitae elit pellentesque pellentesque. Donec vulputate, mi fringilla mattis tincidunt, tellus metus placerat orci, sit amet tincidunt nisl nulla ultrices leo. Duis vitae
        porttitor tortor, et imperdiet orci. In eget laoreet turpis, a porttitor metus. Aliquam vitae volutpat mi. Curabitur pellentesque arcu ex, sit amet efficitur ligula porta in. Cras metus justo, eleifend vitae ante non, congue commodo risus. In
        hac habitasse platea dictumst. Proin cursus at nulla sed pretium. Maecenas semper nibh ut velit interdum varius. Sed tempus mi sit amet pellentesque rutrum. Phasellus placerat id ipsum quis tempor.</p>
      <p>Curabitur est ex, rutrum vel lacus eu, imperdiet dapibus libero. Donec cursus mattis finibus. Cras eget felis et orci consectetur egestas sit amet sed sem. Phasellus ultricies mi eu mauris posuere, sit amet facilisis ante lobortis. Etiam et quam
        id sapien gravida lacinia ut non diam. Etiam sit amet iaculis quam, in malesuada erat. Aliquam tristique aliquet elit, vitae maximus enim vestibulum non. Phasellus vitae iaculis orci. Integer in consequat odio, at dapibus quam.</p>
    </div>
  </div>
</div>

<div class='card'>
  <div class='cardleft'><img class='imgcard' src="http://via.placeholder.com/320x250" alt='img'></div>
  <div class='cardright'>
    <div class='cardtitle'>TITLE</div>
    <div class='cardintro'>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque rutrum metus vitae elit pellentesque pellentesque. Donec vulputate, mi fringilla mattis tincidunt, tellus metus placerat orci, sit amet tincidunt nisl nulla ultrices leo. Duis vitae
        porttitor tortor, et imperdiet orci. In eget laoreet turpis, a porttitor metus. Aliquam vitae volutpat mi. Curabitur pellentesque arcu ex, sit amet efficitur ligula porta in. Cras metus justo, eleifend vitae ante non, congue commodo risus. In
        hac habitasse platea dictumst. Proin cursus at nulla sed pretium. Maecenas semper nibh ut velit interdum varius. Sed tempus mi sit amet pellentesque rutrum. Phasellus placerat id ipsum quis tempor.</p>
      <p>Curabitur est ex, rutrum vel lacus eu, imperdiet dapibus libero. Donec cursus mattis finibus. Cras eget felis et orci consectetur egestas sit amet sed sem. Phasellus ultricies mi eu mauris posuere, sit amet facilisis ante lobortis. Etiam et quam
        id sapien gravida lacinia ut non diam. Etiam sit amet iaculis quam, in malesuada erat. Aliquam tristique aliquet elit, vitae maximus enim vestibulum non. Phasellus vitae iaculis orci. Integer in consequat odio, at dapibus quam.</p>
    </div>
  </div>
</div>

<div class='card'>
  <div class='cardleft'><img class='imgcard' src="http://via.placeholder.com/320x350" alt='img'></div>
  <div class='cardright'>
    <div class='cardtitle'>TITLE</div>
    <div class='cardintro'>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque rutrum metus vitae elit pellentesque pellentesque. Donec vulputate, mi fringilla mattis tincidunt, tellus metus placerat orci, sit amet tincidunt nisl nulla ultrices leo. Duis vitae
        porttitor tortor, et imperdiet orci. In eget laoreet turpis, a porttitor metus. Aliquam vitae volutpat mi. Curabitur pellentesque arcu ex, sit amet efficitur ligula porta in. Cras metus justo, eleifend vitae ante non, congue commodo risus. In
        hac habitasse platea dictumst. Proin cursus at nulla sed pretium. Maecenas semper nibh ut velit interdum varius. Sed tempus mi sit amet pellentesque rutrum. Phasellus placerat id ipsum quis tempor.</p>
      <p>Curabitur est ex, rutrum vel lacus eu, imperdiet dapibus libero. Donec cursus mattis finibus. Cras eget felis et orci consectetur egestas sit amet sed sem. Phasellus ultricies mi eu mauris posuere, sit amet facilisis ante lobortis. Etiam et quam
        id sapien gravida lacinia ut non diam. Etiam sit amet iaculis quam, in malesuada erat. Aliquam tristique aliquet elit, vitae maximus enim vestibulum non. Phasellus vitae iaculis orci. Integer in consequat odio, at dapibus quam.</p>
    </div>
  </div>
</div>

关于css grid - 防止文本在右侧溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48031726/

相关文章:

html - 忽略 CSS 高度元素

javascript - Google PageSpeed Insights 优先考虑可见内容

css - 转换错误:Jekyll::Converters::Scss 遇到错误

html - div底部 float

android - android 是否在提交按钮周围添加了额外的 Activity 区域?

css - 为什么子级的宽度在显示时没有扩展到父级的宽度: table-cell?

css - 如何在不使用额外的 div 的情况下使同一行上的文本使用不同的字体?

javascript - 如何将 id 发送到 refs(forwardrefs) 到子组件

jquery - 可拖动和可调整大小的 DIV 不起作用

html - Chrome 和 Safari 没有渲染我的表格以适应其内容