Components: mat-radio-button and mat-checkbox don't line wrap

Created on 23 Apr 2018  路  8Comments  路  Source: angular/components

Bug, feature request, or proposal:

Proposal: change <mat-radio-button> or <mat-checkbox> to line-wrap its contents by default or add an option.

What is the expected behavior?

I can put a text into a <mat-radio-button> or <mat-checkbox> that is longer than what fits into the viewport.

What is the current behavior?

The content in a or does not line wrap. If you have a lot of text in a it gets cut at the end.

A workaround would be
<mat-radio-button><span style="white-space: normal;">{{mylongtext}}</span></mat-radio-button>

What are the steps to reproduce?

https://stackblitz.com/edit/angular-material2-issue-uaeetd?file=app/app.component.html

What is the use-case or motivation for changing an existing behavior?

I have a pretty narrow window and need to put checkboxes and radio buttons in there.

Which versions of Angular, Material, OS, TypeScript, browsers are affected?

I think all of them.

Is there anything else we should know?

G P4 materiacheckbox materiaradio

Most helpful comment

=== styles.css ===

.mat-checkbox-layout {
white-space: normal !important;
}

.mat-radio-label {
white-space: normal !important;
}

All 8 comments

@battre I think yout workaround is not very clear. For those who didn't understand in a first moment, like me, what you got to do is let your tag without any content and put your text outside it. E.g.:

<mat-radio-group>
  <div *ngFor="let item of items">
    <mat-radio-button [value]="item.id"></mat-radio-button>
    <!-- your content goes right below -->
    <span>{{ item.description }}</span>
  </div>
</mat-radio-group>

This should solve your problem.

Redefine that style:

.mat-radio-label {
   white-space: normal;
}

Redefine that style:

.mat-radio-label {
   white-space: normal;
}

white-space: normal didn't work. Not sure why. The <span></span> technique worked.

=== styles.css ===

.mat-checkbox-layout {
white-space: normal !important;
}

.mat-radio-label {
white-space: normal !important;
}

make sure to have your overrides in styles.scss
having it in spans isn't accessible

This is a (partial) duplicate of https://github.com/angular/components/issues/8416

@battre I think yout workaround is not very clear. For those who didn't understand in a first moment, like me, what you got to do is let your tag without any content and put your text outside it. E.g.:

<mat-radio-group>
  <div *ngFor="let item of items">
    <mat-radio-button [value]="item.id"></mat-radio-button>
    <!-- your content goes right below -->
    <span>{{ item.description }}</span>
  </div>
</mat-radio-group>

This should solve your problem.

doing this, the text will lose the click event that check the radio button.

Looks like the rendering of my comment has changed. I have escaped all HTML tags with backticks and it should be readable now.

Was this page helpful?
0 / 5 - 0 ratings