光标与 iOS(webkit)上的输入未对齐

Posted

技术标签:

【中文标题】光标与 iOS(webkit)上的输入未对齐【英文标题】:Cursor misaligned with input on iOS(webkit) 【发布时间】:2017-02-19 19:40:32 【问题描述】:

我的移动网站上有一个表格,在您点击“安排会议”后会打开。 表单的代码很简单:(如下所列)。一切都按预期工作,但是当我在移动 safari 上并使用自动填充联系人功能时,它会将我的 nextButton 的可点击区域完全移动到上方并与其背景分开。这里有什么线索吗?

function meetingSchedulerStepNameVerify()

    if(document.getElementById('meetingSchedulerInputFirstName').value != '' && document.getElementById('meetingSchedulerInputLastName').value != '')
    
        document.getElementById('meetingSchedulerStepNameNextButton').style.backgroundColor = '#5efb7c';
        return true;
    
    

function meetingSchedulerStepNameNextButtonPressed()

    if(document.getElementById('meetingSchedulerInputFirstName').value != '' && document.getElementById('meetingSchedulerInputLastName').value != '')if (document.getElementById('meetingSchedulerStepNameNextButton').style.backgroundColor == 'rgb(94, 251, 124)')
    
        alert('yes');
        document.getElementById('meetingSchedulerStepName').style.display = 'none';
        document.getElementById('meetingSchedulerStepAddress').style.display = 'block';
        document.getElementById('meetingSchedulerStepAddressPromptName').innerhtml = document.getElementById('meetingSchedulerInputFirstName').value;
    
    else
    
        alert(document.getElementById('meetingSchedulerStepNameNextButton').style.backgroundColor);
    
#meetingSchedulerStepAddress
             
                display:none;
                width:100%;
                text-align:center;
            
                #meetingSchedulerStepAddressPrompt
                
                    width:100%;
                    font-size:4.5em;
                    font-family:Roboto;
                    padding-top:.5em;
                    padding-bottom:.5em;
                    background-color:#ffbd4b;
                    border-radius:2vw;
                    -webkit-border-radius:2vw;
                    -moz-border-radius:2vw;
                
                #meetingSchedulerStepAddressInputWrapper
                
                    margin-top:5em;
                
                .meetingSchedulerStepAddressLine
                
                    display:flex;
                    width:100%;
                
                    #meetingSchedulerStepAddressInputLine1
                    
                        width:100%;
                    
                    
                    #meetingSchedulerStepAddressInputCity
                    
                        width:100%;
                    
                    #meetingSchedulerStepAddressInputState
                    
                        width:50%;
                    
                    #meetingSchedulerStepAddressInputZipcode
                    
                        width:50%;
                    
                .meetingSchedulerStepAddressInput
                
                    font-size:4em;
                    font-family:Roboto;
                    text-align:center;
                    border:0;
                    -webkit-appearance: none;
                
                #meetingSchedulerStepAddressTransitionWrapper
                
                    margin:0 auto;
                    margin-top:10em;
                    width:50em;
                    height:10em;
                
                    #meetingSchedulerStepAddressBackButton
                    
                        height:10em;
                        width:15em;
                        background-color:red;
                        float:left;
                        background-image:url(../../../images/home/mobile/meetingSchedulerBackButton.png);
                        background-position:center;
                        background-size:6em 6em;
                        background-repeat:no-repeat;
                        border-radius:3vw;
                        -webkit-border-radius:3vw;
                        -moz-border-radius:3vw;
                    
                    
                    #meetingSchedulerStepAddressNextButton
                    
                        width:30em;
                        height:10em;
                        background-color:lightgray;
                        float:right;
                        border-radius:3vw;
                        -webkit-border-radius:3vw;
                        -moz-border-radius:3vw;
                    
                        #meetingSchedulerStepAddressNextButtonText
                        
                            font-family:Roboto;
                            font-size:6em;
                            padding-top:.1em;
                        
<div id="meetingSchedulerStepAddressInputWrapper">
                        <div class="meetingSchedulerStepAddressLine">
                            <input id="meetingSchedulerStepAddressInputLine1" class="meetingSchedulerStepAddressInput" name="address-line1" placeholder="555 Street Name"/>
                        </div>
                        <div class="meetingSchedulerStepAddressLine">
                        <input id="meetingSchedulerStepAddressInputCity" class="meetingSchedulerStepAddressInput" name="address-level2" placeholder="City"/>
                        </div>
                        <div class="meetingSchedulerStepAddressLine">
                            <input id="meetingSchedulerStepAddressInputState" class="meetingSchedulerStepAddressInput" name="address-level1" value="NJ" placeholder="ST"/>
                            <input id="meetingSchedulerStepAddressInputZipcode" class="meetingSchedulerStepAddressInput" name="postal-code" type="number" value="08008" placeholder="Zipcode"/>
                        </div>
                    </div>
                    <div id="meetingSchedulerStepAddressTransitionWrapper">
                        <div id="meetingSchedulerStepAddressBackButton"></div>
                        <div id="meetingSchedulerStepAddressNextButton"><div id="meetingSchedulerStepAddressNextButtonText">next</div></div>
                    </div>

【问题讨论】:

实际上,onclick 与所有 div 不对齐,而不仅仅是下一个按钮。 【参考方案1】:

我不确定是什么导致了这个错误,但我通过调用document.getElementById('meetingSchedulerStepNameNextButton').scrollIntoView(); 缓解了症状并解决了问题。

【讨论】:

【参考方案2】:

这是由于 webkit modal caret bug https://bugs.webkit.org/show_bug.cgi?id=176896 导致的,最终在 ios 11.3 beta 2 中得到解决

【讨论】:

以上是关于光标与 iOS(webkit)上的输入未对齐的主要内容,如果未能解决你的问题,请参考以下文章

Material UI:底部导航与 iOS 上的 Progressive Web App (PWA) Safari 对齐

为啥使用 :before 高度时,WebKit 上的对齐标记列表不同?

iOS 或 Android 上的 WebKit 开发中的陷阱/错误

在 WebKit 中为只读输入显示文本光标

iOS UITextField光标/文字起始位置

微信小程序 数字文本中含有数字1的文本在ios上的表现和安卓不一致,数字未对齐