ধারকগুলির প্রস্থের ভিত্তিতে হরফ স্কেলিং


1185

ফন্ট স্কেলিংয়ের আশেপাশে আমার মাথা পেতে খুব কষ্ট হচ্ছে।

আমার কাছে বর্তমানে 100% এর বডি সহ এই সাইটটি রয়েছে font-size। 100% তবে কি? এটি 16 পিক্সেল গণনা করা বলে মনে হচ্ছে।

আমি এই ধারণাটির মধ্যে ছিলাম যে 100% একরকমভাবে ব্রাউজার উইন্ডোর আকারের বিষয়ে উল্লেখ করবে তবে দৃশ্যত তা নয় কারণ এটি সর্বদা 16 পিক্সেল হয় যে উইন্ডোটি একটি মোবাইল প্রস্থ বা পূর্ণ-বর্ধিত প্রশস্ত স্ক্রিন ডেস্কটপে পুনরায় আকার দেওয়া হয়েছে কিনা।

আমি আমার সাইটের স্কেলটিতে এর ধারকটির সাথে কীভাবে পাঠ্য তৈরি করতে পারি? আমি চেষ্টা করার চেষ্টা করেছি em, কিন্তু এটিও স্কেল করে না।

আমার যুক্তি আমার মেনু মত যে জিনিস squished হয়ে যখন আপনি মাপ পরিবর্তন, তাই আমি কমাতে প্রয়োজন px font-sizeএর .menuItemধারক প্রস্থ সম্পর্ক অন্যান্য উপাদানের মধ্যে। (উদাহরণস্বরূপ, বড় ডেস্কটপের মেনুতে, 22pxপুরোপুরি কাজ করে tablet ট্যাবলেট প্রস্থে নীচে সরান এবং 16pxআরও উপযুক্ত)

আমি সচেতন আমি ব্রেকপয়েন্টগুলি যুক্ত করতে পারি, তবে আমি পাঠ্যটি স্কেল করার পাশাপাশি অতিরিক্ত ব্রেকপয়েন্টগুলিও রাখতে চাই, অন্যথায়, আমি পাঠ্যটি নিয়ন্ত্রণ করতে প্রতিটি 100 পিক্সেল প্রস্থে হ্রাস পেয়ে শত শত ব্রেকপয়েন্ট সহ শেষ করব।


34
font-size: 100%;মানে পাঠ্যটি 100% আকারের হত (যেমন এটি তার পিতামাতার কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত)। ডিফল্টরূপে এটি 16px। সুতরাং আপনি যদি 50% ব্যবহার করেন তবে এটি হরফ আকার হবে: 8px
অ্যান্ডি

31
আপনি যা খুঁজছেন তাকে প্রতিক্রিয়াশীল বা ভিউপোর্ট আকারের টাইপোগ্রাফি বলা হয়। css-tricks.com/viewport-sized-typography
গিয়ার্সডিজিটাল

8
দিন FitText একটি চেহারা।
প্যাটসি ইসা

12
@ অ্যান্ডি: প্রকৃতপক্ষে, "ডিফল্টরূপে" ব্যবহারকারীরা তাদের ব্রাউজারের পাঠ্যের আকার সেট করে রেখেছেন যা অগত্যা 16px এ সমাধান করতে পারে না।
স্কটস

1
এই উত্তরটি এ কটাক্ষপাত stackoverflow.com/a/28485608/4251431
বশীর আল MOMANI

উত্তর:


1494

সম্পাদনা করুন: ধারকটি যদি শরীরের না হয় তবে সিএসএস ট্রিকস কোনও ধারককে ফিটিং করার জন্য আপনার সমস্ত বিকল্পকে কভার করে ।

যদি ধারকটি শরীর হয় তবে আপনি যা খুঁজছেন তা ভিউপোর্ট-শতাংশের দৈর্ঘ্য :

ভিউপোর্ট-শতাংশ লেন্থ আকার আপেক্ষিক হয় প্রাথমিক ধারণকারী ব্লক । প্রাথমিক ধারণকারী ব্লকের উচ্চতা বা প্রস্থ পরিবর্তন করা হয়, সেগুলি সেই অনুযায়ী মাপা হয়। যাইহোক, যখন মূল উপাদানটিতে ওভারফ্লোর মানটি অটো হয়, তখন কোনও স্ক্রোল বারের অস্তিত্ব নেই বলে ধরে নেওয়া হয়।

মানগুলি হ'ল:

  • vw (ভিউপোর্ট প্রস্থের%)
  • vh (ভিউপোর্টের উচ্চতার%)
  • vi (মূল উপাদানটির ইনলাইন অক্ষের দিকের ভিউপোর্টের আকারের 1%)
  • vb (মূল উপাদানটির ব্লক অক্ষের দিকের ভিউপোর্টের আকারের 1%)
  • vmin(এর চেয়ে ছোট vwবা vh)
  • vmax(বৃহত্তর vwবা vh)

1 ভি * প্রাথমিক সমন্বিত ব্লকের 1% এর সমান।

এটি ব্যবহার করে দেখতে এটির মতো দেখাচ্ছে:

p {
    font-size: 4vw;
}

আপনি দেখতে পাচ্ছেন, যখন ভিউপোর্টের প্রস্থ বৃদ্ধি পায়, তাই font-sizeমিডিয়া কোয়েরিগুলি ব্যবহার না করেই করুন।

এই মানগুলি একটি আকারের ইউনিট, ঠিক যেমন pxবা em, তাই এগুলি অন্য উপাদানগুলির আকার যেমন, প্রস্থ, মার্জিন বা প্যাডিংয়ের আকারেও ব্যবহৃত হতে পারে।

ব্রাউজার সমর্থন বেশ ভাল, তবে আপনার সম্ভবত একটি ফলব্যাকের প্রয়োজন হবে যেমন:

p {
    font-size: 16px;
    font-size: 4vw;
}

সহায়তার পরিসংখ্যান দেখুন: http://caniuse.com/#feat=viewport-units

এছাড়াও, বিস্তৃত চেহারা জন্য সিএসএস- কৌশলগুলি দেখুন: ভিউপোর্ট সাইজ টাইপোগ্রাফি

ন্যূনতম / সর্বাধিক আকার নির্ধারণ এবং মাপগুলির উপরে আরও কিছুটা নিয়ন্ত্রণের ব্যায়াম সম্পর্কে এখানে একটি চমৎকার নিবন্ধ: প্রতিক্রিয়াশীল টাইপোগ্রাফির উপর যথাযথ নিয়ন্ত্রণ

এবং ক্যালক () ব্যবহার করে আপনার আকার নির্ধারণ সম্পর্কে এখানে একটি নিবন্ধ রয়েছে যাতে পাঠ্যটি ভিউপোর্টটি পূরণ করে: http://codepen.io/CocoDillon/pen/fBJxu

এছাড়াও, দয়া করে এই নিবন্ধটি দেখুন, যা লাইন-উচ্চতাও সামঞ্জস্য করতে 'গলিত নেতৃস্থানীয়' ডাব একটি কৌশল ব্যবহার করে। সিএসএসে গলিত নেতৃত্ব


546
তবে কনটেইনারটি ভিউপোর্ট (বডি) না হলে কী হবে?
অ্যালেক্স

12
@ অ্যালেক্স, এটি জেএস অঞ্চল। FitText.js@ Jbenjohnson সরবরাহ করা নিবন্ধটির নীচে প্রদত্ত বিকল্পটি চেষ্টা করুন ।
রবার্ট

10
তথাকথিত উপাদানগুলির কোয়েরিগুলি এখানেই আসে media কিন্তু দুর্ভাগ্যক্রমে এটি এখনও বিদ্যমান নেই। তবে আপনার আগ্রহী হলে কিছু পলিফিলস এবং প্রুফ-অফ-কনসেপ্ট উপস্থিত রয়েছে: কোডিং.স্ম্যাশিংমাগাজাইন.কম / 2013 / 03 / 25/… এবং ফিলামেন্টগ্রুপ.
com

