2015-12-22 4 views
5

ज़ूम करते समय भी मोबाइल ब्राउज़र पर तरल रेखा ब्रेक कैसे प्राप्त कर सकता हूं?ज़ूम करते समय भी मोबाइल ब्राउज़र पर तरल रेखा ब्रेक कैसे प्राप्त कर सकता हूं?

मेरे पास टेक्स्ट का केवल एक कॉलम वाला एक बहुत ही सरल वेब पेज है।

/* ✂---------------- */ 

body { 
    /* To avoid problems with some older browsers, that do not calculate 
    * relative values correctly without this statement. */ 
    font-size: 100%; 
    /* ✂---------------- */ 
    /* Center the content and leave a margin at the left and at the right. */ 
    margin-left: auto; 
    margin-right: auto; 
    /* ✂---------------- */ 
} 

/* ✂---------------- */ 

@media not print { 
    body { 
     /* ✂---------------- */ 
     /* Do not put too many words in a single line: */ 
     width: 41em; 
     /* Avoid horizontal scrolling, and leave a small margi 
     * at the left and at the right. */ 
     max-width: 90%; 
    } 

    /* ✂---------------- */ 

} 

/* ✂---------------- */ 

उद्देश्य है:: यहाँ सीएसएस के प्रासंगिक भागों हैं

  1. नहीं तय फ़ॉन्ट आकार का उपयोग लेकिन डिफ़ॉल्ट फ़ॉन्ट आकार का सम्मान करते हैं कि उपयोगकर्ता अपने ब्राउज़र

    की सेटिंग में चुना गया है
  2. यदि ब्राउज़र विंडो की चौड़ाई बहुत बड़ी है, तो लाइनों को बहुत व्यापक (बहुत सारे वर्ण) न बनाएं। इसके बजाए, बाईं ओर और दाईं तरफ स्थान छोड़ दें।

  3. यदि ब्राउज़र विंडो की चौड़ाई छोटी है (= मौजूदा ज़ूम स्तर पर वर्तमान फ़ॉन्ट आकार में टेक्स्ट के 41em को दिखाने के लिए पर्याप्त जगह नहीं है), तो ब्राउज़र विंडो की पूरी चौड़ाई के लिए लाइन ब्रेक का उपयोग करें (क्षैतिज स्क्रॉलिंग से परहेज करते हुए, बाएं और दाईं तरफ ÷ 2 = 5% (100% -90%) के छोटे मार्जिन के साथ।

  4. यदि उपयोगकर्ता ज़ूम इन या ज़ूम आउट करता है, तो लाइन ब्रेक सही ढंग से अनुकूलित हो जाता है। तो जब उपयोगकर्ता वास्तव में ज़ूम करता है, तब भी कोई क्षैतिज स्क्रॉलिंग आवश्यक नहीं होती है क्योंकि रेखा की लंबाई ब्राउज़र विंडो से अधिक व्यापक नहीं होती है।

यह डेस्कटॉप ब्राउज़र पर ठीक काम करता है। लेकिन मोबाइल ब्राउज़र व्यूपोर्ट के बारे में झूठ बोलते हैं। वे असली ब्राउज़र विंडो चौड़ाई के बजाय लगभग आठ सौ पिक्सल का व्यूपोर्ट करने का दावा करते हैं (यह "लेआउट व्यूपोर्ट" है - वास्तविक "दृश्य व्यूपोर्ट" से अलग - विवरण के लिए http://www.quirksmode.org/mobile/viewports2.html देखें)। तो, मोबाइल ब्राउज़र के लिए, मैं HTML में <"viewport" content="width=device-width, initial-scale=1"/> और

@viewport { 
    /* 100% of viewport’s width */ 
    width: 100vw; 
    zoom: 1.0; 
} 

सीएसएस में जोड़ दिया है। अब, फ़ायरफ़ॉक्स मोबाइल पर लक्ष्य # 1, 2 और 3 कार्य भी करें। लेकिन लक्ष्य # 4 नहीं है। ज़ूम इन या ज़ूम आउट करते समय हालिया फ़ायरफ़ॉक्स मोबाइल पर लाइन ब्रेक नहीं बदला जाता है। (मजेदार तथ्य: मेरे पुराने एंड्रॉइड 2.3.6 मानक ब्राउज़र पर, यह काम करता है।) मुझे लगता है कि <meta> टैग पढ़ने के बाद मोबाइल ब्राउज़र पर लेआउट व्यूपोर्ट चौड़ाई निर्धारित की जाती है और यह लेआउट व्यूपोर्ट की सीएसएस पिक्सेल चौड़ाई और नहीं बदलती है उपयोगकर्ता ज़ूम करता है या ज़ूम आउट करता है (डेस्कटॉप ब्राउज़र का विरोध करता है, जो ज़ूमिंग करते समय अपना व्यूपोर्ट अपनाता है)। चूंकि max-width: 90%; व्यूपोर्ट के सापेक्ष है (क्योंकि यह आसपास के कंटेनर है), ज़ूम इन या ज़ूम आउट करते समय लाइन ब्रेक और नहीं बदलता है। http://ryanve.com/lab/dimensions/ आज़माएं जो जावास्क्रिप्ट का उपयोग करके कुछ डोम मान प्रदर्शित करता है। जब आप डेस्कटॉप ब्राउज़र पर इस साइट को चलाते हैं, तो आप देखते हैं कि window.innerWidth जब आप ज़ूम इन करते हैं या ज़ूम आउट करते हैं तो बदलते हैं। यदि आप मोबाइल ब्राउज़र पर एक ही काम करते हैं, तो window.innerWidth का मान ज़ूम इन या आउट करते समय नहीं बदलता है। जहां तक ​​मैं देखता हूं, यह व्यवहार सामान्य रूप से आधुनिक मोबाइल ब्राउज़र और मोबाइल वेब पृष्ठों पर मानक व्यवहार भी प्रतीत होता है। ऐसा लगता है कि मोबाइल ब्रॉवर्स के डेवलपर्स का एक जानबूझकर choise (वे पुराने, डेस्कटॉप-अनुकूलित गैर-उत्तरदायी वेब पेज भी दिखाने में सक्षम होना चाहते हैं), लेकिन नकारात्मक बात यह है कि आप केवल वर्चुअल "लेआउट व्यूपोर्ट के साथ काम कर सकते हैं "।

और जहां तक ​​मुझे पता है, सीएसएस में कोई माप इकाइयां नहीं हैं जो आभासी "लेआउट व्यूपोर्ट" के बजाय वास्तविक "दृश्य व्यूपोर्ट" आकार के सापेक्ष हैं।

तो मेरी प्रश्न हैं:

  1. मुझे आश्चर्य है कि अगर कोई साफ है और है एक वेब पेज इस (ज़ूम + द्रव लाइन ब्रेक) पाने के लिए सब पर मानक के अनुरूप संभावना सिर्फ जैसे मोबाइल ब्राउज़र पर काम कर डेस्कटॉप संस्करण पर?

  2. यदि ऐसी संभावना है, तो यह कैसे काम कर सकता है (जावास्क्रिप्ट के बिना पसंदीदा)? मोबाइल दृश्यों पर "दृश्य व्यूपोर्ट चौड़ाई" ÷ "स्क्रीन चौड़ाई" की गणना करके ज़ूम कारक (जो स्वयं मुझे जेएस में क्रॉस-ब्राउजर तक पहुंच योग्य नहीं है) का अनुमान लगाने वाला एक गंदा हैक है और तदनुसार व्यूपोर्ट को गोद लेता है?

उत्तर

0

इस सीएसएस का प्रयास करें:

body { 
    max-width: 41em; /* up to 41em in width */ 
    width: 100%;  /* set width to 100% up to 41em */ 
    margin: 0 auto; /* center it */ 
} 

यह body 41em से अधिक व्यापक बनाने से बचना चाहिए, लेकिन 100% में यह समय के बाकी रहते हैं। इसे भी केंद्र में रखना चाहिए।

JSFiddle.net पर this example देखें।

स्क्रीनशॉट:

व्यापक max-width से:

screenshot1

कम max-width से:

screenshot2

+0

अनौपचारिक रूप से यह या तो काम नहीं करता है। मेरे अपने कोड के साथ ही परिणाम: डेस्कटॉप ब्राउज़र पर ठीक काम करता है, लेकिन तरल रेखा ब्रेक फ़ायरफ़ॉक्स मोबाइल पर काम नहीं करता है। –

1

लघु जवाब: यह संभव नहीं है।

जाहिर है यह मोबाइल ब्राउज़र पर लेआउट व्यूपोर्ट के गतिशील आकार बदलने के लिए संभव नहीं है:

लांग जवाब (लेकिन वहाँ एक समाधान नहीं है।)। http://www.quirksmode.org/mobile/viewports.html http://www.quirksmode.org/mobile/viewports2.html

यह ज़ूम पर लेआउट व्यूपोर्ट आकार अनुकूल करने के लिए नहीं मोबाइल ब्राउज़र का एक विचार पसंद हो रहा है:

Quirksmode अलग व्यूपोर्ट एक परिचय (लेआउट व्यूपोर्ट बनाम दृश्य व्यूपोर्ट) देता है।

https://drafts.csswg.org/css-device-adapt/#zoom-desc http://www.quirksmode.org/blog/archives/2015/09/a_new_device_ad.html

लेकिन इस ब्राउज़र द्वारा लागू किया जाएगा, तब भी जब:

(बदसूरत एचटीएमएल मेटा व्यूपोर्ट टैग प्रतिस्थापन) सीएसएस करने के लिए ज़ूम और व्यूपोर्ट हैंडलिंग लाने के लिए कुछ प्रयास कर रहे हैं , यह अभी भी ज़ूम के दौरान लेआउट व्यूपोर्ट आकार के साथ क्या होता है इसके बारे में नियंत्रण नहीं देगा।

वर्कअराउंड: वेबपृष्ठ पर "बड़ा" और "छोटा" नामक दो बटन या लिंक बनाएं। जावास्क्रिप्ट (ईसीएमएस्क्रिप्ट) को कॉल करने और टेक्स्ट आकार बदलने के लिए उनका इस्तेमाल करें। सबसे सरल मामला: आपकी सभी सामग्री का आकार <body> तत्व के फ़ॉन्ट आकार से संबंधित है; यदि हां, तो आपको बस इस फ़ॉन्ट आकार को बदलना होगा।कोड:

<!-- The CSS is assumed to apply “display=none” to the elements 
with class="no-print" when used for printing. --> 
<p class="no-print"> 
    <!-- Some text size tools. 
    The CSS is assumed to apply “display=none” to the elements 
    with id="textSizeTools". So the text size tools are 
    by default invisible and do not take any space in the default 
    rendering. --> 
    <span id="textSizeTools"> 
    <span class="linkStyle zoomInCursor" onclick="javascript:resizeText(true)"> 
     [größer] 
    </span> 
    – 
    <span class="linkStyle zoomOutCursor" onclick="javascript:resizeText(false)"> 
     [kleiner] 
    </span> 
    </span> 
</p> 
<script> 
    /* document.body.style.fontSize is empty – though “font-size=100%” is set in 
    * the CSS. We initialize it here with the value "100%", that 
    * corresponds to our CSS entry . From 
    * now on, the value is available in ECMAScript. */ 
    document.body.style.fontSize = "100%"; 
    var resizeText = (function() { 
     'use strict'; 
     var step = 0; 
     return function (bigger) { 
      if (bigger !== true) { 
       step -= 1; 
      } else { 
       step += 1; 
      } 
      document.body.style.fontSize = 100 * Math.pow(1.2, step) + "%"; 
     }; 
    }()); 
    /* If the browser is scripting-enabled, than this script will be executed 
    * and the text size tools will become visible. If the browser is not scripting-enabled, 
    * than this script will not be executed and the text size tools will stay hidden. 
    * This is intentional, because without scripting, the text size tools would not 
    * work, and it is not good if the user can see buttons and links that 
    * do not work. The same is if this script does not work because some 
    * of the commands do not work in the current browser: The script cannot 
    * be executed until here, so the text size tools will not be made 
    * visible. */ 
    document.getElementById("textSizeTools").style.display = 'initial'; 
</script> 
संबंधित मुद्दे

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