在《博客搭建小记》中,我曾记录过参考这个教程实现Category页面过长博文名省略的过程。但是今天发现了问题:在单个Category的子页面中,省略效果是正常的;但在所有Category的父页面中,过长的博文名没有省略。我原来的代码如下:
<style>     li {         height: 24.2px;         white-space: nowrap;         overflow: hidden;         text-overflow: ellipsis;     }
      @media screen and (max-width: 767px) {         li {             width: 240px;         }     }
      @media screen and (min-width: 768px) {         li {             width: 60vw;         }     } </style>
   | 
 
问题很明显。由于桌面端父页面中,文章列表是分为两列的,所以这时的li的宽度就会超过60vw。这样一来,博文名就不能省略。
于是修改代码。
/layout/_page/category.ejs
这部分控制的是子页面的显示,所以是无需修改的。但相对于教程,我还是将width修改为80vw,以适应不同设备的屏幕大小:
<style>     li {         white-space: nowrap;         overflow: hidden;         text-overflow: ellipsis;         width: 80vw;              } </style>
   | 
 
/layout/category.ejs
这部分我的修改如下:
1. 给li起一个类名
我起的名字是item-title。虽然很简单但还是放一下代码:
<li class="item-title"><%- post_item.title %></li>
   | 
 
2. 设置item-title的默认样式
默认样式指的是宽度超过992px时的样式,宽度更小时的样式之后会分别设置。代码:
 .item-title {     white-space: nowrap;     overflow: hidden;     text-overflow: ellipsis;     width: 270px; }
  | 
 
3. 分别设置不同宽度范围下的item-title宽度
我分了两种情况,代码如下:
@media (max-width: 992px) {     .item-title {         width: 250px;     } }
  @media (max-width: 768px) {     .item-title {         width: 230px;     } }
  | 
 
完整的CSS代码如下:
<style>     .item-title {         white-space: nowrap;         overflow: hidden;         text-overflow: ellipsis;         width: 270px;     }
      @media (max-width: 992px) {         .item-title {             width: 250px;         }     }
      @media (max-width: 768px) {         .item-title {             width: 230px;         }     } </style>
   | 
 
碎碎念
虽然这个解决方法看似很简单,但其中包含着我无数的错误尝试。一开始的思路是想要设定li的宽度为card-item宽度的80%,但是由于不能越级上访(?),只能将其设置为其直接父元素宽度的80%,这样就不对,每个标题都被省略,变得很短。
然后GPT让我用javascript来弄这个宽度,但我调试了很久也不行,不知道是哪里出了问题。
最后只好用蠢办法,在不同的情况下设定不同的绝对宽度。