【问题标题】:CSS - Make SPAN extend to end of its container / fill empty space?CSS - 使 SPAN 扩展到其容器的末尾/填充空白空间?
【发布时间】:2012-08-10 18:39:13
【问题描述】:

我正在为以下网站设计主题(由 Network Solutions nsCommerceSpace 提供支持)的 HTML 布局:

<div id="ctl00_breadcrumb" class="breadcrumb">
   <span id="ctl00_breadcrumbContent">
      <span><a href="/">[Name of Webstore]</a></span>
      <span>&nbsp;&gt;&nbsp;</span>
      <span><a href="/page.aspx">Page</a></span>
      <span>&nbsp;&gt;&nbsp;</span>
      <span>Here is a very long title of a product that is causing me much frustration because it jumps out of place.</span>
   </span>
</div>

自动生成带有&lt;span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;的span标签来分隔每个项目。

这是我的问题:http://jsfiddle.net/5fvmJ/

有没有办法让最后一个 SPAN 标记填充空白空间,并在它碰到右侧时结束?我只会使用overflow: hidden; 来隐藏多余的文字。

有什么想法吗?我知道拥有所有 SPAN 会使这变得困难,但它是网站的内置功能,我无法更改。

【问题讨论】:

    标签: css css-float width html


    【解决方案1】:

    我想我找到了一个纯 CSS 解决方案。你只错过了两件事:

    • 你必须在&lt;span&gt;标签中只使用display: inline-block而不使用float: left,因为浮动实际上与行内块元素相矛盾。
    • 您必须在父 &lt;div&gt; 中使用 white-space: nowrap

    这样你就不需要为任何东西指定宽度。 :)

    JSFiddle 演示

    http://jsfiddle.net/yz9TK/

    CSS

    (我稍微整理了一下)

    @import url(https://fonts.googleapis.com/css?family=Open+Sans);
    
    body {
        background: #212121;
        color: #FFF;
    }
    
    #ctl00_breadcrumb {
        height: 45px;
        width: 960px;
        background-color: #707070;
        line-height: 45px;
        font-size: 16px;
        font-family: Helvetica, sans-serif;
        border-radius: 10px;
        border: 1px solid #585858;
        text-shadow: 0px -1px 0px rgba(0,0,0,0.5);
        -webkit-box-shadow:  0px 0px 15px 0px rgba(0, 0, 0, .75);
        box-shadow:  0px 0px 15px 0px rgba(0, 0, 0, .75);
        white-space: nowrap;
        overflow: hidden;
    }
    
    #ctl00_breadcrumbContent span {
        display: inline-block;
        padding: 0px 10px;
        line-height: 45px;
        font-size: 18px;
        font-family: Helvetica, sans-serif;
    }
    
    #ctl00_breadcrumbContent span a { 
        padding: 0;
        margin: 0;
        color: #FFF;
        text-decoration: none;
        line-height: 45px;
        font-size: 18px;
        font-family: Helvetica, sans-serif;
    }
    
    #ctl00_breadcrumbContent span:nth-child(even) {
        width: 0;
        height: 0;
        padding: 0;
        margin: -22px -4px -16px -4px;
        overflow: hidden;
    }
    
    #ctl00_breadcrumbContent span:nth-child(1) { 
        border-radius: 10px 0px 0px 10px;
        background-color: #404040;
    }
    
    #ctl00_breadcrumbContent span:nth-child(2) {
        border-top: 22px solid #505050;
        border-bottom: 23px solid #505050;
        border-left: 15px solid #404040;
    }
    
    #ctl00_breadcrumbContent span:nth-child(3) {
        background-color: #505050;
    }
    
    #ctl00_breadcrumbContent span:nth-child(4) { 
        border-top: 22px solid #606060;
        border-bottom: 23px solid #606060;
        border-left: 15px solid #505050;
    }
    
    #ctl00_breadcrumbContent span:nth-child(5) {
        background-color: #606060;
    }
    
    #ctl00_breadcrumbContent span:nth-child(6) { 
        border-top: 22px solid #707070;
        border-bottom: 23px solid #707070;
        border-left: 15px solid #606060;
    }
    
    #ctl00_breadcrumbContent span:nth-child(7) { 
        background-color: #707070;
    }
    
    #ctl00_breadcrumbContent span:nth-last-child(1) {
        background-color: #707070;
    }
    
    #ctl00_breadcrumbContent span:nth-last-child(2) {
        border-top: 22px solid #707070;
        border-bottom: 23px solid #707070;
    }
    

    【讨论】:

    • 太棒了,好先生。正是我想要的。道具给你。非常感谢。
    【解决方案2】:

    这个 span 类对我有用...

    span.empty_fill {
        display:block;
        overflow:hidden;
        width:100%;
        height:100%;
    }
    

    基本上是这样用的……

    <div class='banner'><a href='/'><span class='empty_fill' /></a></div>
    

    【讨论】:

      【解决方案3】:

      尝试使用display:block EX 设置跨度样式:

      &lt;span style="display:block"&gt; Here is a... &lt;/span&gt;

      【讨论】:

      • 与 overflow:hidden 一起使用时不会做任何改变吗? display:block 的目的是强制 span 更像一个 div
      • 这不是一个完整的解决方案,但它可以作为一个修复?添加 display:block 允许您为跨度设置固定宽度...仍然不确定为什么溢出在 Fiddle 上的示例中不起作用
      • 哦,如果指定了宽度,它可以工作,但这是我的问题...我没有可以设置的值,因为它总是需要不同,因为页面/类别的长度不同。
      【解决方案4】:

      两种不同的答案,都不是很好:

      1. http://jsfiddle.net/5fvmJ/14/:为最后一个 span 设置 max-width,以确保背景不会跳跃。然后,您应该确保文本不会脱落。

      2. 在不改变任何宽度的情况下,获取文本尺寸,并仅显示附加了... 的子字符串,该子字符串保留在栏内:http://jsfiddle.net/5fvmJ/19/。你应该动态地这样做。 (Calculate text width with JavaScript)

      【讨论】:

      • 1) 这可行,但宽度总是不同,因为“页面”标题因您查看的类别而异。
      • 2) 不确定这是否可以使用 JavaScript 或 jQuery 完成?服务器不能接受任何服务器端代码...只有客户端。
      • 查看编辑中的链接 2.,对于 1:您没有设置宽度,而是设置最大宽度。如果文本小于宽度,它将正常适应。
      • 是的,但是如果我有一个名为“类别”的类别,宽度会比“非常长类别”的宽度大。现在文本会再次跳转。所以我必须设置最大值-width 是类别最大时该空间的最大宽度,但是如果我有一个短类别标题,页面标题会被修剪很多,并且会浪费很多可用空间。我希望你理解我要解释的内容。
      • 啊!是的,我现在明白了,您想在长项目后面附加更多项目。同样,我认为第二个选项是最好的:确定文本的宽度,如果太长则缩短并附加 ...
      【解决方案5】:

      您不需要指定宽度。 只需添加 'display:block;浮动:无;'到 CSS 类。 如果您不喜欢从新行开始的超出文本,可以选择添加“溢出:隐藏”。

      【讨论】:

        猜你喜欢
        • 2020-02-04
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多