Почему позиция: фиксированная и ширина: 100% заставляют мой div выйти из оконных границ? [dубликат]

Поскольку строка назначается из char , а int неявно конвертируется в char .

320
задан Hailwood 7 March 2011 в 12:44
поделиться

14 ответов

box-sizing: border-box - быстрый и простой способ исправить это:

Этот будет работать во всех современных браузерах и IE8 +.

Вот демо: http://jsfiddle.net/thirtydot/QkmSk/301/

  .content {width: 100  %;  box-size: border-box;  }  

В современных браузерах не нужны браузерные префиксные версии ( -webkit-box-sizing и т. д.]

362
ответ дан thirtydot 16 August 2018 в 01:30
поделиться
  • 1
    Я не думаю, что это плохое решение. Как правило, обертывание элементов в дополнительном div является хорошим способом для элементов прокладки без нажатия общей ширины элемента за его родительским контейнером. – Jake Wilson 23 August 2011 в 23:13
  • 2
    Заполнение оберточного div также дает неидентичные результаты для добавления ввода к вводу напрямую. – Felix Fung 5 June 2012 в 01:27
  • 3
    @thirtydot У меня есть несколько более гибких и элегантных решений, которые сохраняют ширину ввода – Vladimir Starkov 28 June 2012 в 06:52
  • 4
    Вы только спасли меня от безумства, спасибо человеку. – magritte 9 May 2013 в 19:27
  • 5
    @thirtydot да, просто оставьте его сломанным для IE7 и пусть M $ исправить это :) – Petr Peller 4 July 2013 в 12:59

Использовать дополнение в процентах и ​​удалить из ширины:

 padding: 5%;  ширина: 90%;  
38
ответ дан Alex 16 August 2018 в 01:30
поделиться
  • 1
    Чистый и простой. – ripper234 13 December 2011 в 15:26
  • 2
    Fyi, это решение идеально подходит для негибких макетов. – muffs 15 December 2011 в 23:25
  • 3
    +1, Проблема с этим будет границами, которые я предполагаю. Обычно они выглядят «правильно». с 1 до 3 пикселей макс. Результаты слишком непредсказуемы, учитывая несогласованность браузера в отношении субпиксельного округления. – Alix Axel 31 January 2012 в 05:11
  • 4
    @AlixAxel попробовать мое решение – Vladimir Starkov 13 November 2012 в 12:53

Предполагая, что я в контейнере с заполнением 15px, это то, что я всегда использую для внутренней части:

  width: auto;  право: 15px;  слева: 15px;   

Это будет растягивать внутреннюю часть до любой ширины, которая должна быть меньше 15 пикселей с каждой стороны.

Приветствия

Энди

7
ответ дан Andology 16 August 2018 в 01:30
поделиться
  • 1
  • 2
    Это всего лишь половина ответа. положение элементов по умолчанию статично, поэтому left & amp; право здесь ничего не сделает. и ширина auto также является начальным значением, поэтому .. весь этот ответ делает ничего :) – honk31 14 September 2017 в 09:25

Использовать css calc ()

Супер простой и удивительный.

  input {width: -moz-calc (100% - 15px);  ширина: -webkit-calc (100% - 15px);  width: calc (100% - 15px);  }  

