I am not able to get text-overflow
ellipsis to work in a CSS grid. The text is truncated but the ellipsis dots don't show up. Here is my CSS:
.grid {
display: grid;
margin: auto;
width: 90%;
grid-template-columns: 2fr 15fr
}
.gridItem {
border: 1px solid red;
display: flex;
height: calc(50px + 2vw);
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
<div class="grid">
<div class="gridItem">Why no ellipsis on this div?</div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
</div>
If your text-overflow is not working you must ensure display, overflow and white-space CSS properties are set to proper values. Ellipsis works in the same way on all types of elements. But you need to use it with caution on Flex, CSS Grid or on a Table.
Inline overflow occurs when the text in a line overflows the available width without a breaking opportunity. To force overflow to occur and ellipses to be applied, the author must apply the nowrap value to the white-space property on the element, or wrap the content in a <NOBR> tag.
A text-overflow property in CSS is used to specify that some text has overflown and hidden from view. The white-space property must be set to nowrap and the overflow property must be set to hidden. The overflowing content can be clipped, display an ellipsis ('…'), or display a custom string.
To make an ellipsis work on a table cell, you can use the CSS display property set to its "block" or "inline-block" value. In our example below, besides the display property, we set the text-overflow to "ellipsis", use the "nowrap" value of the white-space property, set the overflow to "hidden".
To make the ellipsis work you need to target the text not the container.
In your code, you are setting the ellipsis on the flex container (a grid item):
.gridItem {
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
height: calc(50px + 2vw);
border:1px solid red;
}
The child of the container is the text. Except you can't apply any CSS directly to the text because it's an anonymous flex item (i.e., a flex item with no defined tags around it). So you need to wrap the text into an element and then apply the ellipsis code.
From this:
<div class="gridItem">Why no ellipsis on this div?</div>
To this:
<div class="gridItem"><span>Why no ellipsis on this div?</span></div>
Then you have to contend with the minimum sizing algorithm of flex items. This rule, set by default, states that a flex item cannot be smaller than its content along the main axis. The solution to this problem is to set the flex item to min-width: 0
, which overrides the default min-width: auto
.
.grid {
display: grid;
margin: auto;
width: 90%;
grid-template-columns: 2fr 15fr;
}
.gridItem {
display: flex;
align-items: center;
height: calc(50px + 2vw);
border: 1px solid red;
min-width: 0;
}
.gridItem > span {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
<div class="grid">
<div class="gridItem"><span>Why no ellipsis on this div?</span></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
<div class="gridItem"></div>
</div>
revised codepen
These posts provide more detailed explanations:
The issue seems to be that .gridItem
has display: flex;
styling on it, if you take that off it works. If you need to have display: flex;
on your grid items then this article may be helpful: https://css-tricks.com/flexbox-truncated-text/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With