如何在CSS中做到width = 100%-100px?


153

在CSS中,我该怎么做:

width: 100% - 100px;

我想这很简单,但是很难找到显示它的示例。


1
链接的问题stackoverflow.com/questions/11093943/…提供了一个有趣的但不完全向后兼容的答案,也许您也想看看。
2012年

5
对于遇到这个问题的任何人,乍得都回答说现代浏览器支持width: calc(100% - 100px);它,这只是一些答案,我希望问问者会更新他的问题:) :)
Anders M.

Answers:


277

现代浏览器现在支持:

width: calc(100% - 100px);

要查看支持的浏览器版本列表,请参见:可以将calc()用作CSS单位值吗?

有一个jQuery后备:CSS宽度:calc(100%-100px); 替代使用jQuery


13
我发现当我使用calc(100% - 6px)它时,例如,它显示为calc(94%),我不得不按如下所示对其进行转义,而现在可以了width: calc(~"100% - 6px");
nsilva 2016年

12
请注意,-(或+)字符周围必须有空格。这行得通:calc(100% - 100px); 但事实并非如此:calc(100%-100px);
自由落体者

令我有些惊讶的是,没有选项可以自动减去元素填充的2倍,这通常是一个非常常见的用例。例如,我最终不得不这样做padding: 0.25em; width: calc(100% - 2 * 0.25em - 2em);,并且如果必须对其进行修改,0.25em现在必须在两个地方进行更改。
cnst

非常感谢,也要注意它可以用于添加:(100%+ 100px)
Viktor Mellgren

99

你能不能嵌套一个div margin-left: 50px;margin-right: 50px;<div>width: 100%;


4
宽度:calc(100%-100px); 这是正确的答案。
苏珊

17

你可以试试这个...

<!--First Solution-->
width: calc(100% - 100px);
<!--Second Solution-->
width: calc(100vh - 100px);

vw:视口宽度

vh:视口高度


第一个解决方案是正确的,容器可能不是窗口,因此100vh可能不等于100%
Ben Taliadoros

1
我发现当我使用calc(100% - 6px)它时,例如,它显示为calc(94%),我必须按如下所示对其进行转义,现在它可以工作了width: calc(~"100% - 6px");
nsilva 2016年

4

我的代码,它适用于IE6:

<style>
#container {margin:0 auto; width:100%;}
#header { height:100px; background:#9c6; margin-bottom:5px;}
#mainContent { height:500px; margin-bottom:5px;}
#sidebar { float:left; width:100px; height:500px; background:#cf9;}
#content { margin-left:100px; height:500px; background:#ffa;}

</style>

<div id="container">
  <div id="header">header</div>
  <div id="mainContent">
    <div id="sidebar">left</div>
    <div id="content">right 100% - 100px</div>
  <span style="display:none"></span></div>
</div>

在此处输入图片说明


6
该Javascript是做什么用的?
Faiz 2014年

3

您需要为内容div设置一个容器,该容器希望是100%-100px

#container {
   width: 100%
}
#content {
   margin-right:100px;
   width:100%;
}

<div id="container">
  <div id="content">
      Your content here
  </div>
</div>

</div>如果内容div溢出,则可能需要在最后一个div之前添加一个清除div 。

<div style="clear:both; height:1px; line-height:0">&nbsp;</div>

1
这是行不通的。内容宽度将为100%:jsfiddle.net/cuezK/1
gilly3 2012年

2

将主体页边距设置为0,将外部容器的宽度设置为100%,并使用左右边距为50px的内部容器似乎可行。

<style>
body {
    margin: 0;
    padding: 0;
}

.full-width
{
    width: 100%;
}

.innerContainer
{
    margin: 0px 50px 0px 50px;
}
</style>

<body>
  <div class="full-width" style="background-color: #ff0000;">
    <div class="innerContainer" style="background-color: #00ff00;">
      content here
    </div>
  </div>
</body>

2

在使用引导面板时,我正在寻找如何在标题面板中放置“删除”链接,而不会被长邻居元素遮盖。这是解决方案:

的HTML:

<div class="with-right-link">
    <a class="left-link" href="#">Long link header Long link header</a>
    <a class="right-link" href="#">Delete</a>
</div>

CSS:

.with-right-link { position: relative; width: 275px; }
a.left-link { display: inline-block; margin-right: 100px; }
a.right-link { position: absolute; top: 0; right: 0; }

当然,您可以根据缩进来修改“ top”和“ right”值。资源



1

你能做:

margin-right: 50px;
margin-left: 50px;

编辑: 我的解决方案是错误的。Aric TenEyck发布的解决方案建议使用宽度为100%的div,然后使用边距嵌套另一个div似乎更正确。


3
如果这样做,总宽度为100%+ 100px会不会结束?
亚当·克鲁姆

