Skip to content

Commit 39a5861

Browse files
devversionjelbourn
authored andcommitted
fix(list): incorrect padding for list-items with avatars, icons (#9500)
Currently list-items with an avatar, icon or checkbox have a both-sided margin for the text of 16px, while there is still a padding of 16px for the `mat-list-item-content` of 16px. This means that there is a 32px padding, that is not valid per specs. The padding for the mat-list-text should be just on the side of the secondary item (e.g. avatar, icon or checkbox), and the other side should have no padding, because the `mat-list-item-content` already has a padding for that one. ![image](https://user-images.githubusercontent.com/4987015/34438121-95d9eb66-eca4-11e7-83c6-64bafff75887.png) ![image](https://user-images.githubusercontent.com/4987015/34438122-9806cd1e-eca4-11e7-993f-8bb0e434a610.png) Fixes #9156
1 parent ffc5381 commit 39a5861

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

src/demo-app/list/list-demo.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ <h2>Selection list</h2>
111111
(change)="changeEventCount = changeEventCount + 1">
112112
<h3 mat-subheader>Groceries</h3>
113113

114-
<mat-list-option value="bananas">Bananas</mat-list-option>
114+
<mat-list-option value="bananas" checkboxPosition="before">Bananas</mat-list-option>
115115
<mat-list-option selected value="oranges">Oranges</mat-list-option>
116116
<mat-list-option value="apples">Apples</mat-list-option>
117117
<mat-list-option value="strawberries">Strawberries</mat-list-option>

src/lib/list/list.scss

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,35 @@ $mat-list-item-inset-divider-offset: 72px;
9292

9393
.mat-list-text {
9494
@include mat-line-wrapper-base();
95-
padding: 0 $mat-list-side-padding;
9695

97-
// We only want to override the padding if there isn't
98-
// an avatar or icon before the element. Since the ripple
99-
// will always be the first child in the container, we
100-
// check whether this element is the second child.
101-
&:nth-child(2) {
102-
padding: 0;
96+
// By default, there will be no padding for the list item text because the padding is already
97+
// set on the `mat-list-item-content` element. Later, if the list-item detects that there are
98+
// secondary items (avatar, checkbox), a padding on the proper side will be added.
99+
padding: 0;
100+
}
101+
102+
// There can be a secondary item (e.g. avatar-icon, checkbox) at the start of the
103+
// list-item. This means that there should be a padding for the mat-list-text on the start-side.
104+
.mat-list-item-content .mat-list-text:not(:nth-child(2)) {
105+
padding-right: 0;
106+
padding-left: $mat-list-side-padding;
107+
108+
[dir='rtl'] & {
109+
padding-right: $mat-list-side-padding;
110+
padding-left: 0;
111+
}
112+
}
113+
114+
// Reversed content is mainly used by the MatSelectionList for displaying the checkbox at the
115+
// end of the list option. Since there is a secondary item (checkbox) at the end of the
116+
// option, there needs to be a padding for the mat-list-text on the end-side.
117+
.mat-list-item-content-reverse .mat-list-text:not(:nth-child(2)) {
118+
padding-left: 0;
119+
padding-right: $mat-list-side-padding;
120+
121+
[dir='rtl'] & {
122+
padding-right: 0;
123+
padding-left: $mat-list-side-padding;
103124
}
104125
}
105126

0 commit comments

Comments
 (0)