139
ডাউনগ্রেড হয়েছে কারণ এটি প্রশ্নের উত্তর দেয় না। তিনি ভিউপোর্ট নয়, ধারকটি সম্পর্কে জিজ্ঞাসা করেছিলেন। সম্পূর্ণরূপে পৃথক ব্যবহারের ক্ষেত্রে।
সংঘবক্স

6
"প্রাথমিকযুক্ত ব্লক" মূল উপাদানকে বোঝায়। এটি জিজ্ঞাসিত প্রশ্নের সঠিক উত্তর নয়।
গ্লিফ

319

তবে কনটেইনারটি ভিউপোর্ট (বডি) না হলে কী হবে?

এই প্রশ্নটি গৃহীত উত্তরের অধীনে অ্যালেক্সের একটি মন্তব্যে জিজ্ঞাসা করা হয়েছে ।

এই সত্যটির অর্থ এই নয় যে সেই ধারকটির vwআকারের কিছুটা পরিমাণ ব্যবহার করা যাবে না। এখন মোটামুটি যে কোনও প্রকারের পরিবর্তন দেখতে পেয়ে ধরে নিতে হবে যে কোনওভাবে ধারক আকারে নমনীয়। প্রত্যক্ষ শতাংশের widthমাধ্যমে বা 100% বিয়োগের মার্জিনের মধ্য দিয়ে হোক । বিন্দুটি "মুট" হয়ে যায় যদি ধারকটি সর্বদা সেট থাকে তবে চলুন, 200pxপ্রশস্তভাবে বলা যাক - তবে কেবলমাত্র একটি font-sizeপ্রস্থ সেট করুন যা সেই প্রস্থের জন্য কাজ করে।

উদাহরণ 1

নমনীয় প্রস্থের ধারক সহ, তবে এটি অবশ্যই বুঝতে হবে যে কোনওভাবে ধারকটি ভিউপোর্টের বাইরে এখনও আকারের হয়ে উঠছে । যেমনটি vwভিউপোর্টের শতাংশের আকারের পার্থক্যের ভিত্তিতে একটি সেটিংস সামঞ্জস্য করার বিষয় , যার অর্থ পিতামাতার মোড়কের আকারের বিষয়টি বিবেচনায় নেওয়া। এই উদাহরণটি ধরুন :

div {
    width: 50%;
    border: 1px solid black;
    margin: 20px;
    font-size: 16px;
    /* 100 = viewport width, as 1vw = 1/100th of that
       So if the container is 50% of viewport (as here)
       then factor that into how you want it to size.
       Let's say you like 5vw if it were the whole width,
       then for this container, size it at 2.5vw (5 * .5 [i.e. 50%])
    */
    font-size: 2.5vw;
}

এখানে ধরে নেওয়া যে divএটি একটি সন্তানের body, এটি 50%সেই 100%প্রস্থের, যা এই বেসিক ক্ষেত্রে ভিউপোর্টের আকার। মূলত, আপনি একটি সেট করতে চান যা আপনাকে vwভাল দেখাচ্ছে। আপনি উপরের সিএসএস বিষয়বস্তুতে আমার মন্তব্য দেখতে পারেন, আপনি যে গাণিতিকভাবে মাধ্যমে "মনে হয়" করতে পারেন সম্পূর্ণ ভিউপোর্ট আকার থেকে সম্মান সঙ্গে, কিন্তু আপনি না প্রয়োজন যে কাজ করতে। পাঠ্যটি ধারকটির সাথে "ফ্লেক্স" করতে চলেছে কারণ ভিউপোর্টের পুনরায় আকার দেওয়ার সাথে ধারক নমনীয়। আপডেট: এখানে দুটি ভিন্ন আকারের পাত্রে উদাহরণ রয়েছে

উদাহরণ 2

আপনি এর ভিত্তিতে গণনা জোর করে ভিউপোর্ট সাইজিং নিশ্চিত করতে সহায়তা করতে পারেন। এই উদাহরণ বিবেচনা করুন :

html {width: 100%;} /* Force 'html' to be viewport width */
body {width: 150%; } /* Overflow the body */

div {
    width: 50%;
    border: 1px solid black;
    margin: 20px;
    font-size: 16px;
    /* 100 = viewport width, as 1vw = 1/100th of that
       Here, the body is 150% of viewport, but the container is 50%
       of viewport, so both parents factor  into how you want it to size.
       Let's say you like 5vw if it were the whole width,
       then for this container, size it at 3.75vw
       (5 * 1.5 [i.e. 150%]) * .5 [i.e. 50%]
    */
    font-size: 3.75vw;
}

সাইজিংটি এখনও ভিউপোর্টের উপর ভিত্তি করে রয়েছে তবে এটি কন্টেইনার আকারের ভিত্তিতেই সেট আপ করা হয়েছে।

ধারক আকারের পরিবর্তনশীল পরিবর্তন হওয়া উচিত ...

যদি ধারক উপাদানটির আকার নির্ধারণের @mediaকাজটি ব্রেকপয়েন্টগুলির মাধ্যমে বা জাভাস্ক্রিপ্টের মাধ্যমে গতিশীলভাবে তার শতাংশের সম্পর্কের পরিবর্তন ঘটায় , তবে বেস "টার্গেট" যাই হোক না কেন পাঠ্য আকারের জন্য একই "সম্পর্ক" বজায় রাখার জন্য পুনঃব্যবহারের প্রয়োজন হবে।

উপরে # 1 উদাহরণ নিন। যদি উভয় বা জাভাস্ক্রিপ্ট দ্বারা প্রস্থে divপরিবর্তন করা 25%হয় @media, তবে একই সময়ে, font-sizeমিডিয়া ক্যোয়ারিতে বা জাভাস্ক্রিপ্ট দ্বারা নতুন ক্যালকুলেশনে সামঞ্জস্য করতে হবে 5vw * .25 = 1.25। এটি পাঠ্য আকারকে একই আকারে 50%রাখত যদি ভিউপোর্ট সাইজিং থেকে মূল ধারকটির "প্রস্থ" অর্ধেক কমে হত তবে এটি এখন তার নিজস্ব শতাংশের গণনার পরিবর্তনের কারণে হ্রাস পেয়েছে।

একটি চ্যালেঞ্জ

সঙ্গে সিএসএস 3 calc()ফাংশন ব্যবহার, এটা পরিবর্তনশীল সমন্বয়, যেমন যে ফাংশন জন্য কাজ করে না কঠিন হয়ে যাবে font-sizeএই সময়ে উদ্দেশ্যে। সুতরাং আপনার প্রস্থটি যদি চালু থাকে তবে আপনি খাঁটি সিএসএস 3 সমন্বয় করতে পারেন নি calc()। অবশ্যই, মার্জিনগুলির জন্য প্রস্থের একটি সামান্য সামঞ্জস্য কোনও পরিবর্তনের পরোয়ানা হিসাবে যথেষ্ট নাও হতে পারে font-size, তাই এটি কোনও ব্যাপার নয়।


(ভিউপোর্ট-শতাংশ দৈর্ঘ্য এবং উইন্ডোর আকার পরিবর্তন সহ একটি ক্রোম বাগ রয়েছে: কোড. google.com/p/chromium/issues/detail?id=124331 )
ত্রিশটি

@ থার্টিডট: এটি দুর্ভাগ্যজনক (তবে সচেতন হওয়া ভাল) আশা করি খুব শীঘ্রই বাগটি সমাধান হয়ে গেছে, তবে দেখে মনে হচ্ছে এটি কিছু সময়ের জন্য স্থির ছিল।
স্কটএস

20
দুর্দান্ত উত্তর, তবে, যদি উপাদানটি সর্বাধিক প্রস্থে থাকে তবে এটি কাজ করবে না।
হিমাটরস

