【问题标题】:Make element fill rest of div without resizing Image使元素填充 div 的其余部分而不调整图像大小
【发布时间】:2015-06-17 20:07:39
【问题描述】:

我希望此导航栏中的徽标图像填充其高度,同时仍保持其纵横比。剩余的宽度应该由 ul 元素填充。
只要 ul 元素的宽度不是 100%,图像就会正确显示。

http://jsfiddle.net/5o0b4xLd/

我该怎么做?

代码:

<div id="navbar">
<div id="logoBox">
    <img src="http://i.imgur.com/wuRN2wD.png" id="logo">
</div>
<ul>
    <li>
        <a href="#fakelink">
            Item 1
        </a>
    </li>
    <li>
        <a href="#fakelink">
            Item 2
        </a>
    </li>
    <li>
        <a href="#fakelink">
            Item 3
        </a>
    </li>
    <li>
        <a href="#fakelink">
            Item 4
        </a>
    </li>
    <li>
        <a href="#fakelink">
            Item 5
        </a>
    </li>
</ul>

#navbar {
    display: flex;
    width: 80%;
    height: 3.8em;
    margin-top: 4em;
    margin-left: auto;
    margin-right: auto;
    background: #f39c12;
}

#logoBox {
    display: inline-block;
    *display: inline;
    height: 100%;
    float: left;
    margin-left: 1%;
}

#logo {
    max-height: 100%;
    max-width: 100%;
}

#navbar ul {
    display: inline-block;
    white-space: nowrap;
    vertical-align: top;
    overflow: hidden;
    width: 100%;
    height: 100%;
    right: 0;
    margin: 0;
    padding: 0;
}

#navbar li {
    display: inline-block;
    padding-left: 4%;
    margin-top: 1.9em;
    line-height: 0;
}

#navbar a {
    color: #FFFFFF;
    text-decoration: none;
    font-size: 1.25em;
}

【问题讨论】:

  • 你能发布一个想要结果的插图吗?
  • 它应该看起来像this。即使菜单项上的间距是错误的。

标签: html css image width


【解决方案1】:

您当前的问题在于 #logo 属性 - max-widthmax-height 实际上不会展开 div,除非里面有内容迫使它展开。此外,您还需要设置 background-size = cover 以保持纵横比。

试试这个:

#logo { max-height: 100%; height: 100%; background-size: cover; }

【讨论】:

  • 通过这些编辑,图像只是拉伸到底部,并且纵横比丢失了。
  • 确保从#logo 中删除max-width 属性并将width: 100%; 添加到#logobox。我在这里有一个可用的 JSFiddle:jsfiddle.net/vLk4xw8o
  • 现在导航栏出现在图像中。
  • 是的,我注意到在发布和编辑我的评论后不久 - 再次查看jsfiddle.net/vLk4xw8o
  • 是的 - 这与 #logobox#navbar ul 上的宽度计算不正确有关 - 将这两个宽度都更改为 auto 而不是 100% 并从 @ 中删除溢出属性987654335@ 显示所有菜单项:jsfiddle.net/vLk4xw8o/2
【解决方案2】:

在此处编辑您的 CSS,如下所示: 我添加了背景图像和背景大小以通过宽度缩放图像。还隐藏实际图像以使其只是一个占位符,其余代码都可以。

#logoBox {
    display: inline-block;
    *display: inline;
    height: 100%;
    float: left;
    margin-left: 1%;
    background:url(http://i.imgur.com/wuRN2wD.png) no-repeat;
    background-size:cover;
}

#logo {
    max-height: 100%;
    max-width: 100%;
    visibility:hidden;
}

【讨论】:

  • 通过这些编辑,图像被拉伸到底部,而纵横比丢失。
  • 长宽比没有丢失,只是图像的额外宽度被隐藏了。您必须牺牲那么多,否则您可以对徽标的像素大小、导航栏等进行精确计算以完全适合图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多