如何使锚点填充其包含 div 的高度

Posted

技术标签:

【中文标题】如何使锚点填充其包含 div 的高度【英文标题】:How to make an anchor fill the height of its containing div 【发布时间】:2013-06-02 15:47:35 【问题描述】:

我知道这对你们中的一些人来说真的很基础,但我没有足够的 CSS 知识来实现​​这一点。

我正在尝试制作我自己的微调器版本,它会与 jqueryui 主题挂钩,因此至少最初必须使用它们的类。我还需要使小部件能够动态更改其高度(和宽度)。

我的问题是我不知道如何调整按钮的大小以适应其容器的高度。如果我主动设置.ui-spinner div 的高度,则容器太小而无法容纳文本。如果我不这样做,那么 div 就更大了,所以锚点也需要很大,但我不知道有多大。使用开发人员工具查看它,我没有看到任何边距或填充来解释额外的大小。

我看到How to style an anchor tag to look like a button with the same height as the button? 不断弹出类似的问题,但我已经将样式设置为 inline-block。

这是我目前拥有的。我在http://jsfiddle.net/37za8/做了一个小提琴

html

<div class="ui-corner-all ui-widget ui-widget-content ui-spinner">
    <a class="ui-corner-all ui-widget ui-button ui-button-text-only ui-state-default" tabindex="-1" style="vertical-align: middle; margin: 0; display: inline-block;">
    <span class="ui-icon ui-icon-minusthick"></span>
</a>

    <input class="ui-spinner-input" style="margin: 0;" value="0" />

    <a class="ui-corner-all ui-widget ui-button ui-button-text-only ui-state-default" tabindex="-1" style="vertical-align: middle; margin: 0; display: inline-block;">
        <span class="ui-icon ui-icon-plusthick"></span>
    </a>
</div>

jQuery

var _selector = ".ui-spinner"

$(_selector + " .ui-spinner-input").css("height", "18px");
$(_selector + " a").css("height", "18px");

$(_selector + " .ui-spinner-input").css("width", "52px");
$(_selector + " a").css("width", "24px");
$(_selector + " span").css("margin-left", "4px");

只要结果是可动态调整的,我可以更改您所说的任何有帮助的内容。我相信这对你们大多数人来说很容易。提前致谢!

编辑

为了澄清,我试图最终模仿 jqueryui 微调器。我正在尝试制作一个可以在显示之前设置高度的小部件/组件。 jqueryui 处理它的一个简单示例是this fiddle。我构建的组件有一个 setHeight 函数,它将设置小部件的高度。就是在 jQuery 中设置高度的那两行。必须有某种方法来设置 css(或在必要时添加更多 jquery),以便我可以动态更改高度。

【问题讨论】:

你可以使用不同于 18px 的高度吗?我尝试了 24px,它看起来不错 - jsfiddle.net/37za8/1 哦,你已经回答过了:s 是的。碰巧当我将它设置为 18 时,框最终是 25 像素,所以 24-26 像素应该看起来不错。不过,这依赖于在开发工具中查找高度,然后进行硬编码。 所以你的问题是什么是正确的代码,可以推断出正确的像素数,这样你就不必硬编码了? CSS怎么样?你能重新定义css吗? 要么推断出正确的像素数,要么简单地让 css 手动完成。我可以改变任何东西,除了从 jqueryui 类开始的约束和高度可以动态调整。 【参考方案1】:

可以计算容器的高度,插入到“a”元素的高度中:

var _selector = ".ui-spinner"

var _inputvar = 25;

$(_selector).css("height", _inputvar);
$(_selector).css("line-height", "1");

console.log($(_selector).height());

$(_selector + " a").css("height", $(_selector).height());

$(_selector + " .ui-spinner-input").css("width", "52px");
$(_selector + " a").css("width", _inputvar);
$(_selector + " span").css(display:"inline-block",position:"static",marginTop:(_inputvar/10)+"px");

http://jsfiddle.net/37za8/13/

请注意,我删除了输入高度,取决于您设置的字体,您可能需要将其放回原处。 可以根据预期的值范围优化边距顶部值,我认为在这种情况下除以 10 可以达到某个点

通过 CSS 你可以做到这一点(但这真的取决于你打算如何动态)

.ui-spinner 
    height: 25px;

.ui-spinner .ui-icon 
    left:4px;

.ui-spinner  .ui-state-default 
    padding: 12px;

ui-spinner-input 
    width: 50px;

http://jsfiddle.net/37za8/9/

【讨论】:

这不是一个坏主意,但我无法让它动态工作 - jsfiddle.net/37za8/4 。如果我在输出之前设置了高度,它在控制台中是正确的高度,但仍然不好看。 为了更好地理解这一点,是否有某种代码可以动态设置高度?因为从外观上看,你真的不需要设置高度 这是一个简化版本。它旨在成为可以在多个应用程序中重用的组件。有些人希望它是 22 像素,有些人希望它是 28 像素。我需要能够将高度传递给它并让它正确绘制。 (我们可以假设我们不会传递小于字体的高度,但仅此而已。) 高度很容易适应,只需要将line-height固定为1,垂直对齐更难打破【参考方案2】:

如果你混合使用 css 和 jquery,你应该能够实现你想要的:

css

.ui-spinner,
.ui-spinner > a,
.ui-spinner-input box-sizing:border-box;
.ui-spinner > a width:24px; text-align:center;
.ui-spinner span.ui-icon left:50%; margin-left:-8px;
.ui-spinner-input width:52px;

jquery

var spinner = $(".ui-spinner"),
    children = spinner.children();

 spinner.height(48); //added for test purposes (if you change the height it should change the inner object heights)

children.height(spinner.height() - 2);  //minus 2 is because the box-sizing hasn't taken into account the borders for some reason

Example

【讨论】:

以上是关于如何使锚点填充其包含 div 的高度的主要内容,如果未能解决你的问题,请参考以下文章

如何实现div的高度100%填充

如何使弹性项目不填充弹性容器的高度? [复制]

如何删除填充顶部和底部以设置高度和宽度

让一个 div 填充剩余屏幕空间的高度

使一个 div 填充剩余屏幕空间的高度

使一个 div 填充剩余屏幕空间的高度