How can I make a fluid width header with text-overflow ellipsis without wrapping?
I think I found you a better solution: http://jsfiddle.net/epyFT/9/
HTML:
<div class="container">
<h2>This is a very long heading that should wrap with ellipsis when too long, but have a button to it's right.</h2>
<button>Hello.</button>
</div>
<div class="container">
<h2>This is short.</h2>
<button>Sup</button>
</div>
CSS:
.container {
display: inline-block;
max-width:100%;
position: relative;
}
h2 {
padding-right: 200px;
box-sizing: border-box;
width: 100%;
display: inline-block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
word-break: break-all;
word-wrap: break-word;
}
button {
position: absolute;
width: 100px;
right: 95px;
top: 2em;
}
Here's another one
.container {
width: 100%;
}
.oneline {
display: inline-block;
vertical-align: middle;
max-width: 80%;
margin: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
<div class="container">
<h2 class="oneline">This is the header that should never wrap and elipse if it doesn't fit</h2>
<button>Button</button>
</div>
<div class="container">
<h2 class="oneline">Header</h2>
<button>Button</button>
</div>
JSFiddle
To align the buttons at the right side, add width: 80%;
to .oneline
.
Maybe something like this helps? http://jsfiddle.net/epyFT/3/
I'm not sure how to make the button align to the no-wrapped width of the container, and am only using percentage widths for the cells.
New code:
.container {
width: 100%;
display: table;
table-layout: fixed;
}
.container>div {
display: table-cell;
}
.cell1 {}
.wrap {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
word-break: break-all;
word-wrap: break-word;
}
.cell2 {
width: 60%;
}
h2 {
display: inline;
min-width: 200px;
}
button {
width: 100px;
}
<div class="container">
<div class="cell1">
<div class="wrap">
<h2>This is the header that should never wrap and elipse if it doesn't fit</h2>
</div>
</div>
<div class="cell2">
<button>Button</button>
</div>
</div>
<div class="container">
<h2>Header</h2>
<button>Button</button>
</div>