CSS: czy to prawda, że zawartość tekstowa div przelewa się do wypełnienia?

Spodziewałem się, że padding wewnątrz div pozostanie wolny od jakiegokolwiek tekstu. Ale biorąc pod uwagę następujący html / css, treść-tekst wylewa się do wypełnienia;

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

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

Tekst przelewa się do rozmiaru 50px i do paddingu 10px. Czy to z założenia? Jeśli tak, to wydaje się to dość głupie-padding to nie padding, jeśli ma coś w sobie! Czy robię coś nie tak?

Pozdrawiam, CSS newbie.
Author: Nigel Alderton, 2010-11-25

6 answers

To jest prawidłowe zachowanie. overflow: hidden spowoduje przycinanie zawartości, która rozciąga się poza pole . Wypełnienie jest wewnątrz pudełka, więc zawartość będzie szczęśliwie przelać się do tej przestrzeni, jeśli to konieczne.

CSS Box model
(Źródło)

Aby uzyskać efekt, do którego dążysz, jednym z rozwiązań jest owinięcie twojego div.foo w innym div I ustaw na nim tło, w ten sposób:

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

.foo {
    overflow: hidden;
    width: 40px;
}
.foowrapper {
    padding-right: 10px
    background: red;
    border: 1px solid green;
}
 129
Author: Brant Bobby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-17 21:34:33

To dlatego, że ograniczyłeś szerokość div do 50px, powodując, że tekst rozlewa się do wypełnienia. Usuń tę instrukcję width, a div rozszerzy się i zmniejszy się o rozmiar txt w nim.

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

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

  border: 1px solid green;
}
Mam nadzieję, że to ci pomoże.
 5
Author: wilsonpage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-31 23:38:06

Aby to zrobić, stworzyłem dwa divy: jeden główny i jeden wrapper. Skończyło się na zdefiniowaniu wysokości dla wewnętrznego głównego div I ukrywaniu przepełnienia, i to rozwiązało problem. Oto kod:

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>

Owijka ma wyściółkę i obramowanie (wśród innych atrybutów). Główny ma atrybut wysokości i przepełnienia - to te, które rozwiązują problem. Nie krępuj się przetestować, a zobaczysz, że bez względu na to, ile słów zostanie dodanych do głównego div, nie będą one wyświetlane częściowo lub w wszystkie. Przeglądarka też.

 4
Author: seon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-01 20:57:30

Jedyny sposób, w jaki to działa, to pozbycie się szerokości: 50px...poza tym się potknąłem!?

 3
Author: benhowdle89,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-25 16:22:58

Innym podejściem jest użycie prawa konturu jako pseudo-wypełnienia. Najpierw zmniejsz szerokość swojego elementu o 10px (aby uwzględnić dodatkową kwotę, którą kontur rozszerzy się). Następnie dodaj stały czerwony kontur 10px-prawo do elementu. Zarys obejmie każdy "ukryty" tekst.

Jeśli są jakieś elementy, które pojawiają się po prawej stronie foo, pamiętaj, aby dodać 10px do prawego marginesu (ponieważ obrys nie przesunie ich na bok, jak normalne rozszerzenie szerokości).

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

}
 1
Author: user1050268,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-14 02:19:36

Właśnie natknąłem się na ten problem, jak również i nie podoba się sposób, w jaki to działa. Bez względu na to, jak duży jest kot, wyściółka zawsze będzie między nim a pudełkiem! Dlatego podczas używania overflow: hidden zawartość powinna być ukryta, gdy dotrze do wypełnienia.

Oto hack, który nie działa w przypadku, gdy chcesz obramowanie, ale może dla niektórych (mnie): użyj obramowania jako wypełnienia.

<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.. */
}
 1
Author: LGT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-11 06:04:11