3
@ ক্রিস্টোফারনলগ্রেন: এটি আমার উত্তরে তৈরি দুটি পয়েন্টের সাথে সম্পর্কিত: (1) "ধরে নিই যে কোনওভাবে ধারকটি আকারে নমনীয় হয়" (একবার 'সর্বোচ্চ-প্রস্থ' পৌঁছে গেলে এটি আর নমনীয় হয় না, সুতরাং সেখানে সমস্যা আছে) )। (২) যদি কেউ নির্ধারণ করতে পারে যে 'সর্বোচ্চ-প্রস্থ' কোন পয়েন্টে পৌঁছাবে, তবে আমি যেমন উল্লেখ করেছি, আপনি @mediaকীভাবে ফন্টটিকে সেই বিন্দুতে আকার দিতে হবে তা পরিবর্তনের জন্য একটি ব্রেক পয়েন্ট নির্ধারণ করতে পারেন (মূলত এটি পৌঁছানোর সময় একটি নির্দিষ্ট আকার দেওয়া max-width) । একটি max-widthপরিস্থিতি নিয়ে কাজ করার জন্য কেবল একটি চিন্তাভাবনা ।
স্কটএস

আপনি কি মনে করেন যে মিডিয়া কোয়েরিগুলির মাধ্যমে ধারক উপাদানটি যখন গতিশীলভাবে পরিবর্তিত হয় তখন আপনি একটি বেদানা ফেলতে পারেন? আমি নিশ্চিত নই যে আমি বুঝেছি.
J82

58

এসভিজির সাথে সমাধান:

<div style="width: 60px;">  
  <svg width="100%" height="100%" viewBox="0 -200 1000 300"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <text font-size="300" fill="black">Text</text>
  </svg>
</div>

https://jsfiddle.net/qc8ht5eb/


এসভিজি এবং পাঠ্য-মোড়কের সাহায্যে সমাধান foreignObject:

<svg viewBox="0 0 100 100">
  <foreignObject width="100%" height="100%">
    <h1>heading</h1>

    lorem ipsum dolor sit amet
  </foreignObject>
</svg> 

https://jsfiddle.net/2rp1q0sy/


1
এই ধারণাটি প্রথমে সুন্দর দেখাচ্ছে। তারপরে আপনি বুঝতে পারবেন <vtml> এর ভিতরে আপনি সহজেই এসভিজির ফন্টটি নিয়ন্ত্রণ করতে পারবেন না। মোবাইল এবং ডেস্কটপে ফন্ট আলাদা, যা চূড়ান্ত প্রস্থকে প্রভাবিত করে।
স্টপি

@ স্টোপি আপনি আইফ্রেম সমাধান সম্পর্কে কী ভাবেন? উদাহরণস্বরূপ
দান্টো

10
আপনি এইচটিএমএল / সিএসএস থেকে এসভিজিকে পুরোপুরি স্টাইল করতে পারেন
gman 5'18

1
এসভিজি সিএসএস দিয়ে স্টাইল করা যায় যদি এসভিজি ইনলাইন থাকে (কোনও আইএমজি ট্যাগ ব্যবহার করবেন না)।

8
এটি সেরা, সবচেয়ে অনুমানযোগ্য সমাধান যা গতিশীল ধারকটির ভিত্তিতে স্কেল করে।
জোশুয়া ডেভিড

35

আমার কোনও প্রকল্পে আমি ফন্টের আকারকে আমার প্রয়োজনের সাথে সামঞ্জস্য করতে vw এবং vh ​​এর মধ্যে একটি "মিশ্রণ" ব্যবহার করি, উদাহরণস্বরূপ:

font-size: calc(3vw + 3vh);

আমি জানি এটি ওপি-র প্রশ্নের উত্তর দেয় না, তবে এটি অন্য কারও পক্ষে সমাধান হতে পারে।


3
আপনি vminএবং / বা vmaxপরিবর্তে ব্যবহার করে ভাল হতে পারে ।
সেবাস্তিয়ান_কে

4
Chrome ডেভ সরঞ্জাম এই আহ্বান একটি অবৈধ সম্পত্তি মান
phil294

29

calc()সিএসএস ইউনিট এবং গণিত সহ বিশুদ্ধ-সিএসএস সমাধান

এটি ওপি যা চায় তা স্পষ্টভাবে নয়, তবে কারও দিন তৈরি করতে পারে। এই উত্তরটি চামচ খাওয়ানো সহজ নয় এবং বিকাশকারী প্রান্তে কিছু গবেষণা প্রয়োজন।

আমি calc()বিভিন্ন ইউনিট ব্যবহার করে এর জন্য খাঁটি সিএসএস সমাধান পেতে অবশেষে এসেছি । আপনার মত প্রকাশের জন্য সূত্রগুলির কিছু প্রাথমিক গাণিতিক বোঝার প্রয়োজন হবে calc()

আমি যখন এটি কাজ করেছিলাম তখন আমাকে কিছু প্যাডিং কয়েকজন পিতামাতার সাথে ডম-এর সাথে একটি পূর্ণ পৃষ্ঠা-প্রস্থের প্রতিক্রিয়াশীল শিরোনাম পেতে হয়েছিল। আমি আমার মানগুলি এখানে ব্যবহার করব, সেগুলি আপনার নিজের দ্বারা প্রতিস্থাপন করব।

গণিতে

আপনার প্রয়োজন হবে:

  • কিছু ভিউপোর্টে সুন্দরভাবে অ্যাডজাস্ট করা অনুপাত। আমি 320 পিক্সেল ব্যবহার করেছি, সুতরাং আমি 24 পিক্সেল উচ্চ এবং 224 পিক্সেল প্রশস্ত পেয়েছি, সুতরাং অনুপাতটি 9.333 ... বা ২৮ / 3
  • ধারক প্রস্থ, আমার ছিল padding: 3emএবং সম্পূর্ণ প্রস্থ তাই এটি পেয়েছিলাম100wv - 2 * 3em

এক্স কনটেইনারটির প্রস্থ, সুতরাং এটি আপনার নিজের এক্সপ্রেশন দিয়ে প্রতিস্থাপন করুন বা পূর্ণ পৃষ্ঠার পাঠ্য পেতে মানটি সামঞ্জস্য করুন। Rআপনার অনুপাত হবে। কিছু ভিউপোর্টে মানগুলি সামঞ্জস্য করে, উপাদানগুলির প্রস্থ এবং উচ্চতা পরীক্ষা করে এবং সেগুলি আপনার নিজস্ব মান দিয়ে প্রতিস্থাপন করে আপনি এটি পেতে পারেন। এছাড়াও, এটি width / heigth;)

x = 100vw - 2 * 3em = 100vw - 6em
r = 224px/24px = 9.333... = 28 / 3

y = x / r
  = (100vw - 6em) / (28 / 3)
  = (100vw - 6em) * 3 / 28
  = (300vw - 18em) / 28
  = (75vw - 4.5rem) / 7

আর ব্যাং! এটা কাজ করেছে! আমি লিখেছিলাম

font-size: calc((75vw - 4.5rem) / 7)

আমার শিরোনামে এবং এটি প্রতিটি ভিউপোর্টে দুর্দান্তভাবে সামঞ্জস্য করে।

কিন্তু এটা কিভাবে কাজ করে?

আমাদের এখানে কিছু ধ্রুবক প্রয়োজন। 100vwমানে ভিউপোর্টের সম্পূর্ণ প্রস্থ এবং আমার লক্ষ্যটি ছিল কিছু প্যাডিং সহ পূর্ণ-প্রস্থের শিরোনাম স্থাপন করা।

অনুপাত. একটি ভিউপোর্টে প্রস্থ এবং উচ্চতা পেয়ে আমাকে খেলতে অনুপাত পেয়েছিল এবং অনুপাতের সাথে আমি জানি যে অন্যান্য ভিউপোর্টের প্রস্থে উচ্চতাটি কী হওয়া উচিত। তাদের হাত দিয়ে গণনা করতে প্রচুর সময় লাগবে এবং কমপক্ষে ব্যান্ডউইদথ প্রচুর পরিমাণে নেবে, সুতরাং এটি ভাল উত্তর নয়।

উপসংহার

আমি অবাক হয়েছি কেন কেন কেউ এই বিষয়টি আবিষ্কার করেনি এবং কিছু লোক এমনকি এটিও বলে দিচ্ছেন যে সিএসএসের সাথে ঝাঁকুনি দেওয়া অসম্ভব। আমি উপাদানগুলিকে সামঞ্জস্য করতে জাভাস্ক্রিপ্ট ব্যবহার করতে পছন্দ করি না, তাই আমি আরও খনন না করে জাভাস্ক্রিপ্ট (এবং jQuery সম্পর্কে ভুলে যাওয়া) উত্তরগুলি গ্রহণ করি না। সর্বোপরি, এটি ভাল যে এটি সন্ধান পেয়েছে এবং এটি ওয়েবসাইট ডিজাইনের খাঁটি সিএসএস বাস্তবায়নের এক ধাপ।

আমি আমার লেখায় যে কোনও অস্বাভাবিক সম্মেলনের জন্য ক্ষমা চাইছি, আমি ইংরেজিতে নেটিভ স্পিকার নই এবং স্ট্যাক ওভারফ্লো উত্তরগুলি লেখার ক্ষেত্রেও আমি বেশ নতুন।

এটিও লক্ষ করা উচিত যে আমাদের কয়েকটি ব্রাউজারে অশুভ স্ক্রোলবার রয়েছে। উদাহরণস্বরূপ, ফায়ারফক্স ব্যবহার করার সময় আমি লক্ষ্য করেছি যে 100vwভিউপোর্টের পুরো প্রস্থ, স্ক্রোলবারের অধীনে প্রসারিত (যেখানে সামগ্রী প্রসারিত হতে পারে না!) তাই পূর্ণদৈর্ঘ্য পাঠ্যটি সাবধানতার সাথে মার্জিন করতে হবে এবং বেশিরভাগ ব্রাউজার এবং ডিভাইস দিয়ে পরীক্ষা করতে হবে।


13
এই সমাধানটি কেবলমাত্র যদি কাজ করে তবে (1) আপনি ফন্টটি জানেন, (2) কোনও ফন্ট ব্যবহারকারীর ডিভাইসে পাওয়া যায় এবং (3) পাঠ্যটি সর্বদা একই থাকে। এটি এটিকে খুব সীমিত ব্যবহারের ক্ষেত্রে পরিণত করে।
আন্দ্রে ভলগিন

আমার ধারক উদাহরণস্বরূপ: 640px এবং 16: 9 এর অনুপাতের সাথে ঠিক করা থাকলে আমি কী বুঝতে পারি না। আমার কোন ক্যালক লিখতে হবে?
পেরি মিমন

1
আপনার ধারক প্রস্থ x640px এবং অনুপাত r16: 9, তাই: x = 640px, r = 16 / 9, y = x / r = 640px / (16 / 9) = 360px
হেজেজ

দ্রষ্টব্য: এটি কেবল তখনই কার্যকর হয় যদি আপনার কাছে 16: 9 হিসাবে আকারের কোনও পাঠ্য থাকে যা একটি বিজোড় পরিস্থিতি। সম্ভবত উত্তর দ্বিতীয় বার পড়া সাহায্য করতে পারে। এছাড়াও, এটি কেবল ওয়ান-লাইনারগুলির জন্যই কাজ করে।
হেজেজ

সত্য কথা বলতে গেলে আপনি "কিছু ভিউপোর্টে ভালভাবে অ্যাডজাস্টেড রেশিওটি ব্যাখ্যা করেন না I আমি 320 পিক্সেল ব্যবহার করেছি, সুতরাং আমি 24 পিক্সেল উচ্চ এবং 224 পিক্সেল প্রশস্ত পেয়েছি, সুতরাং অনুপাতটি 9.333 ... বা ২৮ / 3" অনুপাতটি ব্যাখ্যা করার পরামর্শ দিচ্ছি একটু বেশি. অনুপাতটি কী উপস্থাপন করে?
3limin4t0r

28

এই ইস্যুটির জন্য একটি বড় দর্শন আছে।

সবচেয়ে সহজ পদ্ধিতি হল জিনিস কি শরীর (আমি 10 প্রস্তাব করেছি) একটি নির্দিষ্ট ফন্ট সাইজ দিতে হবে, এবং তারপর সব অন্যান্য উপাদানের ক্ষেত্রে তাদের ফন্ট হবে emবা rem। আমি আপনাকে সেই ইউনিটগুলি বোঝার জন্য একটি উদাহরণ দেব। Emসর্বদা এর পিতামাতার সাথে সম্পর্কিত:

body{font-size: 10px;}
.menu{font-size: 2em;} /* That means 2*10 pixels  = 20 pixels */
.menu li{font-size: 1.5em;} /* That means 1.5*20 pixels = 30 pixels */

Rem শরীরের সাথে সর্বদা সম্পর্কিত:

body{font-size: 10px;}
.menu{font-size: 2rem;} /* That means 2*10 pixels = 20 pixels */
.menu li{font-size: 1.5rem;} /* that means 1.5*10 pixels = 15 pixels */

এবং তারপরে আপনি এমন একটি স্ক্রিপ্ট তৈরি করতে পারেন যা আপনার ধারক প্রস্থের সাথে সম্পর্কিত ফন্ট-আকারকে সংশোধন করবে। তবে এটি আমি সুপারিশ করব না। কারণ একটি 900 পিক্সেলের প্রস্থের কনটেইনারটিতে উদাহরণস্বরূপ আপনার কাছে p12 পিক্সেলের ফন্ট-আকারের একটি উপাদান থাকবে । এবং আপনার ধারণার ভিত্তিতে যা 4 পিক্সেলের ফন্ট-আকারের 300 পিক্সেল প্রশস্ত কন্টেইনার হয়ে উঠবে। একটি নিম্ন সীমা থাকতে হবে।

অন্যান্য সমাধানগুলি মিডিয়া প্রশ্নের সাথে থাকবে, যাতে আপনি বিভিন্ন প্রস্থের জন্য ফন্ট সেট করতে পারেন।

তবে যে সমাধানগুলি আমি সুপারিশ করব তা হ'ল একটি জাভাস্ক্রিপ্ট লাইব্রেরি ব্যবহার করা যা আপনাকে এটির সাথে সহায়তা করে। এবং ফিটটেক্সট.জেএস যা আমি এখনও খুঁজে পেয়েছি।


6
remইউনিট মূল উপাদান আপেক্ষিক, যার অর্থ htmlউপাদান না bodyউপাদান। DOM এর মূল উপাদানটি হ'ল htmlট্যাগ। বিকাশকারী.মোজিলা.আর.ইন-remhtml
ইউএস / ডকস / ওয়েব / সিএসএস / দৈর্ঘ্য

ফিটটেক্সট.জেএস কাজটি করে দেয়, আমি সেই সমাধানটি পুনরায় স্বীকার করলাম!
জ্যাসেক ডিজিউর্ডজিকোভস্কি

ফিট টেক্সট আমার পক্ষে বিজয়ী ছিল। কয়েকটি বিকল্পের চেষ্টা করেও এটি সহজ এবং দ্রুপল / ব্যাকড্রপ সিএমএসের সাথে ভালভাবে সংহত হয়েছে বলে মনে হয়েছিল। github.com/davatron5000/FitText.js
সহায়ক জোয়েল

23

ফাংশনটি এখানে:

document.body.setScaledFont = function(f) {
  var s = this.offsetWidth, fs = s * f;
  this.style.fontSize = fs + '%';
  return this
};

তারপরে আপনার সমস্ত ডকুমেন্টের চাইল্ড এলিমেন্ট ফন্টের আকারগুলি emএর বা এ রূপান্তর করুন %

তারপরে বেস ফন্টের আকারটি সেট করতে আপনার কোডটিতে এই জাতীয় কিছু যুক্ত করুন।

document.body.setScaledFont(0.35);
window.onresize = function() {
    document.body.setScaledFont(0.35);
}

http://jsfiddle.net/0tpvccjt/


1
এখন পর্যন্ত এটি সেরা সমাধান
ডাব্লুপিপি শিক্ষার্থী

খারাপ অনুশীলন এবং ভারীভাবে অদক্ষ
জ্যাক গিফিন

