2016-08-17 14 views
5

अस्वीकरण - मैं समझता हूं कि सफारी में निश्चित तत्वों के आसपास प्रश्न मौजूद हैं, और निश्चित तत्व समर्थित नहीं थे, लेकिन अब और आगे हैं। हालांकि मुझे कोई प्रश्न नहीं मिल रहा है जो इस सटीक प्रश्न को संबोधित करता है। ,मोबाइल सफारी को फोकस पोजिशन को इनपुट फोकस पर पूर्ण करने से कैसे रोकें?

.sidebar { 
    position: fixed; 
    top: 10px; 
    right: 10px; 
} 

और एक अपेक्षाकृत लंबे पेज इनपुट तत्वों के साथ:

तय साइडबार, की तरह कुछ का सरलतम को देखते हुए।

जब कोई इनपुट तत्व केंद्रित होता है, तो कोई निश्चित तत्व पूर्ण हो जाता है - मैं समझता हूं कि क्यों सफारी व्यूपोर्ट को अस्वीकार करने की कोशिश कर रहा है - ठीक है, लेकिन हमेशा उपयुक्त नहीं है। मैं पूछता हूं कि मुझे उपयोगकर्ता के लिए सबसे अच्छा अनुभव चुनना है (मुझे स्वाभाविक रूप से सबसे अच्छा पता है)।

तो सवाल ..

वहाँ किसी भी तरह से के रूप में तय भी जब इनपुट तत्वों ध्यान केंद्रित कर रहे तय तत्वों को छोड़ने के लिए है?

