2013-10-23 29 views
27

我试图将buttondisplay属性设置为table-cell,但其行为不像一个。将<button>的显示设置为表格单元

任何帮助,将不胜感激。

jsFiddle Demo(该演示包含一个固定的容器高度,但我需要它在没有它的情况下工作)

No fixed sizes Demo

DOM

<div class="container"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <button class="item"></button> 
</div> 

CSS

.container { 
    border: 5px solid blue; 
    display: table; 
    table-layout: fixed; 
} 
.item { 
    border: 3px solid red; 
    display: table-cell; 
} 

结果:

The result

编辑:我需要它完全像一个表格单元格,即使没有固定的大小。

请注意,某些解决方案似乎在Chrome上正常工作,但不适用于FF

+2

表细胞不上的按钮时,您可以使用内联样式,从而精确匹配。 http://stackoverflow.com/questions/12414573/display-table-cell-border-spacing-dont-work-with-buttons –

+4

真的我们用这个问题搞砸了我们:)好的一个 –

+4

虽然这里的大多数人都盲目50rep赏金,我想简单地问:你的目的是什么?为什么'

回答

15

如何使用label?这样你就可以获得按钮的功能,但是标签的可见性。经过Firefox和Chrome测试。表单提交的更新示例。

  • 否JavaScript是参与该单元区域的可点击
  • 没有一个固定的高度
  • 作品中的容器上
  • 作品时不同的细胞具有比一个与按钮
  • 作品更大的高度具有多个按钮的细胞

HTML:

<form onsubmit="alert(); return false;"> 
    <div class="container"> 
     <div class="item">1</div> 
     <div class="item">2</div> 
     <div class="item">3</div> 
    </div> 
    <div class="container"> 
     <div class="item">4</div> 
     <div class="item">5<br><br><br>Extended cell</div> 
     <label class="item">Button 1<button type="submit"></button></label> 
     <label class="item">Button 2<button type="submit"></button></label> 
    </div> 
</form> 

CSS:

.container { 
    margin: 10px; 
    border: 5px solid blue; 
    display: table; 
    table-layout: fixed; 
    width: 300px; 
} 
.item { 
    border: 3px solid red; 
    display: table-cell; 
} 
.item button { 
    background-color: transparent; 
    position: absolute; 
    left: -1000px; 
    height: 1px; 
    width: 1px; 
    overflow: hidden; 
} 

JSFiddle here.

+0

哇!这是一个很好的解决方案。但是,我无法使用剪辑,因为我需要它在IE8上受支持。你对这个焦点问题有另一个想法吗? – Itay

+0

我已更新代码以使用IE8。 '剪辑'是没有必要的。将它移出屏幕就足以让它工作。作为一个侧面说明,'剪辑'在IE8及以下版本中工作,你只需要使用它的非标准写作方式我相信:'clip:rect(1px 1px 1px 1px);' – SombreErmine

+1

这个主要问题是该标签无法使用标签进行聚焦,但真正的问题在于某些html元素在技术上并不允许显示更改,尽管某些浏览器会接受它们。 https://stackoverflow.com/a/37445333/1213795 –

0

button.item { width: 100%; height: 50px; }

+0

这并不坏,但如果我有多个按钮,它将不起作用。 http://jsfiddle.net/itay1989/Rhhh7/2/ – Itay

+0

+1对于你的解决方案,但我找不到适合FF的东西:S – Itay

1

你总是可以只包裹在一个div的按钮。

<div class="container"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 
    <div class="container"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"><button>Button</button></div> 
</div> 

CSS

button{ 
    width:100%; 
    height:2.75rem; 
} 

所以我想在这一天结束,这里的最终解决方案是它可能不是跨浏览器可能没有测量:(

+0

这不适合,因为在那种情况下,我需要按钮来伸展在整个div。使用绝对定位不适用于FF。 – Itay

+0

检查我的按钮CSS的编辑。 – usernolongerregistered

+0

此解决方案仅适用于固定尺寸http://jsfiddle.net/itay1989/Rhhh7/4/ – Itay

2

的固定单元http://jsfiddle.net/Rhhh7/7/

在这个例子中,我已经将按钮包装在div class =“item”中,就像其他div一样,但是这一次,我单独设计了按钮以延伸到他div的宽度和宽度。

.item button{ 
background:transparent; 
padding:0; 
border:0; 
width:100%; 
height:100%; 
} 

编辑:

这里的修复http://jsfiddle.net/Rhhh7/10/

为了解决Firefox的问题。

这个添加到类“项目”:

.item { 
    border: 3px solid red; 
    display: table-cell; 
    height:100%; 
    vertical-align:top; 
} 

为了使TD具有100%的高度,家长必须有100%的高度为好。 vertical-align:top然后将按钮设置为div的顶部而不是默认的中间。

+0

看起来像按钮的边界是拧和我们。 +1,但我仍然想知道为什么边界是这样做的。 – nkmol

+2

这在Firefox中无法正常工作:\ – usernolongerregistered

+1

谢谢但它在容器上没有固定高度时仍然无法工作 – Itay

0

这似乎工作: HTML

<div class="container"> 
    <div class="item">Some text to make the cell bigger</div> 
    <div class="item"></div> 
    <div class="item"><button class="button-item"></button></div> 
</div> 

CSS:

.container { 
    margin: 10px; 
    border: 5px solid blue; 
    display: table; 
    table-layout: fixed; 
    width: 300px; 
} 
.item { 
    border: 3px solid red; 
    display: table-cell; 
    background: transparent; 
} 
.button-item{ 
    border: 5px; 
    -moz-border:5px; 
    height:100%; 
    width: 100%; 
} 

Fiddle Demo

它的外观上FF:

enter image description here

+0

你在FF上测试它吗? – Itay

0

包装在一个div是一个解决方案,但我不明白为什么你不能改变显示属性按钮元素,如可以将所有其他元素。例如,您可以使链接标记充当div标记。

这可以防止做的东西像改变按钮的显示顺序: http://codepen.io/bakers37/pen/emoKvK

在镀铬/火狐这并不正常工作。

HTML

<div class="wrap"> 
<div class="btn bottom">Back</div> 
<div class="btn top">Continue</div> 
</div> 


<div class="wrap"> 
<button class="btn bottom">Back</button> 
<button class="btn top">Continue</button> 
</div> 

CSS

.wrap { 
display: table; 
margin: 20px 0 30px 0; 
width: 100%; 
} 

.btn 
{ 
display: block; 
width: 100%; 
margin: 5px 20px; 
padding: 10px; 
position: relative; 
background: #ccc; 
} 

.top { 
    display: table-caption; 
} 
+0

呃...这些是最流行的浏览器 – Itay

相关问题