如何在输入中添加按钮


72

我正在努力实现这一目标: 在此处输入图片说明

我只想在输入元素中显示一个按钮,就像上面的图片一样


3
您应该可以使用CSS进行此操作,您尝试了什么?
Nick Pickering 2013年

Answers:


99

该按钮不在输入中。这里:

input[type="text"] {
    width: 200px;
    height: 20px;
    padding-right: 50px;
}

input[type="submit"] {
    margin-left: -50px;
    height: 20px;
    width: 50px;
}

示例:http//jsfiddle.net/s5GVh/


5
这是我的操作方式,但是我无法弄清楚如何防止文本与“提交”按钮重叠。
user1078385 2013年

6
如果您对padding-right和使用相同的宽度,则不会发生margin-left
SuN

1
+1用于在输入上进行右填充。解决标准浏览器(IE10,iOS等)的输入透明按钮与搜索按钮重叠的任何问题。
利亚姆·格雷

1
这不能回答问题。问题是如何将其放入输入中。我来这里的目的是寻找一种将其放入其中并根据值的变化切换按钮可见性的方法。
约翰·提登(JohanTidén)

4
@JohanTidén确实回答了这个问题。对于用户而言,该按钮位于字段内。当然,因为我们是编码人员,所以我们可以说出它并不是真正的内在……但这是重点。关键是为用户提供愉悦的体验。
萨米·福阿德

69

使用Flexbox,并将边框放在表单上。

现在(2019年)执行此操作的最佳方法是使用Flexbox。

  • 将边框放在包含元素上(在这种情况下,我已经使用了表单,但是可以使用div)。
  • 使用flexbox布局并排布置输入和按钮。允许输入拉伸以占用所有可用空间。
  • 现在,通过删除其边框隐藏输入。

运行下面的代码片段,看看会得到什么。

form {
  /* This bit sets up the horizontal layout */
  display:flex;
  flex-direction:row;
  
  /* This bit draws the box around it */
  border:1px solid grey;

  /* I've used padding so you can see the edges of the elements. */
  padding:2px;
}

input {
  /* Tell the input to use all the available space */
  flex-grow:2;
  /* And hide the input's outline, so the form looks like the outline */
  border:none;
}

input:focus {
  /* removing the input focus blue box. Put this on the form if you like. */
  outline: none;
}

button {
  /* Just a little styling to make it pretty */
  border:1px solid blue;
  background:blue;
  color:white;
}
<form>
  <input />
  <button>Go</button>
</form>

为什么这很好

  • 它将延伸到任何宽度。
  • 该按钮将始终与所需大小一样大。如果屏幕较宽,则不会拉伸;如果屏幕较窄,则不会收缩。
  • 输入的文本不会在按钮后面。

注意事项和浏览器支持

IE9中对Flexbox的支持有限,因此该按钮将不在窗体的右侧。IE9几年来一直没有得到Microsoft的支持,因此我个人对此非常满意。

我在这里使用了最少的样式。我已经离开了填充物以显示事物的边缘。显然,您可以使此外观看起来很圆,但要使其具有圆角,阴影等。


是什么指示按钮向右对齐?
克里斯蒂安·韦斯特贝克

@Neowizard您应该通过在OP的问题上添加评论来询问OP。您也可以拒绝接受的答案(这是为使事情变得正确的一个小小的贡献)
Christiaan Westerbeek '18

1
此解决方案不会在外部元素周围的焦点上显示蓝色边框。看到这里如何实现这一点:stackoverflow.com/questions/38644773/…–
罗伊·普林斯

@RoyPrins-好点。如果需要:focus-within,在表单上使用伪类将使您可以恢复蓝色焦点框。
superluminary

请避免多余的编辑。
TylerH's

29

.flexContainer {
    display: flex;
}

.inputField {
    flex: 1;
}
<div class="flexContainer">
    <input type="password" class="inputField">
    <button type="submit"><img src="arrow.png" alt="Arrow Icon"></button>
</div>


21

我为您找到了一个不错的代码:

的HTML

<form class="form-wrapper cf">
    <input type="text" placeholder="Search here..." required>
    <button type="submit">Search</button>
</form>

的CSS

/*Clearing Floats*/
.cf:before, .cf:after {
    content:"";
    display:table;
}

.cf:after {
    clear:both;
}