@ টিন্ট্রাক্স আজকের মতোই অদক্ষ, 4 বছর আগে এটি অনেক বেশি অক্ষম ছিল। আমি আরও ভাল বিকল্পের পরিবর্তে এই উত্তরটিকে প্রত্যাখ্যান করি। হ্যাঁ, আইই সমর্থন জন্য, একটি জাভাস্ক্রিপ্ট প্রয়োজন হবে। তবে, জাভাস্ক্রিপ্টের দরকার নেই যা এই ভয়ানক।
জ্যাক গিফিন 18

3
আমার ধারণা আমার অজ্ঞতা এখানে প্রদর্শিত হচ্ছে। তবে উপরের ভয়ানক কেন?

আমি ভয়ানক মনে করি না। এটিকে আরও পঠনযোগ্য করার জন্য আমি কিছু ছোট ফর্ম্যাটিং পরিবর্তনগুলি সুপারিশ করব। আমি প্রতিটি ভার কমপক্ষে পৃথক লাইনে লাগাতাম। এটি return thisফাংশন শেষে প্রয়োজন হবে না । পারফরম্যান্সের জন্য আপনি অনারসাইজটিও ডিবাউন করতে চাইতে পারেন যাতে আপনি যখন টেনে আনেন তেমন এটি পুনরায় আঁকবে না। এটি বেশ সহজ সরল কোড, যাতে কেউ নিজের উন্নত সমাধানটিকে সামান্য চেষ্টা করেই বেস করতে পারেন।
Mnebuerquo

19

জাভাস্ক্রিপ্ট ছাড়াই এটি করার একটি উপায় আছে !

আপনি একটি ইনলাইন এসভিজি চিত্র ব্যবহার করতে পারেন। কোনও এসভিজির ইনলাইন থাকলে আপনি সিএসএস ব্যবহার করতে পারেন। আপনাকে মনে রাখতে হবে যে এই পদ্ধতিটি ব্যবহার করার অর্থ আপনার এসভিজি চিত্রটি তার ধারক আকারে প্রতিক্রিয়া জানাবে।

নিম্নলিখিত সমাধান ব্যবহার করার চেষ্টা করুন ...

এইচটিএমএল

<div>
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360.96 358.98" >
      <text>SAVE $500</text>
  </svg>
</div>

সিএসএস

div {
  width: 50%; /* Set your container width */
  height: 50%; /* Set your container height */

}

svg {
  width: 100%;
  height: auto;

}

text {
  transform: translate(40px, 202px);
  font-size: 62px;
  fill: #000;
}

উদাহরণ: https://jsfiddle.net/k8L4xLLa/32/

আরও চটকদার কিছু চান?

এসভিজি চিত্রগুলি আপনাকে আকার এবং জাঙ্ক সহ দুর্দান্ত স্টাফ করার অনুমতি দেয়। স্কেলযোগ্য পাঠ্যের জন্য দুর্দান্ত ব্যবহারের এই ক্ষেত্রেটি দেখুন ...

https://jsfiddle.net/k8L4xLLa/14/


4
এই সমাধানটি vwআকারের সাথে গৃহীত গৃহস্থের চেয়ে আলাদা নয় । আপনি যদি পাঠ্যটি পরিবর্তন করেন তবে সবকিছু সীমাবদ্ধ হয়ে যায়।
এন 69 এস

14

এটি দুর্দান্ত ব্যবহারিক নাও হতে পারে তবে ডিভ / পৃষ্ঠার আকার পড়ার জন্য কোনও জাভাস্ক্রিপ্ট না শুনে / লুপস (ইন্টারভাল) না রেখে যদি আপনি কোনও ফন্টটি পিতামাতার সরাসরি কাজ করতে চান তবে এটি করার একটি উপায় আছে । আইফ্রেমগুলি।

Iframe এর মধ্যে যে কোনও কিছু ইফ্রেমের আকারকে ভিউপোর্টের আকার হিসাবে বিবেচনা করবে। সুতরাং কৌশলটি কেবলমাত্র একটি আইফ্রেমে তৈরি করা যার প্রস্থটি আপনি আপনার পাঠ্যটি সর্বাধিক প্রস্থ হতে চান এবং যার উচ্চতা সর্বোচ্চ উচ্চতার সমান * নির্দিষ্ট পাঠ্যের দিক অনুপাত।

ভিউপোর্ট ইউনিটগুলি পাঠ্যের জন্য পাশের প্যারেন্ট ইউনিটগুলির সাথেও আসতে পারে না এমন সীমাবদ্ধতাটি নির্ধারণ করে (যেমন,% আকার সকলের মতো আচরণ করে), ভিউপোর্ট ইউনিটগুলি একটি খুব শক্তিশালী সরঞ্জাম সরবরাহ করে: ন্যূনতম / সর্বাধিক মাত্রা পেতে সক্ষম হওয়া । আপনি অন্য কোথাও এটি করতে পারবেন না - আপনি বলতে পারবেন না ... এই ডিভের উচ্চতা পিতামাতার * প্রস্থের প্রস্থে পরিণত করুন।

বলা হচ্ছে, কৌতুকটি হচ্ছে ভিএমএন ব্যবহার করা এবং আইফ্রেমের আকার নির্ধারণ করা যাতে [ভগ্নাংশ] * উচ্চতা যখন সীমাবদ্ধ মাত্রা হয় এবং [ভগ্নাংশ] * মোট প্রস্থ যখন প্রস্থ হয় সীমিত মাত্রা। এ কারণেই উচ্চতাটি প্রস্থ এবং দিক অনুপাতের পণ্য হতে হবে।

আমার বিশেষ উদাহরণ হিসাবে, আপনি আছে

.main iframe{
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100%;
  height: calc(3.5 * 100%);
  background: rgba(0, 0, 0, 0);
  border-style: none;
  transform: translate3d(-50%, -50%, 0);
}

এই পদ্ধতির সাথে ছোট বিরক্তি হ'ল আপনাকে ম্যানুয়ালি iframe এর CSS সেট করতে হবে। আপনি যদি পুরো সিএসএস ফাইল সংযুক্ত করেন, তবে এটি অনেক পাঠ্য অঞ্চলের জন্য প্রচুর পরিমাণে ব্যান্ডউইথ গ্রহণ করতে পারে। সুতরাং, আমি যা করি তা হ'ল আমার সিএসএস থেকে সরাসরি যে নিয়মটি চাই তা সংযুক্ত করা।

var rule = document.styleSheets[1].rules[4];
var iDoc = document.querySelector('iframe').contentDocument;
iDoc.styleSheets[0].insertRule(rule.cssText);

আপনি ছোট ফাংশন লিখতে পারেন যা সিএসএস বিধি / সমস্ত সিএসএস বিধি পায় যা পাঠ্যের ক্ষেত্রে প্রভাব ফেলবে।

আমি কিছু সাইক্লিং / জাভাস্ক্রিপ্ট না শুনে এটি করার অন্য কোনও উপায় সম্পর্কে ভাবতে পারি না। প্রকৃত সমাধান ব্রাউজার পিতা বা মাতা ধারক এর কার্যকারিতা হিসেবে স্কেল টেক্সট করার কোনো সুবিধা প্রদান করার জন্য হবে এবং একই vmin / vmax টাইপ কার্যকারিতা প্রদান।

জেএসফিডাল: https://jsfiddle.net/0jr7rrgm/3/ ( মাউসটিতে লাল স্কোয়ারটি লক করতে একবার ক্লিক করুন, এবং ছেড়ে দিতে আবার ক্লিক করুন)

ফ্রিডলের বেশিরভাগ জাভাস্ক্রিপ্ট কেবল আমার কাস্টম ক্লিক-ড্র্যাগ ফাংশন।


@ মেকফুল তাই নয় যখন আমরা 'নতুন' এবং 'চকচকে' (ড্রামরল প্লিজ ...) srcdocবৈশিষ্ট্যটি নিয়ে আসি
জ্যাক গিফিন

9

ব্যবহার vw, emএবং সহ। নিশ্চিতরূপে কাজ করে তবে আইএমও এর জন্য সর্বদা সূক্ষ্ম সুরকরণের জন্য মানুষের স্পর্শ প্রয়োজন needs