Как видно здесь: Ширина Div 100% минус фиксированное количество пикселей По webvitaly ( https://stackoverflow.com/users/713523 / webvitaly ) Исходный источник: http://web-profile.com.ua/css/dev/css-width-100prc-minus-100px/

Просто скопировал это здесь, потому что я почти пропустил это в другом потоке.

16
ответ дан Community 16 August 2018 в 01:30
поделиться
  • 1
    Вы должны вручную запрограммировать это. В идеале это автоматически определялось бы. – JackHasaKeyboard 14 August 2017 в 05:46

Как обернуть его в контейнер. Контейнер должен иметь стиль:

  {ширина: 100%;  граница: прозрачный прозрачный 10px;  }  
0
ответ дан Didier Aupest 16 August 2018 в 01:30
поделиться

Вы можете попробовать некоторые трюки для позиционирования. Вы можете поместить ввод в div с : относительный и фиксированную высоту, затем на входе есть позиция : абсолютная; left: 0; right: 0; и любое дополнение, которое вам нравится.

Пример в реальном времени

4
ответ дан Felix 16 August 2018 в 01:30
поделиться
  • 1
    В каких браузерах вы тестировали это? :( – thirtydot 7 March 2011 в 13:00
  • 2
    Вы ожидаете, что это сработает, но это просто не так. – thirtydot 7 March 2011 в 13:18
  • 3
  • 4
    Похоже, что он не работает с элементами & lt; input & gt; в Firefox (idk об IE). Однако он работает с & lt; div & gt; s. И нет, : block на & lt; input & gt; не работает: - / – Felix 7 March 2011 в 14:02

Вы можете сделать это:

  width: auto;  обивка: 20px;   
-8
ответ дан karthikr 16 August 2018 в 01:30
поделиться

Попробуйте следующее:

  ширина: 100%;  box-size: border-box;   
0
ответ дан Manolo Ramos 16 August 2018 в 01:30
поделиться

У меня была такая же проблема. Исправьте его так:

  width: 100%;  padding: 5px;  / * -------------- Теперь удалите из дополнения, добавленного вами --------------- * / margin: -5px;   

Приветствия

0
ответ дан manualva 16 August 2018 в 01:30
поделиться

Переместите поле ввода ввода в элемент оболочки.

  & lt; style & gt;  div.outer {background: red;  padding: 10px;  } div.inner {border: 1px solid # 888;  padding: 5px 10px;  фон: белый;  } вход {ширина: 100%;  border: none} & lt; / style & gt;  & lt; div class = "external" & gt;  & lt; div class = "inner" & gt;  & Lt; вход / & GT;  & Lt; / дел & GT;  & Lt; / дел & GT;   

См. пример здесь: http://jsfiddle.net/L7wYD/1/

2
ответ дан Martin Jespersen 16 August 2018 в 01:30
поделиться

Вот почему у нас есть box-sizing в CSS.

Я отредактировал ваш пример, и теперь он работает в Safari, Chrome, Firefox и Opera. Проверьте это: http://jsfiddle.net/mathias/Bupr3/ Все, что я добавил, это:

  input {-webkit-box-sizing: border-  коробка;  -moz-box-size: border-box;  box-size: border-box;  }  

К сожалению, старые браузеры, такие как IE7, не поддерживают это. Если вы ищете решение, которое работает в старых IE, проверьте другие ответы.

270
ответ дан Mathias Bynens 16 August 2018 в 01:30
поделиться
  • 1
    +1, но caniuse.com/#search=box-sizing IE 8? Кроме того, github.com/Schepp/box-sizing-polyfill , похоже, обеспечивает решение для IE 6-7. – Alix Axel 31 January 2012 в 05:07
  • 2
    +1, это здорово, если вы не заботитесь об IE (например, при использовании PhoneGap) – Luke B. 10 September 2012 в 16:06
  • 3
    Какое это волшебство? +1 для ответа и +1 для комментария выше меня (это именно то, что мне нужно для этого). – Eduard Luca 19 December 2012 в 23:29
  • 4
    Это должно быть поведение по умолчанию .. вместо +20 к ширине. Иногда CSS кажется серьезно испорченным. – Soth 9 May 2013 в 04:24
  • 5
    Чтобы прояснить поддержку размера окна в IE, для свойства IE box-sizing зависит от режима IE Document, он работает в режиме «Стандарт IE8», & Амп; выше. Таким образом, он будет работать в версии браузера IE8, также если режим документа «Режим стандартов IE8». Надеюсь это поможет. – Sanjeev 25 June 2014 в 09:03

Вот рекомендация из codeontrack.com , которая имеет хорошие примеры решений:

Вместо того, чтобы установить ширину div на 100%, установите ее в auto и убедитесь, что для параметра & lt; div & gt; установлено значение: block (по умолчанию для & lt; div & gt; ).

3
ответ дан Sumner Evans 16 August 2018 в 01:30
поделиться
  • 1
    Вы не должны отправлять ссылку напрямую. Вы можете включить информацию из этой ссылки. Причина в том, может быть, завтра эта ссылка не будет доступна, и ваш ответ будет более недействительным. – Amnesh Goel 21 September 2015 в 12:12

Просто понять разницу между шириной: auto; и ширина: 100%; Ширина: авто; будет (АВТО) MATICALLY рассчитать ширину, чтобы соответствовать точной заданной с оберткой div, включая прокладку. Ширина 100% расширяет ширину и добавляет отступы.

0
ответ дан user3849374 16 August 2018 в 01:30
поделиться
  • 1
    Можете ли вы включить пример, где это работает с & lt; input & gt ;? В противном случае вы просто отправляете людей на охоту на диких гусей. – Mr Lister 24 June 2018 в 10:55

Вы можете сделать это, не используя box-sizing и не очистить решения, такие как width ~ = 99% .

Демонстрация на jsFiddle : enter image description here [!d13]

  • Сохранять вкладку padding и border
  • Добавить на вход отрицательный горизонтальный margin = border-width + горизонтальное дополнение
  • Добавить в оболочку ввода горизонтальный padding , равный margin с предыдущего шага

HTML-разметка:

  & lt; div class  = "input_wrap" & GT;  & lt; input type = "text" / & gt;  & Lt; / дел & GT;   

CSS:

  div {padding: 6px 10px;  / * равно отрицательному значению поля ввода для мимического нормального `div` box-sizing * /} input {width: 100%;  / * сила расширения до ширины контейнера * / padding: 5px 10px;  border: none;  margin: 0 -10px;  / * отрицательный край = ширина границы + горизонтальное дополнение * /}  
25
ответ дан Vladimir Starkov 16 August 2018 в 01:30
поделиться
  • 1
    Это хороший трюк, чтобы использовать маржу для ввода и заполнения для обертки, чтобы компенсировать входное дополнение. – maulik13 12 September 2012 в 11:21
  • 2
    Согласитесь полностью !!! Я использовал это решение, и оно широко работает без каких-либо грязных трюков! Это должно было быть решением всех ответов. – Andre Figueiredo 11 September 2013 в 20:07
  • 3
    Я не совсем понимаю, какую роль играет отрицательная маржа, - все, что я знаю, это то, что если значение неверно, то окно заканчивается в одну сторону, но каким-то образом симметричный край фиксирует это – Casebash 18 November 2013 в 06:52
Другие вопросы по тегам:

Похожие вопросы: