当第一列不存在时,其余列应占据空间

查尔斯

我试图在CSS中制作卡片组件,我认为这很简单,但是我在CSS网格属性中苦苦挣扎。另外,在这种情况下我不能使用flexbox,原因不值得解释:)

布局非常简单:左侧是图片,右侧是一些文字。

<div class="card">
  <figure card="card__img">
    <img src="https://via.placeholder.com/600" width="600" height="600">
  </figure>
  <p class="card__txt">Lorem ipsum tempus fugit.</p>
</div>

这是棘手的部分:图像是可选的,并且在显示时,其宽度不应超过50%。

当我为图片添加最大宽度时,如果图片不存在,则文本不会展开。

这是我目前所拥有的:

.card {
  display: grid;
  column-gap: 1em;
  grid-template-columns: minmax(0, 50%) 1fr;
}

我试图弄乱width grid-template-columns,但是我对它还不熟悉。


您可以在此Codepen上看到它的运行情况:https ://codepen.io/tcharlss/pen/gVvOjY

这是代码片段:

/* Layout stuff I'm strugling width*/

.card {
  display: grid;
  column-gap: 1em;
  grid-template-columns: minmax(0, 50%) 1fr;
}

/* Decoration & miscellaneous */

body { font-family: sans; }
.container {
  display: grid;
  column-gap: 1em;
  grid-template-columns: repeat(auto-fill, 35em);
}
.container + .container {
  margin-top: 2em;
}
.explication {
  color: hsl(230, 100%, 45%);
  font-family: monospace;
  font-style: italic;
}
.card {
  border: 1px solid hsl(230, 100%, 45%);
  min-height: 18em;
}
.card__txt {
  background-color: hsl(0, 0%, 90%);
  margin: 0;
}
figure {
  margin: 0;
}
img {
  max-width: 100%;
  height: auto;
}
<div class="container">

  <div class="col">
    <p class="explication">If an image is present, it can't be wider then 50%</p>
    <div class="card">
      <figure card="card__img">
        <img src="https://via.placeholder.com/600" width="600" height="600">
      </figure>
      <p class="card__txt">Lorem ipsum tempus fugit. Aut rerum nostrum qui adipisci est aut. Est error omnis sit velit.</p>
    </div>
  </div>
  
  <div class="col">
    <p class="explication">Without image, the text should expand to fill all the available space</p>
    <div class="card">
      <p class="card__txt">Lorem ipsum tempus fugit. Aut rerum nostrum qui adipisci est aut. Est error omnis sit velit.</p>
    </div>
  </div>
  
</div>

大卫说恢复莫妮卡

我最容易想到的一种方法是,以.card__text一种方式设置通用元素的样式,然后使用+组合器以不同的方式设置跟随.card__img元素的元素的样式

/* here we use Grid layout, setting two columns
   each of 1fr (using the repeat() function): */
.card {
  display: grid;
  grid-gap: 1em;
  grid-template-columns: repeat(2, 1fr);
}

/* setting the default presentation of the
   .card__txt elements; positioning them
   in the first column, spanning two
   columns: */
.card__txt {
  grid-column: 1 / span 2;
}

/* separately styling the .card__txt elements
   that follow a .card__img element; here we
   place them in the second column: */
.card__img + .card__txt {
  grid-column: 2;
}

/* Decoration & miscellaneous */

body {
  font-family: sans;
}

.container {
  display: grid;
  column-gap: 1em;
  grid-template-columns: repeat(auto-fill, 35em);
}

.container+.container {
  margin-top: 2em;
}

.explication {
  color: hsl(230, 100%, 45%);
  font-family: monospace;
  font-style: italic;
}

.card {
  border: 1px solid hsl(230, 100%, 45%);
  min-height: 18em;
}

.card__txt {
  background-color: hsl(0, 0%, 90%);
  margin: 0;
}

figure {
  margin: 0;
}

img {
  max-width: 100%;
  height: auto;
}


/* changes */

.card {
  display: grid;
  grid-gap: 1em;
  grid-template-columns: repeat(2, 1fr);
}

.card__txt {
  grid-column: 1 / span 2;
}

.card__img+.card__txt {
  grid-column: 2;
}
<div class="container">

  <div class="col">
    <p class="explication">If an image is present, it can't be wider then 50%</p>
    <div class="card">

      <!-- Note the correction, in your posted code the following
           was written:
      <figure card="card__img">
      I corrected 'card' to 'class' -->
      <figure class="card__img">
        <img src="https://via.placeholder.com/600" width="600" height="600">
      </figure>
      <p class="card__txt">Lorem ipsum tempus fugit. Aut rerum nostrum qui adipisci est aut. Est error omnis sit velit.</p>
    </div>
  </div>

  <div class="col">
    <p class="explication">Without image, the text should expand to fill all the available space</p>
    <div class="card">
      <p class="card__txt">Lorem ipsum tempus fugit. Aut rerum nostrum qui adipisci est aut. Est error omnis sit velit.</p>
    </div>
  </div>

</div>

JS小提琴演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使一列占据缺失列的空间

如何获得一列以占据网页中其余水平空间的方法

如果另一列中不存在,如何更新第一个 NULL 列

pyspark dataframe如果不存在则添加一列

比较一列存在而另一列不存在的数据库中的记录

T-SQL 邏輯(存在一列但不存在另一列)

即使其中一列不存在,如何设置数据框中的列?

如果列中不存在NA,则用另一列中的值替换-sqldf

刪除列中不存在於另一列/工作表中的行

Postgres如果不存在则插入,如果非唯一列存在,则更新?

列不存在时的编译

列不存在

如何检查另一列中是否不存在一行?

SQL 获取一列的值,使得另一列中的某个值不存在

检索一列中不存在于另一列中的所有值

只要不存在,就将一列的值复制到另一列

使用 awk 传递第一列的特定字符串值,如果它不存在,那么应该传递 0 而不是 NULL?

vlookup,如果值不存在检查另一列 - Excel

Haskell, HDBC.Sqlite3 - 如果一列不存在,如何添加它?

SQL:即使这些值不存在,也获取另一列中值的行数

一列热编码序列,其值在测试中不存在

SQL查询以查找另一列中不存在ID的位置

SQLite子查询尝试查找另一列中是否不存在ID

如何返回另一列中不存在的数据?

R:先阅读第一列,然后阅读其余

当flex列换行时,如何使第二列不占据第一列的全部高度?

当列值不存在时选择最大列值?

当第一列是字符串而其余列是数字时,如何使用numpy.genfromtxt?

当第一列是字符串而其余列是数字时,如何使用numpy.genfromtxt?