আমি এখানে @ tnt-rox ' উত্তরের উপর ভিত্তি করে একটি স্ক্রিপ্ট লিখেছি যা সেই মানুষের স্পর্শটিকে স্বয়ংক্রিয় করার চেষ্টা করে:

$('#controller').click(function(){
    $('h2').each(function(){
        var
            $el = $(this),
            max = $el.get(0),
            el = null
        ;
        max =
            max
            ? max.offsetWidth
            : 320
        ;
        $el.css({
            'font-size': '1em',
            'display': 'inline',
        });
        el = $el.get(0);

        el.get_float = function(){
            var
                fs = 0
            ;
            if (this.style && this.style.fontSize) {
                fs = parseFloat(this.style.fontSize.replace(/([\d\.]+)em/g, '$1'));
            }
            return fs;
        };

        el.bigger = function(){
            this.style.fontSize = (this.get_float() + 0.1) + 'em';
        };

        while (el.offsetWidth < max) {
            el.bigger();
        }

        // Finishing touch.
        $el.css({
            'font-size': ((el.get_float() -0.1) +'em'),
            'line-height': 'normal',
            'display': '',
        });
    });  // end of (each)
});    // end of (font scaling test)
div {
  width: 50%;
  background-color: tomato;
  font-family: 'Arial';
}

h2 {
  white-space: nowrap;
}

h2:nth-child(2) {
  font-style: italic;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="button" id="controller" value="Apply" />
<div>
  <h2>Lorem ipsum dolor</h2>
  <h2>Test String</h2>
  <h2>Sweet Concatenation</h2>
  <h2>Font Scaling</h2>
</div>

এটি মূলত হরফ-আকারকে হ্রাস করে 1emএবং সর্বাধিক প্রস্থে পৌঁছানো পর্যন্ত 0.1 দ্বারা বৃদ্ধি শুরু করে।

JSFiddle


1
emsমানুষের স্পর্শ এবং উল্লম্ব ছন্দ প্রয়োজন এমন কোনও ব্যক্তিকে স্বীকৃতি দেওয়ার জন্য +1 কোনও রকম যাদুবিদ্য নয়।
সেরোসায়েস

7

100% বেস ফন্ট আকারের সাথে তুলনামূলক, যা আপনি যদি সেট না করে থাকেন তবে এটি ব্রাউজারের ব্যবহারকারী-এজেন্টের ডিফল্ট হবে।

আপনার পরে থাকা প্রভাবটি পেতে, আমি উইন্ডোটির মাত্রাগুলির সাথে সামঞ্জস্য করে বেস ফন্টের আকারটি সামঞ্জস্য করতে জাভাস্ক্রিপ্ট কোডের একটি অংশ ব্যবহার করব।


7

আপনার সিএসএসের অভ্যন্তরে, আপনার নকশাটি যেখানেই ভাঙতে শুরু করবে সেখানে 320 পিক্সেলের প্রস্থ পরিবর্তন করে নীচে এটি যুক্ত করার চেষ্টা করুন:

    @media only screen and (max-width: 320px) {

        body { font-size: 1em; }

    }

তারপরে আপনার ইচ্ছামত "px" বা "em" এ ফন্টের আকার দিন।


7

আমার নিজস্ব সমাধান, jQuery- ভিত্তিক, ধীরে ধীরে ফন্টের আকার বাড়িয়ে কাজ করে যতক্ষণ না পাত্রে উচ্চতা বৃদ্ধি পায় (মানে এটি একটি লাইন ব্রেক পেয়েছিল)।

এটি বেশ সহজ, তবে মোটামুটি ভাল কাজ করে এবং এটি ব্যবহার করা খুব সহজ। ফন্টটি ব্যবহার হচ্ছে সে সম্পর্কে আপনাকে কিছু জানার দরকার নেই , ব্রাউজারটি সবকিছুর যত্ন নেয়।

আপনি এটির সাথে http://jsfiddle.net/tubededentifrice/u5y15d0L/2/ এ খেলতে পারেন

যাদুটি এখানে ঘটে:

var setMaxTextSize=function(jElement) {
    // Get and set the font size into data for reuse upon resize
    var fontSize=parseInt(jElement.data(quickFitFontSizeData)) || parseInt(jElement.css("font-size"));
    jElement.data(quickFitFontSizeData, fontSize);

    // Gradually increase font size until the element gets a big increase in height (i.e. line break)
    var i = 0;
    var previousHeight;
    do
    {
        previousHeight=jElement.height();
        jElement.css("font-size", "" + (++fontSize) + "px");
    }
    while(i++ < 300 && jElement.height()-previousHeight < fontSize/2)

    // Finally, go back before the increase in height and set the element as resized by adding quickFitSetClass
    fontSize -= 1;
    jElement.addClass(quickFitSetClass).css("font-size", "" + fontSize + "px");

    return fontSize;
};

1
যেহেতু এই স্ক্রিপ্টটি প্রতিটি আকার পরিবর্তন করা ইভেন্ট এবং / অথবা অভিমুখী পরিবর্তনতে চলবে আমি এটি ব্যবহার করার পরামর্শ দিই না। জাভাস্ক্রিপ্ট ভিত্তিক সমাধান ব্যবহার না করে উপরের মত সিএসএস ভিত্তিক সমাধান সন্ধান করুন।
পাইলেটাস

1
আকার পরিবর্তন ও ওরিয়েন্টেশন পরিবর্তনগুলি "বিরল" ইভেন্ট, এখানে কোনও কার্য সম্পাদনের সমস্যা নেই। আপনি যদি পছন্দ করেন তবে ইভেন্টগুলিতে আবদ্ধ হবেন না (যদি তারা ধারকগুলির আকার পরিবর্তন না করে তবে উদাহরণস্বরূপ, প্রতিক্রিয়াবিহীন ওয়েবসাইটগুলির জন্য)। এই সমাধানটি যেমন কিছু করে (ফন্টের প্রস্থের প্রস্থের মতো) চিন্তা না করে সিএসএস সমাধানগুলি সব ক্ষেত্রেই কাজ করছে না।
ভিনসেন্ট

আমি আপনার উত্তরটিকে jQuery ফাংশন হিসাবে মোড়ানো করেছি। এটি সর্বোচ্চ অনুমোদিত উচ্চতা, ন্যূনতম এবং সর্বাধিক ফন্টের আকারগুলি গ্রহণ করে। দেখুন jsfiddle.net/oriadam/qzsy760k
oriadam

6

এই ওয়েব উপাদান ফন্টের আকার পরিবর্তন করে যাতে অভ্যন্তরের পাঠ্য প্রস্থটি ধারক প্রস্থের সাথে মেলে। ডেমো পরীক্ষা করে দেখুন ।

আপনি এটি এর মতো ব্যবহার করতে পারেন:

<full-width-text>Lorem Ipsum</full-width-text>

6

আপনি এই জাতীয় কিছু খুঁজছেন হতে পারে:

http://jsfiddle.net/sijav/dGsC9/4/
http://fiddle.jshell.net/sijav/dGsC9/4/show/

আমি ফ্লোটাইপ ব্যবহার করেছি এবং এটি দুর্দান্ত কাজ করছে (তবে এটি জাভাস্ক্রিপ্ট এবং খাঁটি সিএসএস সমাধান নয়):

$('body').flowtype({
    minFont: 10,
    maxFont: 40,
    minimum: 500,
    maximum: 1200,
    fontRatio: 70
});

6

আমি ফন্ট-আকারের পরিবর্তে সিএসএস রূপান্তর ব্যবহার করে একটি সাধারণ স্কেল ফাংশন প্রস্তুত করেছি। আপনি এটি কোনও ধারকের অভ্যন্তরে ব্যবহার করতে পারেন, আপনাকে মিডিয়া কোয়েরি ইত্যাদি সেট করতে হবে না :)

ব্লগ পোস্ট: পূর্ণ প্রস্থ সিএসএস এবং জেএস স্কেলেযোগ্য শিরোনাম

কোড:

function scaleHeader() {
  var scalable = document.querySelectorAll('.scale--js');
  var margin = 10;
  for (var i = 0; i < scalable.length; i++) {
    var scalableContainer = scalable[i].parentNode;
    scalable[i].style.transform = 'scale(1)';
    var scalableContainerWidth = scalableContainer.offsetWidth - margin;
    var scalableWidth = scalable[i].offsetWidth;
    scalable[i].style.transform = 'scale(' + scalableContainerWidth / scalableWidth + ')';
    scalableContainer.style.height = scalable[i].getBoundingClientRect().height + 'px';
  }
}

কার্যকারিতা ডেমো: https://codepen.io/maciejkorsan/pen/BWLryj


আমি মনে করি যে ওপি একটি সিএসএস সমাধান খুঁজছে।
m02ph3u5

5

সিএসএস ভেরিয়েবলগুলি ব্যবহার করুন

কেউ এখনও সিএসএস ভেরিয়েবলগুলি উল্লেখ করেনি, এবং এই পদ্ধতিটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে, তাই:

ধরা যাক যে আপনার পৃষ্ঠায় আপনার কাছে একটি কলাম রয়েছে যা একটি মোবাইল ব্যবহারকারীর পর্দার প্রস্থের 100%, তবে max-widthএর 800px রয়েছে, তাই ডেস্কটপে কলামের উভয় পাশে কিছু জায়গা রয়েছে। এটি আপনার পৃষ্ঠার শীর্ষে রাখুন:

<script> document.documentElement.style.setProperty('--column-width', Math.min(window.innerWidth, 800)+'px'); </script>

এবং এখন আপনি vwআপনার ফন্টের আকার নির্ধারণ করতে সেই পরিবর্তনশীলটি (বিল্ট-ইন ইউনিটের পরিবর্তে) ব্যবহার করতে পারেন । যেমন

p {
  font-size: calc( var(--column-width) / 100 );
}

এটি খাঁটি সিএসএস পদ্ধতি নয়, এটি বেশ কাছে।


5

ব্যবহার করে দেখুন http://simplefocus.com/flowtype/ । এটি আমি নিজের সাইটের জন্য ব্যবহার করি এবং এটি পুরোপুরি কার্যকর হয়েছে।


লিঙ্কগুলি অস্থির হয়। আপনার উত্তর সরাসরি সমাধান ব্যাখ্যা করুন। এছাড়াও, যাই হোক না কেন সামগ্রীর সাথে আমি কিছু এলোমেলো লিঙ্কে ক্লিক করতে চাই না।
লিল্লিনাক্স

5

আমার সমস্যাটি একই রকম ছিল তবে শিরোনামের মধ্যে পাঠ্য স্কেলিংয়ের সাথে সম্পর্কিত। আমি ফিট ফন্ট চেষ্টা করেছিলাম, তবে আমার কোনও ফলাফল পাওয়ার জন্য কমপ্রেসর টগল করা দরকার, যেহেতু এটি পাঠ্য প্রবাহের মতোই কিছুটা আলাদা সমস্যার সমাধান করছিল।

সুতরাং আমি আমার নিজের ছোট্ট প্লাগইন লিখেছিলাম যা ধারককে ফিট করার জন্য হরফের আকার হ্রাস করেছিল overflow: hiddenএবং ধরে নিলেন white-space: nowrapযে আপনার ফন্টটি সর্বনিম্নে হ্রাস করলেও পুরো শিরোনামটি দেখাতে দেয় না, এটি কেবল যা প্রদর্শন করতে পারে তা কেটে দেয়।

(function($) {

  // Reduces the size of text in the element to fit the parent.
  $.fn.reduceTextSize = function(options) {
    options = $.extend({
      minFontSize: 10
    }, options);

    function checkWidth(em) {
      var $em = $(em);
      var oldPosition = $em.css('position');
      $em.css('position', 'absolute');
      var width = $em.width();
      $em.css('position', oldPosition);
      return width;
    }

    return this.each(function(){
      var $this = $(this);
      var $parent = $this.parent();
      var prevFontSize;
      while (checkWidth($this) > $parent.width()) {
        var currentFontSize = parseInt($this.css('font-size').replace('px', ''));
        // Stop looping if min font size reached, or font size did not change last iteration.
        if (isNaN(currentFontSize) || currentFontSize <= options.minFontSize ||
            prevFontSize && prevFontSize == currentFontSize) {
          break;
        }
        prevFontSize = currentFontSize;
        $this.css('font-size', (currentFontSize - 1) + 'px');
      }
    });
  };
})(jQuery);

5

শৈল্পিকভাবে, যদি আপনার চরিত্রের সংখ্যা নির্বিশেষে আপনার যদি একই প্রস্থের মধ্যে দুটি বা ততোধিক লাইন ফিট করতে হয় তবে আপনার কাছে দুর্দান্ত বিকল্প রয়েছে।

ডায়নামিকাল সলিউশন সন্ধান করা ভাল তাই পাঠ্য যা কিছু লেখা থাকুক না কেন আমরা শেষ করি একটি দুর্দান্ত প্রদর্শন।

আসুন দেখুন আমরা কীভাবে যেতে পারি।

var els     = document.querySelectorAll(".divtext"),
refWidth    = els[0].clientWidth,
refFontSize = parseFloat(window.getComputedStyle(els[0],null)
                               .getPropertyValue("font-size"));

els.forEach((el,i) => el.style.fontSize = refFontSize * refWidth / els[i].clientWidth + "px")
#container {
  display: inline-block;
  background-color: black;
  padding: 0.6vw 1.2vw;
}
.divtext {
  display: table;
  color: white;
  font-family: impact;
  font-size: 4.5vw;
}
<div id="container">
  <div class="divtext">THIS IS JUST AN</div>
  <div class="divtext">EXAMPLE</div>
  <div class="divtext">TO SHOW YOU WHAT</div>
  <div class="divtext">YOU WANT</div>
</div>

আমরা যা করি তা হ'ল প্রথম রেখার প্রস্থ ( els[0].clientWidth) এবং ফন্টের আকার ( parseFloat(window.getComputedStyle(els[0],null).getPropertyValue("font-size"))) রেফারেন্স হিসাবে এবং তারপরে কেবল পরবর্তী লাইনগুলির ফন্টের আকার গণনা করা।


4

ফিটটেক্সট প্লাগইন ব্যবহার করার চেষ্টা করুন , কারণ ভিউপোর্টের আকারগুলি এই সমস্যার সমাধান নয়।

কেবল গ্রন্থাগার যুক্ত করুন:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

এবং পাঠ্যের সহগকে সেটিংস দ্বারা সঠিকর জন্য ফন্টের আকার পরিবর্তন করুন:

$("#text_div").fitText(0.8);

আপনি পাঠ্যের সর্বাধিক এবং সর্বনিম্ন মান নির্ধারণ করতে পারেন:

$("#text_div").fitText(0.8, { minFontSize: '12px', maxFontSize: '36px' });

এটি শুধুমাত্র বিগ ডিসপ্লে পাঠ্যের জন্য দরকারী এবং অনুচ্ছেদের জন্য প্রস্তাবিত নয়।
শিব

3

আমার কোড দেখুন। এটি সেখানে যাই হোক না কেন করতে font size smallerপারে fit

তবে আমি মনে করি এটি কোনও ভাল ব্যবহারকারীর অভিজ্ঞতা অর্জন করে না

var containerWidth = $("#ui-id-2").width();
var items = $(".quickSearchAutocomplete .ui-menu-item");
var fontSize = 16;

items.each(function(){
    // Displaying a value depends sometimes on your case. You may make it block or inline-table instead of inline-block or whatever value that make the div take overflow width.
    $(this).css({"whiteSpace": "nowrap", "display": "inline-block"});
    while ($(this).width() > containerWidth){
         console.log("$(this).width()" + $(this).width() + "containerWidth" + containerWidth)
         $(this).css("font-size", fontSize -= 0.5);
    }
});

ফলাফল


2

একটি জাভাস্ক্রিপ্ট ফ্যালব্যাক (বা আপনার একমাত্র সমাধান) হিসাবে, আপনি আমার jQuery স্কেলাম প্লাগইন ব্যবহার করতে পারেন , যা আপনাকে referenceবিকল্পটি পাস করে প্যারেন্ট এলিমেন্টের (কন্টেইনার) তুলনায় স্কেল করতে দেয় ।


2

এটি যদি কারও পক্ষে সহায়ক হয় তবে এই থ্রেডের বেশিরভাগ সমাধান হ'ল পাঠ্যটিকে একাধিক লাইনে মোড়ানো ছিল, ফর্ম ই।

তবে আমি এটি খুঁজে পেয়েছি এবং এটি কার্যকর হয়েছে:

https://github.com/chunksnbits/jquery-quickfit

ব্যবহারের উদাহরণ:

$('.someText').quickfit({max:50,tolerance:.4})


2

এই বৈশিষ্ট্য সহ আপনার উপাদানটি সর্বদা রাখুন :

javascript: element.style.fontSize = "100%";

অথবা

সিএসএস: style = "font-size: 100%;"

আপনি যখন পূর্ণস্ক্রিনে যান, আপনার ইতিমধ্যে স্কেল ভেরিয়েবল গণনা করা উচিত (স্কেল> 1 বা স্কেল = 1)। তারপরে, পূর্ণস্ক্রিনে:

document.body.style.fontSize = (scale * 100) + "%";

এটি সামান্য কোড সহ সুন্দরভাবে কাজ করে।


2

গতিশীল পাঠ্যের জন্য, এই প্লাগইনটি বেশ কার্যকর:

http://freqdec.github.io/slabText/

কেবল সিএসএস যুক্ত করুন:

.slabtexted .slabtext
{
    display: -moz-inline-box;
    display: inline-block;
    white-space: nowrap;
}
.slabtextinactive .slabtext
{
    display: inline;
    white-space: normal;
    font-size: 1em !important;
    letter-spacing: inherit !important;
    word-spacing: inherit !important;
    *letter-spacing: normal !important;
    *word-spacing: normal !important;
}
.slabtextdone .slabtext
{
    display: block;
}

এবং লিপি:

$('#mydiv').slabText();

2

এটি আমার পক্ষে কাজ করেছে:

আমি প্রস্থ / উচ্চতার উপর ভিত্তি করে ফন্ট-আকার: 10pxp সেট করা থেকে প্রাপ্ত ফন্টের আকারের আনুমানিক চেষ্টা করতে চাই ` মূলত, ধারণাটি "যদি আমার 20 পিক্সেল প্রস্থ এবং 11 পিক্সেল উচ্চতা` ফন্ট-আকার: 10 পিক্স` থাকে তবে 50 পিক্সেলের প্রস্থ এবং 30 পিক্সেলের উচ্চতার একটি ধারক গণিত করার সর্বোচ্চ ফন্টের আকারটি কী হবে? "

উত্তরটি একটি দ্বিগুণ অনুপাত সিস্টেম:

{20: 10 = 50: এক্স, 11: 10 = 30: ওয়াই} = {এক্স = (10 * 50) / 20, ওয়াই = (10 * 30) / 11

এখন এক্স হ'ল ফন্ট-আকার যা প্রস্থের সাথে মেলে এবং ওয়াই হ'ল ফন্ট-আকার যা উচ্চতার সাথে মিলবে; ক্ষুদ্রতম মান গ্রহণ করুন

function getMaxFontSizeApprox(el){
    var fontSize = 10;
    var p = el.parentNode;

    var parent_h = p.offsetHeight ? p.offsetHeight : p.style.pixelHeight;
    if(!parent_h)
        parent_h = 0;

    var parent_w = p.offsetHeight ? p.offsetWidth : p.style.pixelWidth;
    if(!parent_w)
        parent_w = 0;

    el.style.fontSize = fontSize + "px";

    var el_h = el.offsetHeight ? el.offsetHeight : el.style.pixelHeight;
    if(!el_h)
        el_h = 0;

    var el_w = el.offsetHeight ? el.offsetWidth : el.style.pixelWidth;
    if(!el_w)
        el_w = 0;

    // 0.5 is the error on the measure that JavaScript does
    // if the real measure had been 12.49 px => JavaScript would have said 12px
    // so we think about the worst case when could have, we add 0.5 to 
    // compensate the round error
    var fs1 = (fontSize*(parent_w + 0.5))/(el_w + 0.5);
    var fs2 = (fontSize*(parent_h) + 0.5)/(el_h + 0.5);

    fontSize = Math.floor(Math.min(fs1,fs2));
    el.style.fontSize = fontSize + "px";
    return fontSize;
}

এনবি: ফাংশনের যুক্তিটি অবশ্যই একটি স্প্যান উপাদান বা এমন একটি উপাদান হতে হবে যা তার পিতামাতার চেয়ে ছোট, অন্যথায় যদি বাচ্চাদের এবং পিতামাতার উভয় একই প্রস্থ / উচ্চতার ফাংশন ব্যর্থ হয়।



1

উইন্ডোর পরিবর্তে ফন্ট-আকারের ধারকটিকে ফিট করার জন্য, resizeFont()আমি এই প্রশ্নটিতে ফাংশনটি ভাগ করেছি (অন্যান্য উত্তরগুলির সংমিশ্রণ, যার বেশিরভাগই এখানে ইতিমধ্যে সংযুক্ত রয়েছে)। এটি ব্যবহার করে ট্রিগার করা হয়েছে window.addEventListener('resize', resizeFont);

ভ্যানিলা জাভাস্ক্রিপ্ট: ধারক ফিট করার জন্য ফন্ট-দুর্দান্তকে আকার দিন

javascript:

function resizeFont() {
  var elements  = document.getElementsByClassName('resize');
  console.log(elements);
  if (elements.length < 0) {
    return;
  }
  _len = elements.length;
  for (_i = 0; _i < _len; _i++) {
    var el = elements[_i];
    el.style.fontSize = "100%";
    for (var size = 100; el.scrollHeight > el.clientHeight; size -= 10) {
      el.style.fontSize = size + '%';
    }
  }
}

আপনি সম্ভবত ফ্যালব্যাক হিসাবে ভিডাব্লু / ভিএইচ ব্যবহার করতে পারেন, তাই আপনি গতিশীলভাবে বরাদ্দ করেন emবাrem জাভাস্ক্রিপ্ট অক্ষম থাকলে ফন্টগুলি উইন্ডোতে স্কেল করবে তা নিশ্চিত করে, জাভাস্ক্রিপ্ট ব্যবহার করে ইউনিটগুলি ইউনিটগুলি ।

.resizeআপনি মাপতে চান এমন পাঠ্যযুক্ত সমস্ত উপাদানগুলিতে বর্গ প্রয়োগ করুন ।

উইন্ডোর আকার পরিবর্তন ইভেন্ট শ্রোতার যোগ করার আগে ফাংশনটি ট্রিগার করুন। তারপরে, কোনও পৃষ্ঠা যা তার ধারকটির সাথে খাপ খায় না তা পৃষ্ঠাটি লোড হওয়ার সাথে সাথে এটি পুনরায় আকার দেওয়ার সময় ছোট করে দেওয়া হবে।

দ্রষ্টব্য: ডিফল্টটিকে font-sizeঅবশ্যই সেট করতে হবে em, remবা %সঠিক ফলাফল অর্জন করতে হবে।


1

এইচটিএমএল

<div style="height:100px; width:200px;">
  <div id='qwe'>
    test
  </div>
</div>

ফন্ট-আকার সর্বাধিক করার জন্য জাভাস্ক্রিপ্ট কোড:

var fontSize, maxHeight, maxWidth, textElement, parentElement;
textElement = document.getElementById('qwe');
parentElement = textElement.parentElement;    
maxHeight = parentElement.clientHeight;
maxWidth = parentElement.clientWidth;
fontSize = maxHeight;
var minFS = 3, maxFS = fontSize;
while (fontSize != minFS) {
  textElement.style.fontSize = `${fontSize}px`;
  if (textElement.offsetHeight < maxHeight && textElement.offsetWidth <= maxWidth) {
    minFS = fontSize;
  } else{
    maxFS = fontSize;
  }
  fontSize = Math.floor((minFS + maxFS)/2);
}
textElement.style.fontSize = `${minFS}px`;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.