:o(对不起。我应该删除我的帖子还是应该离开它,让不赞成票将其压低?
Tina Orooji 09年

1
否决票通常是为了鼓励您清理您的帖子,以便您可以重新获得因否决票而失去的代表点。如果您知道解决方案是错误的,则可以删除(无论有否)否决票或对其进行更新以使其正确。
09年

@AdamCrume-不 仅当您还指定时,情况才会如此width:100%。除非您通过明确指定width或使用float或绝对定位来覆盖它,否则div将自动填充该容器。在div中添加边距只会使它填充其容器,而不是由边距指定的数量。
gilly3 2012年

@aleemb-在这种情况下,向下投票由不了解css的用户完成,因为此答案完全正确。
gilly3 2012年

1

在外部div上填充将获得所需的效果。

<html>
<head>
<style>
    #outer{
        padding: 0 50px;
        border:1px solid black; /*for visualization*/
    }

    #inner{
        border:1px solid red; /*for visualization*/
    }
</style>
</head>
<body>
<div id="outer">
    <div id="inner">
        100px smaller than outer
    </div>
</div>
</body>
</html>

1

对于这种常见情况,有两种技术可以派上用场。每个都有其缺点,但有时都可能有用。

box-sizing:边框在项目的宽度包括填充和边框宽度。例如,如果将具有20px,20px填充和1px边框的div的宽度设置为100px,则实际宽度将为142px,但使用border-box,则padding和margin都在100px内。

.bb{
    -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
    -moz-box-sizing: border-box;    /* Firefox, other Gecko */
    box-sizing: border-box;     
    width: 100%;
    height:200px;
    padding: 50px;
}

这是一篇很棒的文章:http : //css-tricks.com/box-sizing/这是一个小提琴http://jsfiddle.net/L3Rvw/

然后是位置:绝对

.padded{
    position: absolute;
    top: 50px;
    right: 50px;
    left: 50px;
    bottom: 50px;
    background-color: #aefebc;
}

http://jsfiddle.net/Mw9CT/1/

当然,这两者都不是完美的,因为元素实际上是100%的宽度,而不是100%-100px(但是子div会是),因此框大小调整并不完全适合这个问题。绝对定位绝对不能在每种情况下都使用,但是只要设置了父级高度,通常就可以。


0

CSS不能用于动画或事件的任何样式修改。

唯一的方法是使用javascript函数,该函数将返回给定元素的宽度,然后减去100px,然后设置新的宽度大小。

假设您使用的是jQuery,则可以执行以下操作:

oldWidth = $('#yourElem').width();
$('#yourElem').width(oldWidth-100);

并使用本机javascript:

oldWidth = document.getElementById('yourElem').clientWidth;
document.getElementById('yourElem').style.width = oldWidth-100+'px';

我们假设您的CSS样式设置为100%;


0

您正在使用标准模式吗?我认为此解决方案取决于它。

如果您要制作2列,则可以执行以下操作:

<div id="outer">
    <div id="left">
        sidebar
    </div>
    <div id="main">
        lorem ispsum etc... 
    </div>
</div>

然后使用CSS设置样式:

div#outer
{
    width:100%;
    height: 500px;
}

div#left
{
    width: 100px;
    height: 100%;
    float:left;
    background: green;
}

div#main
{
   width: auto;
   margin-left: 100px; /* same as div#left width */
   height: 100%;
   background:red;
}

如果您不希望有2列,则可以删除 <div id="left">


0
<div style="width: 200px; border: 1px solid red;">
    <br>
    <div style="margin: 0px 50px 0px 50px; border: 1px solid blue;">
        <br>
    </div>
    <br>
</div>

0

您可以使用LESS进行研究LESS是一个预处理CSS的JavaScript文件,因此您可以在CSS中包含逻辑和变量。因此,对于您的示例,在LESS中,您将编写代码width: 100% - 100px;以实现您想要的目标:)


-1

你不能

但是,您可以使用边距来实现相同的结果。


-1

这有效:

margin-right:100px;
width:auto;

1
您能在回答中加上解释吗?
米哈尔Perłakowski

我尝试过:calc(100%-100px)并且结果在所有平台/浏览器上都不一致,然后我尝试真正简化并使用margin-right:100px; 宽度:自动; 它的工作
原理

calc是CSS3组件,此CSS将在支持CSS3的浏览器上运行。
苏珊

-2

简短的答案是您不要在CSS中执行此操作。Internet Explorer支持CSS表达式,但这不是标准的,例如FireFox等其他浏览器绝对不支持。

您最好在JavaScript中进行此操作。


是的,我必须将其保留在javascript中,我重新整理了一些代码,并希望删除执行tks的javascript。
fmsf

1
,如果你能避免它没有在JavaScript中做到这一点。HTML + CSS可能很棘手,解决方案可能并不明显,但是它几乎可以满足您的所有需求。将JavaScript用于静态布局几乎总是一个坏主意。
妮可
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.