css 如何制作角形材质卡片标题一行?

dwbf0jvd  于 2023-04-01  发布在  其他
关注(0)|答案(4)|浏览(124)

我无法强制mat-card-title保持在一行中并切断额外的文本。
我已经尝试了下面的css类(text-oneline)。

<mat-card>
  <mat-card-header>
    <mat-card-title class="text-oneline">Heeeeeellllllloooo</mat-card-title>
    <mat-card-subtitle>World!</mat-card-subtitle>
  </mat-card-header>
  <img mat-card-image [src]="icon_url" alt="App Icon">
  <mat-card-content>
    <p>Some Text</p>
  </mat-card-content>
  <mat-card-actions>
    <button mat-button>Hello</button>
  </mat-card-actions>
</mat-card>
.text-oneline {
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

现在,文本比卡片长。我希望文本停止,不要溢出卡片。我希望文本填充所有可用空间,但不要超过垫子卡片的宽度。
示例:https://angular-mat-card-example-4cb2wk.stackblitz.io
解决方案:
通过ב י的代码工作得很好,但只有在window.resize被触发后。我发现的最简单的解决方案是编辑mat-card-header

mat-card-header {
  display: flow-root;
}
cmssoen2

cmssoen21#

我可以提供两个解决方案,其中一个我真的不想给予,但它是一个解决方案。
我建议您使用的解决方案是删除 Package <mat-card-header>

<mat-card>
  <mat-card-title class="text-oneline">Heeeeeellllllloooo</mat-card-title>
  <mat-card-subtitle>World!</mat-card-subtitle>
  <img mat-card-image [src]="icon_url" alt="App Icon">
  <mat-card-content>
    <p>Some Text</p>
  </mat-card-content>
  <mat-card-actions>
    <button mat-button>Hello</button>
  </mat-card-actions>
</mat-card>

这会稍微改变布局,但是你可以通过添加你自己的css类或者用你自己的div Package 来解决这个问题,只是不要使用<mat-card-header>,因为它做了一些不容易规避的事情,但不是不可能的,就像你会在我的第二个解决方案中看到的那样,不是那么推荐的。
在第二个解决方案中,您将.text-online类移动到<mat-card-header>上,如下所示:

<mat-card>
  <mat-card-header class="text-oneline">
    <mat-card-title >Heeeeeellllllloooo</mat-card-title>
    <mat-card-subtitle>World!</mat-card-subtitle>
  </mat-card-header>
  <img mat-card-image [src]="icon_url" alt="App Icon">
  <mat-card-content>
    <p>Some Text</p>
  </mat-card-content>
  <mat-card-actions>
    <button mat-button>Hello</button>
  </mat-card-actions>
</mat-card>

你的css会变成:

.text-oneline ::ng-deep * {
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

我不建议你使用第二个解决方案!

使用::ng-deep被认为是非常糟糕的做法,因为它已经被弃用,不应该再使用了,但是到目前为止,Angular还没有提供替代方案。

zysjyyx4

zysjyyx42#

将您的卡片 Package 在div中,并将elementRef设置为div作为#card
然后将宽度设置为header作为卡的宽度[style.width.px]="width - 50"
在resize (window:resize)="width=card.getBoundingClientRect().width"上设置宽度参数
See working code

<div #card (window:resize)="width=card.getBoundingClientRect().width">
<mat-card>
  <mat-card-header>
    <mat-card-title class="text-oneline" [style.width.px]="width - 50">Heeeeeellllllloooo</mat-card-title>
    <mat-card-subtitle>World!</mat-card-subtitle>
  </mat-card-header>
  <img mat-card-image [src]="icon_url" alt="App Icon">
  <mat-card-content>
    <p>Some Text</p>
  </mat-card-content>
  <mat-card-actions>
    <button mat-button>Hello</button>
  </mat-card-actions>
</mat-card>
</div>

中央支助组

.text-oneline {
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}
7dl7o3gd

7dl7o3gd3#

使用CSS word-break:全部中断引用以下代码块

<mat-card>
  <mat-card-header>
    <mat-card-title  style="word-break: break-all">Heeeeeellllllloooo</mat-card-title>
    <mat-card-subtitle>World!</mat-card-subtitle>
  </mat-card-header>
  <img mat-card-image [src]="icon_url" alt="App Icon">
  <mat-card-content>
    <p>Some Text</p>
  </mat-card-content>
  <mat-card-actions>
    <button mat-button>Hello</button>
  </mat-card-actions>
</mat-card>
tjvv9vkg

tjvv9vkg4#

基于GiovanianswerhennyKo的评论:
你不必删除<mat-card-header>标签。只需添加下面的css:

mat-card-header {
    display: flow-root;
}

并使标题一行:

.text-oneline {
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
}

相关问题