我需要一个按钮和一个tex盒子彼此相邻,它们必须完美对齐,好像一个比另一个大,然后它会立即变得明显。
通常我不会理解浏览器之间的细微差别,但这两个输入位于每个页面上非常突出的位置,并且是网站的一个重要特征,因此它们必须在所有主要浏览器和缩放级别中完美对齐。 / p>
有没有人对如何实现这一点有任何建议。
正如我想要实现的目标的一个简单示例:新的谷歌主页。在开始输入自动完成功能后,搜索框将移动到顶部,蓝色按钮与文本框完全对齐。它完美地跨浏览器工作,但它在表格中标记。这是否表明这可能是实现这一目标的最佳方式?
答案 0 :(得分:21)
我建议尝试设置input
/ button
配对的父元素(在我的示例中为fieldset
),以便提供一个共同的font-size
和font-family
,然后使用em
度量来确定子元素的样式尺寸/填充/边距。理想地使用相同的CSS设置所有子元素的样式。
鉴于以下加价:
<form action="#" method="post">
<fieldset>
<label for="something">A label for the text-input</label>
<input type="text" name="something" id="something" />
<button>It's a button!</button>
</fieldset>
</form>
我建议类似,但适应您的特定设计,适用于以下CSS:
fieldset {
font-size: 1em;
padding: 0.5em;
border-radius: 1em;
font-family: sans-serif;
}
label, input, button {
font-size: inherit;
padding: 0.2em;
margin: 0.1em 0.2em;
/* the following ensures they're all using the same box-model for rendering */
-moz-box-sizing: content-box; /* or `border-box` */
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
<小时/> 在澄清这是为了复制/重现Google的相邻文本输入/提交按钮的样式:
fieldset {
font-size: 1em;
padding: 0.5em;
border-radius: 1em;
font-family: sans-serif;
border-width: 0;
}
label, input, button {
font-size: inherit;
padding: 0.3em 0.4em;
margin: 0.1em 0.2em;
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box;
box-sizing: content-box;
border: 1px solid #f90;
background-color: #fff;
}
input {
margin-right: 0;
border-radius: 0.6em 0 0 0.6em;
}
input:focus {
outline: none;
background-color: #ffa;
background-color: rgba(255,255,210,0.5);
}
button {
margin-left: 0;
border-radius: 0 0.6em 0.6em 0;
background-color: #aef;
}
button:active,
button:focus {
background-color: #acf;
outline: none;
}
虽然上面的工作在Chromium 12.x和Opera 11.5(Ubuntu 11.04)中运行良好,但Firefox似乎在后一个演示中显示了一两个像素。
答案 1 :(得分:7)
为了达到这个目的,我已经把头发拉了几个小时。经过大量的研究和实验,这里是解决OP(至少当代版本)Chrome,Firefox,IE,Opera和Safari的OP问题的方法:
是的,这就是它的全部。这是产生预期结果的最简约的CSS:
select, input, button {
border-width: 0px;
}
如果你需要进一步的造型,可以随意添加颜色,填充和边距 - 一切都会很好。但是,无论你做什么,都不要明确指定高度。这是唯一的交易破坏者,因为每个浏览器以不同的方式计算高度;有些会在选择而不是按钮上留下额外的一两个像素,有些会将它们留在按钮上方而不是选择,有些会按预期工作。
为了记录,Chrome在这方面似乎是最一致的(也就是说,如果你指定了高度) - 但是再一次,谁在乎。
答案 2 :(得分:4)
我认为这是非常防弹的:
http://codepen.io/herrfischer/pen/pbkyoJ
在两个元素上只使用:
display: inline-block;
padding: 10px 15px;
font-size: 20px;
border-radius: 0;
-webkit-appearance: none;
border: 1px solid transparent;
并使用“normalize.css” - 就是这样。在iPhone上看起来也不错:
答案 3 :(得分:1)
我在WEB中检查了很多来源,如何做到最好,跨浏览器,独立于主题。我希望我有解决方案,它不是100%(它需要通过垂直CSS填充修剪)。我的问题是使标签和文字输入具有相同的宽度和紧凑。
希望的结果: 我通过几个实验找到的解决方案由我的博客描述:http://vasvadev.blogspot.cz/2013/02/css-exact-same-height-and-alignment-of.html
解 CSS:
div.lf-ui-label {
margin: 0px;
font-size: inherit;
font-weight: bold;
background-color: #CCCCCC;
border-width: 0px;
display: inline-block;
vertical-align: middle;
overflow: hidden;
padding-top: 4px;
padding-bottom: 4px;
}
div.lf-ui-label + input.lf-ui-form-item {
padding: 5px 10px 5px 10px;
margin: 0px 0px 0px -10px;
font-size: inherit;
background-color: #2b55a8 !important;
vertical-align: middle;
border-width: 0px;
}
input.lf-ui-form-item {
background-color: #3b3b3b;
font-size: inherit;
padding: 4px 7px 4px 7px;
font-weight: bold;
border: none 0px;
outline: none;
}
HTML:
<div style="padding:10px; font-family: Calibri; font-size: 14px;">
<div class="lf-ui-label"
style="width:25%; padding-left: 10px;">Field text 14px </div><input
class="lf-ui-form-item" type="text" id="fr" name="fr" value="some value" style="width:71%" />
</div>
<div style="padding:10px; font-family: Calibri; font-size: 14px;">
Field text <input class="lf-ui-form-item" type="text" value="some other value"/>
</div>
我的实验代码由JSFIDDLE共享:css-exact-same-height-and-alignment-of.html
答案 4 :(得分:0)
当尝试以跨浏览器方式实现像素完美尺寸时,您应该首先考虑实施CSS重置。我更喜欢HTML5 Boilerplate,但您可以通过Google搜索找到其他内容。
CSS重置对于规范跨浏览器差异(尤其是处理表单时)非常重要。
答案 5 :(得分:0)
对于IE:您可以使用条件样式表来设置不同的样式:
<!--[if lt IE 7]> <html class="ie6" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="ie7e" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="ie8" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]-->
所以你会写:
.ie6 .my-button-class {
//
}
答案 6 :(得分:0)
我试图解决这个问题好几天,并且每个解决方案都不完整,并且不能在不同的浏览器中工作。
我发现此代码可以完成工作:
float: left;
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
height: 33px;
我更新了小提琴 - https://jsfiddle.net/p9maozk2/
答案 7 :(得分:0)
在2019年,您希望对表单使用CSS Grid,即使它们只有一个输入和一个按钮。
这可以节省很多痛苦。
我的工作示例正在进行很多工作,因此我不会在此处发布工作示例。相反,这是您需要了解的事情。
外部容器可以是form
,为此的CSS是display: grid; grid-template-rows: 2em; grid-template-columns: 1fr auto;
输入应该有一个标签,我将假定它被设置为隐藏。因此,输入的CSS具有grid-column: 1; height: 100%;
按钮具有grid-column: 2; height: 100%
您将使用边距,背景,填充,边框,边框半径等来做自己的事情。
使按钮与输入对齐的关键是在网格行中以ems或其他明智的响应式友好单位固定高度,并将输入和按钮设置为100%的高度。
我没有找到以上任何答案来产生像CSS Grid选项那样简洁且易于管理的代码,该选项对我在Firefox,Chrome和基于Webkit的浏览器上有效。
请注意,如果使用CSS Grid,则您的表单中需要精确的零个div
元素,但是,如果使用字段集,则可能需要将它们设置为display: content
,因为CSS Grid无法与{{ 1}}。
答案 8 :(得分:0)
现在任何尝试这样做的人都发现此解决方案似乎有效。尝试添加:
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
在两个元素上都保持当前css
的位置,这仍然会使它们稍微未对齐,然后在未对齐的元素中使用顶部填充。我发现:
padding-top: 2px;
为我工作。
答案 9 :(得分:-1)
使用带有图像的背景div作为输入。这更容易保持一致。此外,绝对定位适用于这种情况。
编辑:我5年前写过这个答案,现在有更好的方法。
答案 10 :(得分:-1)
.sdiv {
padding-top: 33px;
padding-left: 33px;
height: 123px;
border: 1px dotted red;
border-radius: 7px;
background-color: Black;
}
.sbtn {
float:left;
height:24px;
width: 24px;
padding: 3px 0 0 0;
border:none;
margin-top: 14px;
background-color: white;
}
.stxt {
width: 180px;
height:22px;
float:left;
border:none;
padding-left:3px;
margin-top: 14px;
}
&#13;
<div class="sdiv">
<form action="/">
<input class="stxt" type="text" placeholder="Search..." value="">
<button class="sbtn" type="submit">
<svg xmlns="http://www.w3.org/2000/svg" role="icon" viewBox="0 0 18 18" width="18" height="18">
<path fill-rule="evenodd" d="M 12.864 11.32 h -0.813 l -0.288 -0.277 A 6.66 6.66 0 0 0 13.38 6.69 a 6.69 6.69 0 1 0 -6.69 6.69 a 6.66 6.66 0 0 0 4.354 -1.617 l 0.278 0.288 v 0.813 L 16.467 18 L 18 16.467 l -5.136 -5.146 Z m -6.174 0 a 4.625 4.625 0 0 1 -4.632 -4.63 A 4.625 4.625 0 0 1 6.69 2.058 a 4.625 4.625 0 0 1 4.63 4.632 a 4.625 4.625 0 0 1 -4.63 4.63 Z" />
</svg>
</button>
</form>
</div>
&#13;
所有优秀答案!但没有一个真的是我想要的......
我从更直接的方法中获得了更多的满足感: