Как обернуть строки во встроенный блок с помощью CSS? - PullRequest
22 голосов
/ 14 ноября 2011

У меня есть простая структура HTML ( jsfiddle ):

<li>
    <div class="buttons">
        <a href="done"><img src="done.png"></a>
    </div>
    <div class="owners">
        Даня Абрамов и Саша Васильев
    </div>
    <div class="text">
        трали-вали трали-вали трали-вали трали-вали
    </div>
</li>

buttons, owners и text имеют display: inline-block.

Это выглядит хорошо, когда text довольно мало:

enter image description here

Однако по мере роста текста элементы inline-block расширяются и в конечном итоге попадают за линию:

enter image description here

Это безобразно, и я бы хотел этого избежать.
Вместо этого я хочу добиться этого:

enter image description here

Если текст слишком велик, чтобы поместиться внутри элемента, я хочу, чтобы он был обернут линиями.
Я попытался установить float: left для элементов, но не смог заставить его работать.

Как правильно сделать это с помощью HTML и CSS (без таблиц)?

Ответы [ 4 ]

19 голосов
/ 14 ноября 2011

Точный результат, который вы хотите получить, может быть достигнут, если вы используете поплавки вместо display: inline-block.

См .: http://jsfiddle.net/thirtydot/CatuS/

li {
    overflow: hidden;
}
.buttons, .owners {
    float: left;
}
.text {
    overflow: hidden;
    padding-left: 4px;
}
4 голосов
/ 14 ноября 2011

Вы должны указать некоторые max-width в процентах:

<li>
    <div class="buttons" style="max-width:10%;">
        <a href="done"><img src="done.png"></a>
    </div>
    <div class="owners" style="max-width:30%;">
        Даня Абрамов и Саша Васильев
    </div>
    <div class="text" style="max-width:60%;">
        трали-вали трали-вали трали-вали трали-вали
    </div>
</li>
<!-- 10+30+60 = 100% -->
2 голосов
/ 12 июля 2016

Существует очень хорошее решение для flexbox, если у вас есть поддержка браузера:

/* flexbox additions */

ul li {
  display: flex;
}

.buttons {
  flex-shrink: 0;
}

.owners {
  flex-shrink: 0;
  margin-right: 6px;
}

/* original CSS (inline-block is technically no longer necessary) */

.buttons {
  display: inline-block;
}

.owners {
  display: inline-block;
}

.text {
  display: inline-block;
}

/* the rest is visual styling */

ul li {
  line-height: 1.5em;
  padding: 12px 8px 12px 8px;
  margin-bottom: 12px;
  margin-top: 6px;
  -moz-border-radius: 6px;
  border-radius: 6px;
  font-size: 15px;
  background-color: #DBEAFF;
  min-height: 23px;
}

.buttons {
  min-width: 13px;
  vertical-align: top;
  margin-top: 3px;
  margin-bottom: -3px;
}

.buttons a {
  padding: 13px 9px 5px 9px;
}
<ul>
  <li>
    <div class="buttons">
      <a href="done"><img src="http://clstr.org/static/images/tick.png"></a>
    </div>
    <div class="owners">
      <a>Даня Абрамов</a>
    </div>
    <div class="text">short text
    </div>
  </li>
  <li>
    <div class="buttons">
      <a href="done"><img src="http://clstr.org/static/images/tick.png"></a>
    </div>
    <div class="owners">
      <a>Даня Абрамов</a>
    </div>
    <div class="text">longer text longer text longer text longer text longer text longer text longer text longer text longer text
    </div>
  </li>
  <li>
    <div class="buttons">
      <a href="done"><img src="http://clstr.org/static/images/tick.png"></a>
    </div>
    <div class="owners">
      <a>Даня Абрамов</a> и <a>Саша Васильев</a>
    </div>
    <div class="text">
      longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text longer text
      longer text longer text longer text longer text longer text longer text
    </div>
  </li>
  <li>
    <div class="buttons">
      <a href="done"><img src="http://clstr.org/static/images/tick.png"></a>
    </div>
    <div class="owners">
      <a>Даня Абрамов</a> и <a>Саша Васильев</a>
    </div>
    <div class="text">
      трали-вали трали-вали трали-вали трали-вали
    </div>
  </li>
</ul>
2 голосов
/ 14 ноября 2011

Я думаю, вам нужно установить максимальную ширину в другом режиме отображения.

li {overflow:hidden;}
li div { float:left; }
.button{ max-width: 10%;}
.owners{ max-width: 20%;}
.text{ max-width: 70%;}

Смотрите новый результат здесь

Кстати, если вы используете inline-Блок, часть владельцев не останется на вершине.

Я изменил код в соответствии с вашими требованиями.:)

К вашему сведению, li {overflow:hidden;} - это способ создания контейнера, охватывающего его плавающие дочерние элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...