Подтвердить что ты не робот

CSS: Правильно ли, что текстовое содержимое div переполняется в дополнение?

Я ожидал, что заполнение внутри div останется в стороне от любого текста. Но, учитывая следующий html/css, текст содержимого выливается в заполнение,

<div class="foo">helloworld</div>

.foo {
  float: left;
  overflow: hidden;
  background: red;
  padding-right: 10px;
  width: 50px;
  border: 1px solid green;
}

Текст переполняет его размером 50 пикселей и заполняет 10px. Это по дизайну? Если это так кажется довольно глупым - заполнение не заполняется, если в нем есть вещи! Или я просто делаю что-то неправильно?

С уважением, новичок CSS.

4b9b3361

Ответ 1

Это правильное поведение. overflow: hidden будет скопировать содержимое, которое выходит за рамки . Прокладка находится внутри коробки, поэтому содержимое будет, если необходимо, переполняться в это пространство.

CSS Box model
(источник)

Чтобы получить эффект, к которому вы, похоже, стремились, одно решение обертывает ваш div.foo в другой div и вместо этого устанавливает фон на этом:

<div class="foowrapper">
    <div class="foo">purrrrrrrrr</div>
</div>

.foo {
    overflow: hidden;
    width: 40px;
}
.foowrapper {
    padding-right: 10px
    background: red;
    border: 1px solid green;
}

Ответ 2

Это потому, что вы ограничили ширину div до 50px, заставляя текст разливаться в дополнение. Удалите этот оператор ширины, и div будет расширяться и сжиматься с размером txt внутри него.

<div class="foo">helloworld</div>

.foo {
  float: left;
  overflow: hidden;
  background: red;
  padding-right: 10px;

  border: 1px solid green;
}

Надеюсь, что это поможет.

Ответ 3

Чтобы сделать это, я создал два div: один основной и одну оболочку. Я закончил тем, что определял высоту внутреннего главного div и скрывал переполнение, и это решило проблему. Вот код:

div.wrap {
  padding: 10px 10px 14px 10px;
  border:1px solid #000000;
  width: 200px;
  height: 70px; 
 }
div.main { 
  line-height: 1.3em;
  overflow:hidden; 
  width: 200px;
  height: 60px; /* PLAY WITH THE HEIGHT so that you can essentially use it to cover up the overflow */
 }

  <div class="wrap"><div class="main">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor labore et dolore magna aliqua. Ut enim ad minim veniam.</div></div>

Оболочка имеет отступы и границу (среди других атрибутов). У основного есть высота и атрибут переполнения - это те, которые решают проблему. Не стесняйтесь тестировать, и вы увидите, что независимо от того, сколько слов добавлено в основной div, они не будут отображаться частично или вообще. Кросс-браузер тоже.

Ответ 4

Единственный способ, которым я мог видеть эту работу, - избавиться от ширины: 50px... кроме того, что я был в тупике!?

Ответ 5

Другой подход - использовать контур-право как псевдо-прописку. Сначала уменьшите ширину вашего элемента на 10 пикселей (чтобы учесть дополнительную сумму, которую простирается контур). Затем добавьте сплошной красный контур 10px - прямо к вашему элементу. Контур будет охватывать любой "скрытый" текст.

Если есть какие-либо элементы, которые отображаются справа от foo, обязательно добавьте 10px к своему правому краю (поскольку контур не будет отбрасывать их в сторону, как это делает расширение обычной ширины).

.foo {
  float: left;
  overflow: hidden;
  background: red;
  padding-right: 10px;
  width: 40px;
  border: 1px solid green;
  outline-right: 10px solid red;
  margin-right: 10px;

}

Ответ 6

Я просто столкнулся с этой проблемой, и мне не нравится, как она работает. Независимо от того, насколько велика кошка, прокладка всегда будет между ней и коробкой! Поэтому при использовании переполнения: скрытый контент должен быть скрыт, когда он достигнет заполнения.

Вот хак, который не работает, если вы хотите получить границу, но можете для некоторых (меня): используйте границы в качестве дополнения.

<div class="foo">helloworld</div>

.foo {
  float: left;
  overflow: hidden;
  background: red;
  padding-right: 0; /* Removed the padding. */
  width: 50px;
  border-right: 10px solid red; /* 10px, background color or transparent. */
  box-sizing: border-box; /* I prefer this one too.. */
}

Ответ 7

Это сделано специально, так как overflow: hidden использует границу в качестве клипа, поэтому содержимое будет перетекать в отступ.

Здесь вы можете использовать тень блока того же цвета, что и фон, чтобы создать поддельные отступы, в которые текст не попадет.

box-shadow: 0px 0px 0px 5px black;

Вам придется корректировать поля и отступы, чтобы учесть это, но это самое безболезненное решение, которое я нашел до сих пор.