如何使用输入区域旁边的提交按钮制作自适应表单(电子邮件输入框)?

如何使用输入区域旁边的提交按钮制作自适应表单(电子邮件输入框)?

问题描述:

我试图使自适应形式:如何使用输入区域旁边的提交按钮制作自适应表单(电子邮件输入框)?

enter image description here

我设法有点让它但它是一个噩梦来编辑它,而不是真的那么自适应:

<div class="widget"> 
    <h2>Stay Tuned.</h2> 
    <div class="subscribe"> 
     <form action="" method="get"> 
      <input type="email" placeholder="Your Email" class="subscribe-input"> 
      <input type="image" src="https://i.imgur.com/7pyyReI.png" class="subscribe-image"> 
     </form> 
    </div> 
</div> 

h2 { 
    text-transform: uppercase; 
    color: #6c6969; 
    background: #f8f8f8; 
    border-left: 2px solid #58c93a; 
    padding: 17px 0 21px 20px; 
    font-weight: bold; 
    margin-bottom: 20px; 
} 

.subscribe { 
    box-sizing: border-box; 
    position: relative; 
    width: 100%; 
    height: 50px; 
} 

.subscribe-input { 
    box-sizing: border-box; 
    color: #b9b9b9; 
    font-size: 0.75em; 
    width: 100%; 
    border: 1px solid #e1e0e0; 
    padding: 20px 50px 20px 20px; 
    position: absolute; 
    top: 50%; 
    transform: translateY(-50%); 
} 

.subscribe-input::-webkit-input-placeholder { 
    color: #b9b9b9; 
} 

.subscribe-image { 
    position: absolute; 
    right: 20px; 
    top: 50%; 
    transform: translateY(-50%); 
} 

https://jsfiddle.net/cq8q0y61/

是否有解决方案易于编辑,比这个更适应?我不想强迫手动设置.subscribe类的高度,以便能够改变飞行字体大小,填充和.subscribe输入类的边距,并且能够随时更改按钮图像到另一个图像(具有另一个高度和宽度),以便输入文本和一个按钮仍然垂直居中,以便输入文本不会超过按钮。

做得更多一些挖后,我发现了如何更好使用Flex方法进行: https://jsfiddle.net/t3LLcu35/2/

但我仍然有一个问题:当我设置垂直垫衬或.subscribe输入级空间,图像被拉伸:

.subscribe-input { 
    padding: 50px 2px 50px 20px; 
} 

enter image description here

如何更改.subscribe输入边距和填充不拉伸的形象呢?

+0

第一个jsfiddle完全令人困惑,它自己的截图作为图像。 –

+0

@MrLister,你的意思是最后一张图片(这是问题中第二个jsfiddle的截图)?我将其更改为表单的代码和屏幕截图。 – KulaGGin

你的第二个小提琴看起来没问题,除此之外你还有display:flex的包装和表单。删除它的包装“订阅”。 (旁注:更好的是,给形式一个id或类,并在css中引用它)

然后到您的问题:有一个flex-propety调用align-items,它将对齐flex - 容器垂直于主轴。在这里你必须提供表格align-items: center。我发现this guide from css-tricks对于理解flex很不错。

+0

现在我想知道我该如何做到这一点,所以当我设置大填充: .subscribe-input {{0}} {padding:50px 2px 50px 20px; } 例如,如果我为图片本身设置了较大的衬垫,它就可以工作得很好,并将输入框居中: .subscribe-image {{0} {0} {0} {效果} padding:25px 20px 25px 0px; } 但正如我之前所说的,如果我为.subscribe-input设置填充,它将拉伸图像而不是将其集中。 这个想法是能够改变一个输入元素的填充/边距,而无需编辑表单中的所有其他元素。 – KulaGGin

+0

阅读答案并将其应用于您的问题。它会工作。我已经修改你的小提琴,https://jsfiddle.net/8x5mk271/我没有看到你的问题 –

+0

非常感谢。好的,所以问题在align-items:center ;.我添加了它,现在它工作。我真的不明白它是如何工作的,所以我想我会去阅读那篇文章。 – KulaGGin