angular / components

Component infrastructure and Material Design components for Angular
https://material.angular.io
MIT License
24.37k stars 6.75k forks source link

mat-radio-button and mat-checkbox don't line wrap #10954

Open battre opened 6 years ago

battre commented 6 years ago

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?

hcbpassos commented 6 years ago

@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.

davidmorissette commented 6 years ago

Redefine that style:

.mat-radio-label {
   white-space: normal;
}
jek-bao-choo commented 5 years ago

Redefine that style:

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

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

sergioebc commented 5 years ago

=== styles.css ===

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

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

artesgo commented 5 years ago

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

PowerKiKi commented 4 years ago

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

bernardogontijo commented 3 years ago

@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.

battre commented 3 years ago

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

thiagoteberga commented 2 years ago

I solved the problem adding ::ng-deep.

::ng-deep.mat-radio-label {
  white-space: normal !important;
}
WilmerCordoba23 commented 3 months ago

Yo solucione el problema usando: ::ng-deep .mat-radio-label{ word-break: break-word !important; white-space: normal !important; }