.cf {
    zoom:1;
}    
/* Form wrapper styling */
.form-wrapper {
    width: 450px;
    padding: 15px;
    margin: 150px auto 50px auto;
    background: #444;
    background: rgba(0,0,0,.2);
    border-radius: 10px;
    box-shadow: 0 1px 1px rgba(0,0,0,.4) inset, 0 1px 0 rgba(255,255,255,.2);
}

/* Form text input */

.form-wrapper input {
    width: 330px;
    height: 20px;
    padding: 10px 5px;
    float: left;   
    font: bold 15px 'lucida sans', 'trebuchet MS', 'Tahoma';
    border: 0;
    background: #eee;
    border-radius: 3px 0 0 3px;     
}

.form-wrapper input:focus {
    outline: 0;
    background: #fff;
    box-shadow: 0 0 2px rgba(0,0,0,.8) inset;
}

.form-wrapper input::-webkit-input-placeholder {
   color: #999;
   font-weight: normal;
   font-style: italic;
}

.form-wrapper input:-moz-placeholder {
    color: #999;
    font-weight: normal;
    font-style: italic;
}

.form-wrapper input:-ms-input-placeholder {
    color: #999;
    font-weight: normal;
    font-style: italic;
}   

/* Form submit button */
.form-wrapper button {
    overflow: visible;
    position: relative;
    float: right;
    border: 0;
    padding: 0;
    cursor: pointer;
    height: 40px;
    width: 110px;
    font: bold 15px/40px 'lucida sans', 'trebuchet MS', 'Tahoma';
    color: #fff;
    text-transform: uppercase;
    background: #d83c3c;
    border-radius: 0 3px 3px 0;     
    text-shadow: 0 -1px 0 rgba(0, 0 ,0, .3);
}  

.form-wrapper button:hover {    
    background: #e54040;
}  

.form-wrapper button:active,
.form-wrapper button:focus {  
    background: #c42f2f;
    outline: 0;  
}

.form-wrapper button:before { /* left arrow */
    content: '';
    position: absolute;
    border-width: 8px 8px 8px 0;
    border-style: solid solid solid none;
    border-color: transparent #d83c3c transparent;
    top: 12px;
    left: -6px;
}

.form-wrapper button:hover:before {
    border-right-color: #e54040;
}

.form-wrapper button:focus:before,
.form-wrapper button:active:before {
        border-right-color: #c42f2f;
}     

.form-wrapper button::-moz-focus-inner { /* remove extra button spacing for Mozilla Firefox */
    border: 0;
    padding: 0;
}    

演示:在小提琴上 来源:Speckyboy


5
有趣的事实:-9999px是您可以使用的最远的距离(afaicr)
Alfo

2
Alfo,当您在输入中获得大量文本时,文本与IE中的按钮重叠。这就是为什么这是公认的答案。
Aaronius

如果声明了不同的字体大小(较大的字体),则文本将不可见。
MEM

7
代码的全部内容,完全没有解释...解决方案的主要思想是什么?为什么会起作用?什么是可重复使用的片?
CF

3

这是在Bootstrap v3中最干净的方法。

<div class="form-group">
    <div class="input-group">
        <input type="text" name="search" class="form-control" placeholder="Search">
        <span><button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button></span>
     </div>
</div>

0

这可以通过使用内联块 JS小提琴来实现

<html>
<body class="body">
    <div class="form">
        <form class="email-form">
            <input type="text" class="input">
            <a href="#" class="button">Button</a>
        </form>
    </div>
</body>
</html>


<style>
* {
    box-sizing: border-box;
}

.body {
    font-family: Arial, sans-serif;
    font-size: 14px;
    line-height: 20px;
    color: #333;
}

.form {
    display: block;
    margin: 0 0 15px;
}

.email-form {
    display: block;
    margin-top: 20px;
    margin-left: 20px;
}

.button {
    height: 40px;
    display: inline-block;
    padding: 9px 15px;
    background-color: grey;
    color: white;
    border: 0;
    line-height: inherit;
    text-decoration: none;
    cursor: pointer;
}

.input {
    display: inline-block;
    width: 200px;
    height: 40px;
    margin-bottom: 0px;
    padding: 9px 12px;
    color: #333333;
    vertical-align: middle;
    background-color: #ffffff;
    border: 1px solid #cccccc;
    margin: 0;
    line-height: 1.42857143;
}
</style>

-4

您可以使用CSSbackground:url(ur_img.png)在输入框中插入图像,但要创建click事件,则需要合并箭头图像和输入框。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.