Можно ли сделать div 50px менее 100% в CSS3? [Дубликат]

218

Можно ли сделать div 50px менее 100% в чистом CSS? Я хочу, чтобы <div> составлял всего 50 пикселей меньше 100%. Мне не нужен JavaScript.

  • 1
    @hakre - Ваша ссылка в CSS, и это в CSS3.
  • 2
    как CSS не CSS3 не CSS не CSS3 не CSS не ...? Если вы явно запрашиваете функцию CSS, которая была сформулирована только в версии 3, пожалуйста, попросите ее (не CSS вообще - да, ваше тело вопроса отличается от его названия здесь, так что не вините меня;))
Показать ещё 2 комментария
Теги:

6 ответов

271
Лучший ответ

Да, вы можете. Без использования IE expression() вы можете сделать это в CSS3, используя calc().

div {
    width: 100%;
    width: -webkit-calc(100% - 50px);
    width: -moz-calc(100% - 50px);
    width: calc(100% - 50px);
}

Демо: http://jsfiddle.net/thirtydot/Nw3yd/66/

Это сделает вашу жизнь намного проще. В настоящее время он поддерживается в трех основных браузерах: Firefox, Google Chrome (WebKit) и IE9: http://caniuse.com/calc

MDN: https://developer.mozilla.org/en/CSS/-moz-calc

  • 41
    Проблемы в том, что: а) вопрос не был ясен относительно ширины и высоты, и б) ответ на вопрос не самый лучший. Для ширины лучше использовать sandeep, для высоты - gilly3. Ответ ОП не поддерживается сегодня в какой-то важной статистике браузера. (IE7 / 8)
  • 16
    Кстати: без префикса версия должна идти после префиксной версии, а не до. См. Developer.mozilla.org/Writing_Forward_Compatible_Websites Также, по моему опыту, многие ситуации с calc () могут быть заменены на box-sizing .
Показать ещё 4 комментария
152

A DIV автоматически берет свою родительскую ширину. Поэтому нет необходимости определять width. Обычно он просто записывал бы это следующим образом:

div{
    margin-right:50px;
}

Отметьте fiddle

  • 11
    Как насчет этого против этого ?
  • 4
    @Chango - это просто удивительно, когда вы изменяете размер окна.
Показать ещё 2 комментария
37

Другой альтернативой является абсолютное позиционирование.

div {
    position: absolute;
    left: 0;
    right: 50px;
}

fiddle

Но решение Sandeep - это тот, который вы обычно должны использовать. Просто избегайте использования float. Это предотвращает естественное наполнение элементов контейнером.

7

Мое решение работает с float: left и без него.

HTML:

<div></div>

CSS

div {
    height: 20px;
    background: black;
    float: left;
    width: 100%;
    padding-right: 50px;
    box-sizing: border-box;
    background-clip: content-box; 
}​

Демо

Совместимость:
 Firefox 3.6, Safari 5, Chrome 6, Opera 10, IE 9

  • 2
    Элементы div в вашем методе по-прежнему занимают всю ширину экрана, поэтому, если вы поместите два из них, вы не сможете заставить их плавать рядом с другим.
4

jsFiddle

Использование дисплея block и margin. display:block, если он не объединен с определенным height/width, попытается заполнить его родительским.

header {
    width:100%;
    background:#d0d0d0;
    height:100%;
}
h1 {
    display:block;
    border:#000 solid 1px;
    margin:0 50px 0 0;
    height:100px;
}
<header>
    <h1></h1>
</header>
-5

Да, мы можем сделать это, сделав

#custom_div{
 width:100%;
 margin-right:50px;
 }

Спасибо

  • 4
    почему вы определяете ширину: авто;
  • 9
    Это тот же ответ, что и у sandeep, кроме width:auto; , который не имеет никакого эффекта. Ваш ответ не добавляет никакой ценности. Вместо того, чтобы публиковать собственную версию ответа sandeep, вы должны были проголосовать за ответ sandeep.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню