Скрыть частично скрытый элемент с помощью CSS
Дано:
<div class='row'>
<div class='c1'>hello</div>
<div class='c2'>bob</div>
</div>
<div class='row'>
<div class='c1'>this is a very long test test bc a</div>
<div class='c2'>bob</div>
</div>
<div class='row'>
<div class='c1'>this is a very long test test test test test</div>
<div class='c2'>bob</div>
</div>
CSS
.row .c1 {
position: absolute;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 200px;
z-index: 1;
background-color: red;
}
.row .c2 {
float: right;
background-color: green;
}
.row {
width: 200px;
position: relative;
}
.row:after {
clear: both;
content: "";
display: table;
}
Pen:
http://codepen.io/SamSaffron/pen/JtDHb
Есть ли какая-то фантазия CSS (или структура HTML5), которая может заставить c2
скрыть себя, как только текст в c1
начнет перекрываться?
Запрет на то, что является лучшим исполняемым JavaScript для этого?
![image]()
Ответы
Ответ 1
EDIT2: Изменен механизм сокрытия до visibility:hidden
, как указано в комментариях.
Здесь используется решение с использованием jQuery. Я также работаю над чистым решением JS. Эта же логика должна применяться.
CodePen на основе вашего.
В принципе, если ширина c1
плюс c2
больше ширины row
, скройте c2
. Я добавил overflow:hidden
в CSS для c2
и использовал .width(0)
, чтобы скрыть его, так как ваш c1
имеет position:absolute
и поэтому зависит от c2
, чтобы обеспечить высоту строки.дел >
Надеюсь, что вам нужно.
EDIT: Здесь же решение в чистом JavaScript. Это предполагает, что каждый row
имеет a c1
и a c2
.
CodePen
Ответ 2
да, вы можете попробовать использовать тот же HTML-код, который у вас есть, только с этим CSS:
.row .c1 {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 170px;
max-width: 170px;
z-index: 1;
background-color: red;
display:table-cell;
padding: 0px 5px;
}
.row .c2 {
position:absolute;
top:0;
right:-15px
/* half of the width */
;
background-color: green;
display:table-cell;
width:30px;
}
.row {
display:table;
width: 200px;
position: relative;
}
Смотрите здесь скрипку
Ответ 3
Я использовал jquery для решения этой проблемы...
$('.row').each(function(){
if($(this).find('.c1').width()+$(this).find('.c2').width()>$(this).width())
{
$(this).find('.c2').css({display:'none'});
$(this).find('.c1').css({position:'relative'});
}
});
== > , это автоматически примет вашу ширину .row, ширину .c2 шириной .c1, так как содержимое может меняться
jsfiddle