मैंने स्क्रॉल पर मैन्युअल रूप से $(window).on('scroll', जादू और स्थिति तत्वों को करने का प्रयास किया है, लेकिन यह आईपैड पर काफी उत्साहजनक है।

+1

यदि आप अपने विशिष्ट परिदृश्य का एमसीवी उदाहरण प्रदान करना चाहते हैं तो हम चारों ओर खेल सकते हैं। यह एक ज्ञात मुद्दा है, और आज के रूप में सबसे अच्छा समाधान है कि उस तत्व को अपने आप को पूर्ण करने के लिए स्विच करें और इसे जावास्क्रिप्ट के साथ सेट करें, जहां सफारी इसे तोड़ नहीं पाएगी, यह भी हो सकता है: यह भी काम कर सकता है यदि हम पृष्ठ के शीर्ष पर एक फ़ील्ड पर हैं, तो ओवरफ़्लो छुपाएं, लेकिन मुझे यह दूसरा तरीका बहुत हैकी लगता है। –

+1

मैं इस शाम को एक छोटे से परिदृश्य को एक साथ रखने की कोशिश करूंगा। मैं ज्ञात मुद्दे बिट के बारे में सहमत हूं - मुझे डर है कि फाइनल सरल हो सकता है, जब आवश्यक हो तो मैन्युअल रूप से हस्तक्षेप और स्थिति पूरी तरह से हो सकती है – Chris

+0

कई SO प्रश्नों के संभावित डुप्लिकेट। विवरण के लिए https://gist.github.com/avesus/957889b4941239490c6c441adbe32398#gistcomment-2193547 देखें। –

उत्तर

3

Safari has supported position: fixed कम से कम संस्करण 9.2 के बाद से, लेकिन यदि आप कठिन समस्याएं देख रहे हैं, तो आप दस्तावेज़ तत्व और शरीर पूर्ण स्क्रीन बनाकर और फिर पूर्ण स्थिति का उपयोग करके निश्चित स्थिति प्रभाव बना सकते हैं। तब स्क्रॉलिंग शरीर के बजाए कुछ मुख्य कंटेनर तत्व में होती है। इस विधि का उपयोग कर मार्कअप में आपके "निश्चित" तत्व कहीं भी मौजूद हो सकते हैं।

jsfiddle here

html, 
body, 
.mainContainer { 
    height: 100%; 
    width: 100%; 
    overflow: hidden; 
    margin: 0; 
} 

.mainContainer { 
    overflow: auto; 
} 

.fixed { 
    position: absolute; 
    bottom: 20px; 
    left: 20px; 
} 
+0

प्रश्न "इनपुट फ़ोकस पर" निर्दिष्ट करता है, लेकिन आपका उदाहरण कोई टेक्स्ट इनपुट नियंत्रण प्रदान नहीं करता है जो वर्चुअल कीबोर्ड को सक्रिय कर सकता है। टेक्स्ट इनपुट इनपुट पर उपयोगकर्ता टैप होने तक चीजें पूरी तरह से दिखाई देगी। –

0

क्रम प्रभाव आप इच्छा आप लेआउट करने के लिए अपने दृष्टिकोण को बदलने की जरूरत को प्राप्त करने के। स्थिति के साथ साइडबार को पोजिशन करने के बजाए: निश्चित रूप से आपको स्थिति का उपयोग करने की आवश्यकता है: एक स्थिति के भीतर पूर्ण: रिश्तेदार कंटेनर जो उस स्थिति के भीतर व्यूपोर्ट की ऊंचाई पर सेट होता है: सापेक्ष कंटेनर आपको ओवरफ्लो-वाई का उपयोग करने वाले किसी अन्य div की आवश्यकता होती है: स्क्रॉल और - वेबकिट-अतिप्रवाह-स्क्रॉलिंग: स्पर्श

चेतावनी: मैं आम तौर पर हालांकि ब्राउज़र समर्थन नहीं है, मेरे अनुभव में यह janky हो जाएगा स्थिति टेबलेट पर तय & मोबाइल यदि संभव हो तो उपयोग करने से बचें और जावास्क्रिप्ट समाधान एक बहुत छोड़ होने के लिए वांछित, मेरी पहली प्रतिक्रिया डिजाइनर के साथ पैटर्न को चुनौती देना होगा। यदि मुझे डिज़ाइन दिया गया है जिसमें इनपुट तत्व होने पर एक निश्चित निश्चित तत्व शामिल है, तो मुझे विकास के मुकाबले डिज़ाइन समाधान की अधिक संभावना है क्योंकि आपके द्वारा वर्णित फ़ोकस समस्याओं को गुणवत्ता उपयोगकर्ता अनुभव को बाधित करना और बनाए रखना मुश्किल है । https://codepen.io/NeilWkz/full/WxqqXj/

यहाँ:

मार्कअप:

<div class="outer"> 
    <div class="sidebar"> 
    <ul> 
     <li>Dummy list nav or something</li> 

    </ul> 
    </div> 
    <div class="container"> 
     <input type="text" /> 
    <!-- I added 10000 inputs here as a demo --> 
</div> 
</div> 

सीएसएस: यदि आप अपने सिम्युलेटर (प्रस्तुतिकरण दृश्य) में खोलने के लिए के लिए

html,body{ 
-webkit-overflow-scrolling : touch !important; 
overflow: auto !important; 
height: 100% !important; 
} 
.outer { 
    position: relative; 
    overflow: hidden; 

/* I'm using Viewport Units here for ease, but I would more likely check the height of the viewport with javascript as it has better support*/ 
    height: 100vh; 
} 
.sidebar { 
    position: absolute; 
    top: 10px; 
    right: 10px; 
    /*added bg colour for demo */ 

    background: blue; 
} 
.container { 
    height: 100vh; 
    overflow-y: scroll; 
    -webkit-overflow-scrolling: touch 
} 
input { 
    display: block; 
} 

यहाँ एक CodePen है कोड के लिए संपादक देखें: https://codepen.io/NeilWkz/pen/WxqqXj

+0

यह काम नहीं करता है। –

+0

हाय ब्रायन, आपकी टिप्पणी के लिए धन्यवाद, कोर मैकेनिक अभी भी मोबाइल सफारी में काम करता प्रतीत होता है (मैंने अभी तक संपादक दृश्य में दिखाने के लिए कलम लिंक बदल दिया है। आप डेमो के साथ क्या समस्या देख रहे हैं? – NeilWkz

+0

व्यूपोर्ट की ऊंचाई आम तौर पर वर्चुअल कीबोर्ड दिखने, घूर्णन, और पता बार दिखाई देने/गायब होने के बाद अद्यतन किया जाना चाहिए। फोकस सक्रिय करने से पहले स्क्रीन के निचले हिस्से में केवल आकार बदलने और इनपुट नियंत्रण स्थिति को स्थानांतरित करना, आईओएस पर वेबकिट को वैसे ही व्यवहार कर सकता है चूंकि Google क्रोम एंड्रॉइड पर व्यवहार करता है। Awful Safari। –

संबंधित मुद्दे