බහාලුම් පළල මත පදනම්ව අකුරු පරිමාණය


1214

අකුරු පරිමාණය වටා මගේ හිස ලබා ගැනීමට මට අපහසුය.

මට දැනට font-size100% ක ශරීරයක් සහිත වෙබ් අඩවියක් ඇත . 100% කුමක් වුවත්? මෙය පික්සල් 16 කින් ගණනය කරන බව පෙනේ.

100% කෙසේ හෝ බ්‍රව්සර් කවුළුවේ ප්‍රමාණයට යොමු වනු ඇතැයි යන හැඟීම මා තුළ පැවතුනි, නමුත් පෙනෙන විදිහට එය සෑම විටම පික්සල් 16 ක් නිසා කවුළුව ජංගම පළලකට හෝ සම්පූර්ණ පුලුල් වූ පුළුල් තිර ඩෙස්ක්ටොප් එකකට වෙනස් කර තිබේද යන්න නොවේ.

එහි බහාලුමට සාපේක්ෂව මගේ වෙබ් අඩවියේ පරිමාණයෙන් පෙළ සාදා ගන්නේ කෙසේද? මම භාවිතා කිරීමට උත්සාහ කළෙමි em, නමුත් මෙයද පරිමාණය නොවේ.

මම අඩු කිරීමට අවශ්ය නිසා මගේ තර්ක, මගේ මෙනුව වැනි දේවල් ඔබ නැවත ප්රමාණය විට squished බවට පත් වෙන බවයි px font-size.menuItemකන්ටේනර් පළල සම්බන්ධයෙන් අනෙකුත් මූලද්රව්ය අතර. (නිදසුනක් ලෙස, විශාල ඩෙස්ක්ටොප් එකක මෙනුවේ 22pxපරිපූර්ණව ක්‍රියා කරයි. ටැබ්ලටයේ පළලට පහළට ගෙනයන්න සහ 16pxවඩාත් යෝග්‍ය වේ.)

මට බ්‍රේක්පොයින්ට් එකතු කළ හැකි බව මම දනිමි, නමුත් මට අවශ්‍ය වන්නේ පෙළ පරිමාණයට මෙන්ම අමතර බ්‍රේක්පොයින්ට් වලටය, එසේ නොමැති නම්, පෙළ පාලනය කිරීම සඳහා සෑම පික්සල් 100 ක්ම පළල අඩුවීම සඳහා බ්‍රේක්පොයින්ට් සිය ගණනක් අවසන් කරමි.


35
font-size: 100%;පා text යේ ප්‍රමාණයෙන් 100% ක් (එනම් එය මවුපියන්ගෙන් උරුම වූ) යන්නයි. පෙරනිමියෙන් එය 16px වේ. එබැවින් ඔබ 50% භාවිතා කළේ නම් එය අකුරු ප්‍රමාණය: 8px
ඇන්ඩි

32
ඔබ සොයන දේ ප්‍රතිචාරාත්මක හෝ දර්ශන ප්‍රමාණයේ යතුරු ලියනය ලෙස හැඳින්වේ. css-tricks.com/viewport-sized-typography
gearsdigital

8
දෙන්න FitText බලන්න.
පැට්සි ඊසා

12
Nd ඇන්ඩි: ඇත්ත වශයෙන්ම, "පෙරනිමියෙන්" යනු පරිශීලකයින්ට ඔවුන්ගේ බ්‍රව්සරයේ පෙළ ප්‍රමාණය සකසා ඇති ඕනෑම දෙයක් වන අතර එය අනිවාර්යයෙන්ම 16px දක්වා නිරාකරණය නොවේ.
ස්කොට්ස්

1
මෙම පිළිතුර බලන්න stackoverflow.com/a/28485608/4251431
බෂීර් අල්-මොමානි

Answers:


1521

සංස්කරණය: කන්ටේනර් ශරීරය නොවේ නම් CSS ප්රජාතන්ත්රවාදය නොරැකි ජවිපෙ ඔබේ විකල්ප සියල්ල ආවරණය වන බහාලුම් කිරීමට පෙළ සුදුසු .

කන්ටේනරය ශරීරය නම්, ඔබ සොයන්නේ Viewport- ප්‍රතිශත දිග :

මෙම දසුන් තොට-ප්රතිශතයක් දිග අතර ප්රමාණයෙන් සාපේක්ෂව වේ ආරම්භක අඩංගු වාරණ . ආරම්භක අඩංගු කොටසෙහි උස හෝ පළල වෙනස් වූ විට ඒවා ඒ අනුව පරිමාණය කෙරේ. කෙසේ වෙතත්, මූල මූලද්රව්යයේ පිටාර ගැලීමේ අගය ස්වයංක්රීය වන විට, ඕනෑම අනුචලන තීරු නොපවතින බව උපකල්පනය කෙරේ.

අගයන්:

  • vw (දර්ශනපථ පළලෙන්%)
  • vh (දර්ශනපථයේ උසින්%)
  • vi (මූල මූලද්‍රව්‍යයේ පේළිගත අක්ෂයේ දිශාවට දර්ශනපත්‍රයේ ප්‍රමාණයෙන් 1%)
  • vb (මූල මූලද්‍රව්‍යයේ බ්ලොක් අක්ෂයේ දිශාවට දර්ශනපත්‍රයේ ප්‍රමාණයෙන් 1%)
  • vmin(කුඩා vwහෝ vh)
  • vmax(විශාල හෝ vwහෝ vh)

1 v * යනු ආරම්භක අඩංගු කොටසෙහි 1% ට සමාන වේ.

එය භාවිතා කිරීම මේ වගේ ය:

p {
    font-size: 4vw;
}

ඔබට පෙනෙන පරිදි, දර්ශනපථයේ පළල වැඩි වන විට font-size, මාධ්‍ය විමසුම් භාවිතා කිරීමකින් තොරව කරන්න.

මෙම අගයන් ප්‍රමාණයේ ඒකකයකි, හරියට pxහෝ සමාන වේ em, එබැවින් ඒවා පළල, ආන්තිකය හෝ පෑඩින් වැනි වෙනත් මූලද්‍රව්‍ය ප්‍රමාණයන් සඳහා භාවිතා කළ හැකිය.

බ්‍රව්සර් සහාය ඉතා හොඳයි, නමුත් ඔබට පහත වැටීමක් අවශ්‍ය වනු ඇත, වැනි:

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

සහාය සංඛ්‍යාලේඛන බලන්න: http://caniuse.com/#feat=viewport-units .

පුළුල් පෙනුමක් සඳහා CSS- උපක්‍රම බලන්න: Viewport ප්‍රමාණයේ යතුරුලියනය

අවම / උපරිම ප්‍රමාණ සැකසීම සහ ප්‍රමාණයන් මත තව ටිකක් පාලනය කිරීම පිළිබඳ කදිම ලිපියක් මෙන්න: ප්‍රතිචාරාත්මක යතුරුලියනය මත නිරවද්‍ය පාලනය

කැල්ක් () භාවිතයෙන් ඔබේ ප්‍රමාණය සැකසීම පිළිබඳ ලිපියක් මෙහි ඇත, එවිට පෙළ දර්ශන පත්‍රය පුරවනු ඇත: http://codepen.io/CrocoDillon/pen/fBJxu

එසේම, කරුණාකර මෙම ලිපිය බලන්න, එය රේඛාවේ උස සකස් කිරීම සඳහා 'උණු කළ ඊයම්' ලෙස හඳුන්වන තාක්ෂණයක් භාවිතා කරයි. CSS හි ද්‍රව නායකත්වය


559
නමුත් කන්ටේනරය දර්ශන පුවරුව (ශරීරය) නොවේ නම් කුමක් කළ යුතුද?
ඇලෙක්ස්

13
Lex ඇලෙක්ස්, ඒ JS ප්‍රදේශය. FitText.jsසපයන ලද @jbenjohnson ලිපියේ පතුලේ ඇති විකල්පය උත්සාහ කරන්න .
රොබට්

10
ඊනියා මූලද්‍රව්‍ය විමසීම් පැමිණෙන්නේ මෙහිදීය. මාධ්‍ය විමසීම් මෙන් නොව, මූලද්‍රව්‍ය විමසීම් මඟින් එහි අඩංගු කොටස මත පදනම්ව දේවල් විශාල කරනු ඇත, දර්ශන පත්‍රය නොව පුදුම සහගත වනු ඇත! නමුත් අවාසනාවකට එය තවමත් නොපවතී. කෙසේ වෙතත්, ඔබ කැමති නම් සමහර බහු පිරවුම් සහ සංකල්ප සනාථ කිරීමේ සංකල්ප පවතී: coding.smashingmagazine.com/2013/06/25/… සහ filamentgroup.com/lab/element_query_workarounds
jbenjohnson

143
පහත හෙලනු ලැබුවේ මෙය ප්‍රශ්නයට පිළිතුරු නොදෙන බැවිනි. ඔහු විමසුවේ කන්ටේනරය ගැන මිස දර්ශන පථය ගැන නොවේ. සම්පූර්ණයෙන්ම වෙනස් භාවිත නඩුව.
SongBox

7
“ආරම්භක අඩංගු බ්ලොක්” යන්නෙන් මූල මූලද්‍රව්‍යය දැක්වේ. අසන ලද ප්‍රශ්නයට නිවැරදි පිළිතුර මෙය නොවේ.
ග්ලයිෆ්

327

නමුත් කන්ටේනරය දර්ශන පුවරුව (ශරීරය) නොවේ නම් කුමක් කළ යුතුද?

පිළිගත් පිළිතුර යටතේ ඇලෙක්ස් විසින් කරන ලද අදහසකින් මෙම ප්‍රශ්නය අසනු ලැබේ .

එම vwකන්ටේනරය සඳහා ප්‍රමාණයට යම් ප්‍රමාණයකට භාවිතා කළ නොහැකි බව මින් අදහස් නොවේ. දැන් කිසියම් විචල්‍යතාවයක් දැකීමට නම් කන්ටේනරය යම් ආකාරයකින් නම්‍යශීලී යැයි උපකල්පනය කළ යුතුය. සෘජු ප්‍රතිශතයක් widthහරහා හෝ 100% us ණ ආන්තිකයක් හරහා වේවා . කන්ටේනරය සැමවිටම සකසා ඇත්නම් ලක්ෂ්‍යය "මූට්" බවට පත්වේ, අපි කියමු, 200pxපුළුල් - ඉන්පසු a ලෙස සකසන්න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ඔබට හොඳ පෙනුමක් ලබා දීමටයි. ඉහත CSS අන්තර්ගතය තුළ මගේ අදහස් දැක්වීමේදී ඔබට දැකිය හැකි පරිදි, ඔබට සම්පූර්ණ ගණකාධිකරණ ප්‍රමාණයට සාපේක්ෂව ගණිතමය වශයෙන් "සිතිය හැකිය", නමුත් ඔබට එය කිරීමට අවශ්‍ය නැත . පා text ය කන්ටේනරය සමඟ නම්‍යශීලී වීමට යන්නේ කන්ටේනරය දර්ශනපත්‍ර ප්‍රමාණය වෙනස් කිරීමත් සමඟ නම්‍යශීලී වන බැවිනි. යාවත්කාලීන කිරීම: වෙනස් ප්‍රමාණයේ බහාලුම් දෙකකට උදාහරණයක් මෙන්න .

උදාහරණ 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%@mediafont-size5vw * .25 = 1.2550% කන්ටේනරයේ දර්ශනපටි ප්‍රමාණයෙන් අඩකින් අඩු , නමුත් දැන් එහි ප්‍රතිශත ගණනය කිරීම්වල වෙනසක් හේතුවෙන් එය අඩු වී ඇත.

අභියෝගයක්

සමග වන CSS3 calc()කාර්යය භාවිතා, එය දුෂ්කර ගතිකව වෙනස් කිරීම සඳහා, එම කාර්යය සඳහා වැඩ කරන්නේ නැහැ ලෙස බවට පත් font-sizeමේ කාලය වන විට කටයුතු කිරීම. එබැවින් ඔබේ පළල වෙනස් වන්නේ නම් ඔබට පිරිසිදු CSS 3 ගැලපුමක් කළ නොහැක calc(). ඇත්ත වශයෙන්ම, ආන්තිකයන් සඳහා පළල සුළු වශයෙන් වෙනස් කිරීම කිසියම් වෙනසක් සහතික කිරීමට ප්‍රමාණවත් නොවනු ඇත font-size, එබැවින් එය වැදගත් නොවේ.


: (එහි දසුන් තොට-ප්රතිශතයක් දිග සමග ක්රෝම් දෝෂ වන අතර කවුළුව ගැලපීම් code.google.com/p/chromium/issues/detail?id=124331 )
thirtydot

@thirtydot: එය අවාසනාවන්තයි (නමුත් දැනුවත්ව සිටීම හොඳයි, ස්තූතියි). දෝෂය ඉක්මනින් විසඳෙනු ඇතැයි බලාපොරොත්තු වෙමු, නමුත් එය කාලයක් තිස්සේ පවතින බව පෙනේ.
ස්කොට්ස්

21
විශිෂ්ට පිළිතුර, කෙසේ වෙතත්, අඩංගු මූලද්‍රව්‍යයේ උපරිම පළල තිබේ නම් එය ක්‍රියා නොකරනු ඇත.
හිමාටර්ස්

3
Rist ක්‍රිස්ටෝෆර් නොල්ග්‍රන්: එය මගේ පිළිතුරේ සඳහන් කරුණු දෙකකට සම්බන්ධයි: (1) “කන්ටේනරය යම් ආකාරයකින් නම්‍යශීලී යැයි උපකල්පනය කිරීම” ('උපරිම පළල' ළඟා වූ පසු එය තවදුරටත් නම්‍යශීලී නොවේ, එබැවින් ගැටළුවක් පවතී ). (2) 'උපරිම පළල' ළඟා විය යුත්තේ කුමන අවස්ථාවේදී දැයි කෙනෙකුට තීරණය කළ හැකි නම්, මා සඳහන් කළ පරිදි, @mediaඑම අවස්ථාවේ දී අකුරු ප්‍රමාණයෙන් වෙනස් වන ආකාරය වෙනස් කිරීමට ඔබට විවේක ස්ථානයක් තැබිය හැකිය (අත්‍යවශ්‍යයෙන්ම එය ළඟා වන විට ස්ථාවර ප්‍රමාණයක් ලබා දෙයි max-width) . max-widthතත්වයක් සමඟ වැඩ කිරීමට සිතුවිල්ලක් පමණි .
ස්කොට්ස්

මාධ්‍ය විමසීම් හරහා බහාලුම් මූලද්‍රව්‍යය ගතිකව වෙනස් වන විට ඔබට විග්‍රහයක් කළ හැකි යැයි ඔබ සිතනවාද? මට තේරෙන බව මට විශ්වාස නැත.
J82

64

SVG සමඟ විසඳුම:

.resizeme {
  resize: both;
  margin: 0;
  padding: 0;
  height: 75px;
  width: 500px;
  background-color: lightblue;
  overflow: hidden;
}
<div class="resizeme">
  <svg
    width="100%"
    height="100%"
    viewBox="0 0 500 75"
    preserveAspectRatio="xMinYMid meet"
    style="background-color:green"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
  >
        <text
          x="0"
          y="75"
          font-size="75"
          fill="black"
        >█Resize This█</text>
      </svg>
</div>

SVG සමඟ විසඳුම සහ පෙළ එතීම භාවිතා කරමින් foreignObject:

.resizeme {
  resize: both;
  margin: 0;
  padding: 0;
  height: 200px;
  width: 500px;
  background-color: lightblue;
  overflow: hidden;
}
<div class="resizeme">
  <svg
    width="100%"
    height="100%"
    viewBox="0 0 500 200"
    preserveAspectRatio="xMinYMin meet"
  >
      <foreignObject width="100%" height="100%" xmlns="http://www.w3.org/1999/xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml" style="background-color:lightgreen;">
          <h1>heading</h1>
          <p>Resize the blue box.</p>
        </div>
      </foreignObject>
    </svg>
</div>


1
මුලදී මෙම අදහස හොඳයි. <html> ඇතුළත SVG හි අකුරු පහසුවෙන් පාලනය කළ නොහැකි බව එවිට ඔබට වැටහේ. ජංගම සහ ඩෙස්ක්ටොප් වල අකුරු වෙනස් වන අතර එය අවසාන පළලට බලපායි.
ස්ටොපි

11
ඔබට HTML / CSS වෙතින් සම්පූර්ණයෙන්ම SVG විලාසිතාවක් කළ හැකිය
gman

2
SVG පේළිගත නම් SVG css සමඟ මෝස්තර කළ හැකිය (img ටැගයක් භාවිතා නොකරන්න).

9
ගතික බහාලුමක් මත පදනම්ව පරිමාණය කරන හොඳම, වඩාත්ම පුරෝකථනය කළ හැකි විසඳුම මෙයයි.
ජෝෂුවා ඩේවිඩ්

1
මට පරිමාණය කිරීමට අවශ්‍ය අයිකන සඳහා මෙය භාවිතා කරන ලදි. මෙය පුදුම සහගතයි!
maracuja-ju

36

මගේ එක් ව්‍යාපෘතියක අකුරු ප්‍රමාණය මගේ අවශ්‍යතාවන්ට ගැලපෙන පරිදි සකස් කිරීම සඳහා මම vw සහ vh අතර “මිශ්‍රණයක්” භාවිතා කරමි, උදාහරණයක් ලෙස:

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

OP හි ප්‍රශ්නයට මෙය පිළිතුරු නොදෙන බව මම දනිමි, නමුත් සමහර විට එය වෙනත් කෙනෙකුට විසඳුමක් විය හැකිය.


3
ඔබ භාවිතා කිරීමට vminසහ / හෝ vmaxඒ වෙනුවට වඩා හොඳ විය හැකිය .
sebastian_k

4
chrome dev මෙවලම් මෙය අවලංගු දේපල වටිනාකමක් ලෙස
හඳුන්වයි

32

calc()CSS ඒකක සහ ගණිතය සමඟ පිරිසිදු-CSS විසඳුම

මෙය හරියටම OP ඉල්ලන දේ නොවේ, නමුත් යමෙකුගේ දිනයක් බවට පත් කළ හැකිය. මෙම පිළිතුර හැන්දක් පෝෂණය කිරීම පහසු නොවන අතර සංවර්ධකයාගේ අවසානය පිළිබඳ පර්යේෂණ කිහිපයක් අවශ්‍ය වේ.

මම අවසාන වශයෙන් calc()විවිධ ඒකක සමඟ මේ සඳහා පිරිසිදු-සීඑස්එස් විසඳුමක් ලබා ගැනීමට පැමිණියෙමි . ඔබේ ප්‍රකාශනය සකස් කිරීම සඳහා ඔබට සූත්‍ර පිළිබඳ මූලික ගණිතමය අවබෝධයක් අවශ්‍ය වේ calc().

මම මෙය සකස් කරන විට, මට DOM හි දෙමව්පියන් කිහිප දෙනෙකු සමඟ සම්පූර්ණ පිටු පළල ප්‍රතිචාරාත්මක ශීර්ෂයක් ලබා ගැනීමට සිදු විය. මම මෙහි මගේ අගයන් භාවිතා කරමි, ඒවා ඔබේම දෑ සමඟ ප්‍රතිස්ථාපනය කරන්න.

ගණිතයට

ඔබට අවශ්‍ය වනු ඇත:

  • සමහර දර්ශනපත්‍රයේ මනාව සකස් කළ අනුපාතය. මම පික්සල් 320 ක් භාවිතා කළෙමි, මේ අනුව මට පික්සල් 24 ක් උස සහ පික්සල් 224 ක් පළල ලැබුණි, එබැවින් අනුපාතය 9.333 ... හෝ 28/3 වේ
  • බහාලුම් පළල, මා සතුව තිබූ padding: 3emඅතර සම්පූර්ණ පළල නිසා මෙය සිදුවිය100wv - 2 * 3em

X යනු බහාලුම්වල පළල වන බැවින් එය ඔබේම ප්‍රකාශනයකින් ප්‍රතිස්ථාපනය කරන්න හෝ සම්පූර්ණ පිටු පෙළ ලබා ගැනීම සඳහා අගය වෙනස් කරන්න. 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අදහස් කරන්නේ සම්පූර්ණ දර්ශන පළල, සහ මගේ ඉලක්කය වූයේ සම්පූර්ණ පළල ශීර්ෂයක් පෑඩින් කිරීමෙනි.

අනුපාතය. එක් දර්ශන තලයක පළල සහ උස ලබා ගැනීම මට සෙල්ලම් කිරීමට අනුපාතයක් ලබා දුන් අතර අනුපාතය සමඟ අනෙක් දර්ශනපථ පළලෙහි උස කුමක් විය යුතුදැයි මම දනිමි. ඒවා අතින් ගණනය කිරීම සඳහා බොහෝ කාලයක් ගත වන අතර අවම වශයෙන් කලාප පළලක්වත් ගත වේ, එබැවින් එය හොඳ පිළිතුරක් නොවේ.

නිගමනය

කිසිවෙකු මෙය හදුනා නොගන්නේ මන්දැයි මම කල්පනා කරමි. සමහර අය මෙය CSS සමඟ සම්බන්ධ වීමට නොහැකි වනු ඇතැයි කියති. මූලද්‍රව්‍ය සැකසීමේදී මම ජාවාස්ක්‍රිප්ට් භාවිතා කිරීමට කැමති නැත, එබැවින් වැඩි වැඩියෙන් හාරා නොගෙන ජාවාස්ක්‍රිප්ට් (සහ jQuery ගැන අමතක කරන්න) පිළිතුරු පිළිගන්නේ නැත. සියල්ලට ම, මෙය හදුනා ගැනීම සතුටක් වන අතර මෙය වෙබ් අඩවි නිර්මාණයේ පිරිසිදු-CSS ක්‍රියාත්මක කිරීමේ එක් පියවරකි.

මගේ පා ​​text යේ අසාමාන්‍ය සම්මුතියක් ගැන මම සමාව අයදිමි, මම ඉංග්‍රීසියෙන් ස්වදේශීය කථිකයෙකු නොවන අතර ස්ටැක් පිටාර ගැලීමේ පිළිතුරු ලිවීමටද අලුත් ය.

සමහර බ්‍රව්සර්වල අප සතුව නපුරු අනුචලන ඇති බව ද සඳහන් කළ යුතුය. නිදසුනක් ලෙස, ෆයර්ෆොක්ස් භාවිතා කරන විට, 100vwඑහි අර්ථය වන්නේ දර්ශන පථයේ සම්පූර්ණ පළල, අනුචලන තීරුව යටතේ (අන්තර්ගතය පුළුල් කළ නොහැකි තැන)!


15
මෙම විසඳුම ක්‍රියාත්මක වන්නේ ඔබ අකුරු දන්නා IF (1), (2) පරිශීලකයාගේ උපාංගයේ අකුරු ලබා ගත හැකි අතර (3) පෙළ සෑම විටම සමාන වේ. මෙය ඉතා සීමිත භාවිත අවස්ථාවක් බවට පත් කරයි.
ඇන්ඩ්‍රි වොල්ජින්

මගේ බහාලුම උදාහරණයක් ලෙස සවි කර ඇත්නම් කුමක් දැයි මට තේරෙන්නේ නැත: 640px සහ 16: 9 අනුපාතය. මා ලිවිය යුතු ගණනය කිරීම් මොනවාද?
pery mimon

1
ඔබේ බහාලුම් පළල x640px සහ අනුපාතය r16: 9, එබැවින්: x = 640px, r = 16 / 9, y = x / r = 640px / (16 / 9) = 360px
hegez

සටහන: මෙය ක්‍රියාත්මක වන්නේ ඔබට ඇත්ත වශයෙන්ම 16: 9 ප්‍රමාණයේ පෙළක් ඇත්නම් පමණි, එය අමුතු තත්වයකි. සමහර විට පිළිතුර දෙවන වර කියවීම ප්‍රයෝජනවත් විය හැකිය. එසේම, මෙය ක්‍රියාත්මක වන්නේ එක් ලයිනර් සඳහා පමණි.
hegez

ඇත්තම කිව්වොත් ඔබ පැහැදිලි කරන්නේ නැහැ "යම් දර්ශන තලයක මනාව සකසන ලද අනුපාතය. මම පික්සල් 320 ක් භාවිතා කළෙමි, මේ අනුව මට පික්සල් 24 ක් උස සහ පික්සල් 224 ක් පළල ලැබුණි, එබැවින් අනුපාතය 9.333 ... හෝ 28/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 ක පළල බහාලුමක් තුළ ඔබට pපික්සල් 12 ක අකුරු ප්‍රමාණයක් සහිත මූලද්‍රව්‍යයක් ඇති බව කියමු. ඔබේ අදහස අනුව එය පික්සල් 300 ක පළල බහාලුමක් බවට පත් වනු ඇත. අඩු සීමාවක් තිබිය යුතුයි.

වෙනත් විසඳුම් වනුයේ මාධ්‍ය විමසුම් සමඟ වන අතර එමඟින් ඔබට විවිධ පළල සඳහා අකුරු සැකසිය හැකිය.

නමුත් මම නිර්දේශ කරන විසඳුම් නම් ඒ සඳහා ඔබට උදව් වන ජාවාස්ක්‍රිප්ට් පුස්තකාලයක් භාවිතා කිරීමයි. හා fittext.js මම මෙතෙක් සොයා ගෙන ඇති.


6
මෙම remඒකකය අර්ථය, මූල සාධකය ඥාතියෙකු වන htmlනොවේ අංගයක් වන bodyඅංගයක්. DOM හි මූල මූලද්රව්යය htmlටැගය වේ. developer.mozilla.org/en-US/docs/Web/CSS/length .. remහැම විටම සාපේක්ෂව වේ htmlමූල අංගයක්, ශරීරයේ ටැගය නොවන ටැගය, .. නමුත් හොඳ පිළිතුරක් :)
ජොනතන් Marzullo

fittext.js විසින් කාර්යය ඉටු කරයි, මම එම විසඳුම නැවත නිර්දේශ කළෙමි!
ජාසෙක් ඩියුර්ඩ්සිකොව්ස්කි

ෆිට් ටෙක්ස්ට් මට ජයග්‍රාහකයා විය. විකල්ප කිහිපයක් උත්සාහ කළ නමුත් මෙය සරලම බව පෙනෙන අතර Drupal / Backdrop CMS සමඟ හොඳින් සම්බන්ධ වී ඇත. 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
මෙතෙක් මෙය හොඳම විසඳුමයි. කෙටි හා සැහැල්ලු
wp ශිෂ්‍ය

නරක පුරුදු සහ දැඩි ලෙස අකාර්යක්ෂමයි
ජැක් ගිෆින්

@tntrox අද මෙන් අද මෙන් අකාර්යක්ෂම, එය මීට වසර 4 කට පෙර වඩා අකාර්යක්ෂම විය. වඩා හොඳ විකල්ප වෙනුවට මම මෙම පිළිතුර ප්‍රතික්ෂේප කරමි. ඔව්, IE සහාය සඳහා කෙනෙකුට ජාවාස්ක්‍රිප්ට් අවශ්‍ය වේ. එහෙත්, යමෙකුට ජාවාස්ක්‍රිප්ට් අවශ්‍ය නොවේ.
ජැක් ගිෆින්

3
මම හිතන්නේ මගේ නොදැනුවත්කම මෙහි පෙන්වයි. නමුත් ඉහත භයානක වන්නේ ඇයි?

මම හිතන්නේ නැහැ ඒක භයානකයි කියලා. එය වඩාත් කියවිය හැකි වන පරිදි සුළු හැඩතල ගැන්වීම් කිහිපයක් නිර්දේශ කරමි. මම අවම වශයෙන් එක් එක් var වෙනම පේළියක තබමි. return thisශ්‍රිතය අවසානයේ එය අවශ්‍ය නොවනු ඇත . කාර්ය සාධනය සඳහා ඔබට ද්‍රාවණය අඩු කිරීමට අවශ්‍ය විය හැකි බැවින් ඔබ ඇදගෙන යන විට එය නැවත ඇඳීම සිදු නොවේ. එය ඉතා සරල කේතයකි, එබැවින් යමෙකුට ඔවුන්ගේ වැඩිදියුණු කළ විසඳුම සුළු පරිශ්‍රමයකින් පදනම් කර ගත හැකිය.
Mnebuerquo

19

ජාවාස්ක්‍රිප්ට් නොමැතිව මෙය කිරීමට ක්‍රමයක් තිබේ !

ඔබට පේළිගත SVG රූපයක් භාවිතා කළ හැකිය. ඔබට සීඑස්එස් එස්වීජී එකක පේළියේ තිබේ නම් එය භාවිතා කළ හැකිය. මෙම ක්‍රමය භාවිතා කිරීමෙන් ඔබේ SVG රූපය එහි බහාලුම් ප්‍රමාණයට ප්‍රතිචාර දක්වන බව ඔබ මතක තබා ගත යුතුය.

පහත විසඳුම භාවිතා කිරීමට උත්සාහ කරන්න ...

HTML

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

CSS

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/

මීට වඩා දීප්තිමත් යමක් අවශ්‍යද?

SVG පින්තූර ඔබට හැඩතල සහ අපද්‍රව්‍ය සමඟ සිසිල් දේවල් කිරීමට ඉඩ දෙයි. පරිමාණය කළ හැකි පෙළ සඳහා මෙම විශිෂ්ට භාවිත අවස්ථාව බලන්න ...

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


4
මෙම විසඳුම vwප්‍රමාණය සමඟ පිළිගත් විසඳුමට වඩා වෙනස් නොවේ . ඔබ පෙළ වෙනස් කරන්නේ නම්, සියල්ල සීමාවෙන් බැහැර වේ.
N69S

14

මෙය සුපිරි ප්‍රායෝගික නොවිය හැකි නමුත්, අක්ෂර / පිටුවේ ප්‍රමාණය කියවීමට සවන් දෙන / ලූප (අන්තරය) ඇති කිසිදු ජාවාස්ක්‍රිප්ට් එකක් නොමැතිව, මවුපියන්ගේ function ජු කාර්යයක් වීමට ඔබට අවශ්‍ය නම්, එය කිරීමට ක්‍රමයක් තිබේ . අයිෆ්‍රේම්.

Iframe තුළ ඇති ඕනෑම දෙයක් iframe හි ප්‍රමාණය දර්ශනපත්‍රයේ ප්‍රමාණය ලෙස සලකනු ඇත. එබැවින් උපක්‍රමය නම්, ඔබේ පා text ය වීමට අවශ්‍ය උපරිම පළල සහ පළල උපරිම උස හා සමාන වන අයිෆ්‍රේම් එකක් සෑදීමයි * විශේෂිත පෙළෙහි දර්ශන අනුපාතය.

පෙළපොත් ඒකක සඳහා පෙළ සඳහා මව් ඒකක සමඟ පැමිණිය නොහැකි සීමාව පසෙකට දමමින් (මෙන්,% ප්‍රමාණය අනෙක් සියල්ලන් මෙන් හැසිරෙන පරිදි), දර්ශනපථ ඒකක ඉතා ප්‍රබල මෙවලමක් සපයයි: අවම / උපරිම මානය ලබා ගැනීමට හැකිවීම . ඔබට එය වෙනත් තැනක කළ නොහැක - ඔබට කිව නොහැක ... මෙම කොට් of ාශයේ උස මවුපියන්ගේ පළල බවට පත් කරන්න * යමක්.

එසේ පැවසුවහොත්, උපක්‍රමය වන්නේ vmin භාවිතා කිරීම සහ 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 අතින් සැකසිය යුතුය. ඔබ සම්පූර්ණ CSS ගොනුව ඇමිණුවහොත්, එය බොහෝ පෙළ ප්‍රදේශ සඳහා කලාප පළලක් ලබා ගනී. ඉතින්, මම කරන්නේ මගේ CSS වෙතින් කෙලින්ම අවශ්‍ය රීතිය අනුයුක්ත කිරීමයි.

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

ඔබට CSS රීතිය / පෙළ ප්‍රදේශයට බලපාන සියලුම CSS නීති ලබා ගත හැකි කුඩා ශ්‍රිතයක් ලිවිය හැකිය.

ජාවාස්ක්‍රිප්ට් සවන් දීමකින් තොරව මට එය කළ හැකි වෙනත් ක්‍රමයක් ගැන සිතිය නොහැකිය. සැබෑ විසඳුම මව් රුවනයකි ශ්රිතයක් ලෙස පරිමාණ පෙළ කිරීමට ක්රමයක් ලබා දීමට බ්රව්සර සඳහා වනු ඇත හා ද එම vmin / vmax වර්ගය පහසුකම් ලබා ගැනීමට.

JSFiddle: https://jsfiddle.net/0jr7rrgm/3/ (රතු චතුරස්රය මූසිකයට අගුළු දැමීමට වරක් ක්ලික් කරන්න, මුදා හැරීමට නැවත ක්ලික් කරන්න)

ෆෙඩෙල් හි ඇති බොහෝ ජාවාස්ක්‍රිප්ට් මගේ අභිරුචි ක්ලික්-ඇදීමේ කාර්යය පමණි.


'නව' සහ 'දිලිසෙන' (ඩ්‍රම්රෝල් කරුණාකර ...) srcdocගුණාංගය ගෙන එන විට එසේ නොවේ : jsfiddle.net/wauzgob6/3
ජැක් ගිෆින්

9

භාවිතා කිරීම vw, emසහ සම. නිසැකවම ක්‍රියාත්මක වේ, නමුත් IMO එයට සෑම විටම මනාව සකස් කිරීම සඳහා මිනිසෙකුගේ ස්පර්ශයක් අවශ්‍ය වේ.

මෙන්න මම ලියූ පිටපතක් human 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
+1 emsමිනිස් ස්පර්ශයක් සහ සිරස් රිද්මයක් අවශ්‍ය බව පිළිගන්නා කෙනෙකුට යම් ආකාරයක මන්ත්‍ර ගුරුකමක් නොවේ.
serraosays

7

100% මූලික අකුරු ප්‍රමාණයට සාපේක්ෂ වන අතර, ඔබ එය සකසා නොමැති නම් බ්‍රව්සරයේ පරිශීලක-නියෝජිත පෙරනිමිය වනු ඇත.

ඔබට පසුව ඇතිවන බලපෑම ලබා ගැනීම සඳහා, කවුළු මානයන් හා සැසඳීමේදී මූලික අකුරු ප්‍රමාණය වෙනස් කිරීමට මම ජාවාස්ක්‍රිප්ට් කේතයක් භාවිතා කරමි.


7

ඔබේ CSS ඇතුළත, ඔබේ සැලසුම කැඩීමට පටන් ගන්නා ඕනෑම තැනකට පික්සල් 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
මෙම ස්ක්‍රිප්ට් සෑම ප්‍රතිප්‍රමාණන සිදුවීමක් සහ / හෝ දිශානතියේ වෙනසක් මත ක්‍රියාත්මක වන බැවින් මම මෙය භාවිතා කිරීම නිර්දේශ නොකරමි. ජාවාස්ක්‍රිප්ට් පදනම් කරගත් විසඳුමක් භාවිතා කරනවා වෙනුවට ඉහත දක්වා ඇති ආකාරයට CSS පදනම් කරගත් විසඳුමක් සොයන්න.
මාර්ක් වර්කියෙල්

1
ප්‍රමාණය වෙනස් කිරීම සහ දිශානතිය වෙනස් කිරීම "දුර්ලභ" සිදුවීම් වේ, මෙහි කාර්ය සාධන ගැටළු නොමැත. ඔබ කැමති නම්, සිදුවීම් සමඟ බැඳී නොසිටින්න (උදාහරණයක් ලෙස ඒවා බහාලුම් ප්‍රමාණය වෙනස් නොකරන්නේ නම්, ප්‍රතිචාර නොදක්වන වෙබ් අඩවි සඳහා). මෙම විසඳුම මෙන් CSS විසඳුම් සෑම අවස්ථාවකදීම (අකුරු පළල හෝ වෙනත්) සිතීමකින් තොරව ක්‍රියා නොකරයි.
වින්සන්ට්

මම ඔබේ පිළිතුර 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/

මම ප්‍රවාහ ටයිප් භාවිතා කර ඇති අතර එය විශිෂ්ට ලෙස ක්‍රියා කරයි (කෙසේ වෙතත් එය ජාවාස්ක්‍රිප්ට් මිස පිරිසිදු CSS විසඳුමක් නොවේ):

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

6

මම අකුරු ප්‍රමාණය වෙනුවට CSS පරිණාමනය භාවිතා කර සරල පරිමාණ ශ්‍රිතයක් සකස් කර ඇත්තෙමි. ඔබට එය ඕනෑම බහාලුමක් තුළ භාවිතා කළ හැකිය, ඔබට මාධ්‍ය විමසුම් ආදිය සැකසිය යුතු නැත. :)

බ්ලොග් සටහන: සම්පූර්ණ පළල CSS සහ JS පරිමාණය කළ හැකි ශීර්ෂකය

කේතය:

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


මම හිතන්නේ OP CSS විසඳුමක් සොයයි.
m02ph3u5

5

CSS විචල්‍යයන් භාවිතා කරන්න

කිසිවෙකු තවමත් CSS විචල්‍යයන් සඳහන් කර නැති අතර මෙම ප්‍රවේශය මට වඩාත් සුදුසු විය, එබැවින්:

ජංගම පිටුවක තිරයක පළලින් 100% ක් වන නමුත් max-width800px ක තීරුවක් ඔබගේ පිටුවේ ඇති බව කියමු , එබැවින් ඩෙස්ක්ටොප් එකේ තීරුවේ දෙපස යම් ඉඩක් ඇත. මෙය ඔබගේ පිටුවේ ඉහළින් තබන්න:

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

දැන් ඔබට එම විචල්‍යය (සාදන ලද vwඒකකය වෙනුවට ) ඔබේ අකුරු ප්‍රමාණය සැකසීමට භාවිතා කළ හැකිය . උදා

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

එය පිරිසිදු CSS ප්‍රවේශයක් නොවේ, නමුත් එය ඉතා සමීප ය.


5

Http://simplefocus.com/flowtype/ උත්සාහ කරන්න . මෙය මගේ වෙබ් අඩවි සඳහා භාවිතා කරන අතර එය පරිපූර්ණව ක්‍රියා කර ඇත.


සබැඳි වාෂ්පශීලී වේ. කරුණාකර ඔබේ පිළිතුරෙහි විසඳුම කෙලින්ම පැහැදිලි කරන්න. එසේම, ඕනෑම අන්තර්ගතයක් සමඟ අහඹු සබැඳියක් ක්ලික් කිරීමට මට අවශ්‍ය නැත.
lilalinux

5

මගේ ගැටළුව සමාන විය, නමුත් ශීර්ෂ පා within යක් තුළ පෙළ පරිමාණයට සම්බන්ධය. මම ෆිට් ෆොන්ට් අත්හදා බැලුවෙමි, නමුත් මට ප්‍රති results ල ලබා ගැනීම සඳහා සම්පීඩකය ටොගල් කිරීමට අවශ්‍ය විය, මන්ද එය පෙළ ප්‍රවාහය මෙන් මදක් වෙනස් ගැටළුවක් විසඳන බැවිනි.

මම ඔබ උපකල්පනය කන්ටේනර් ගැලපෙන අකුරු ප්රමාණය අඩු බව මගේ පුංචි ප්ලගිනය ලියූ ඒ නිසා 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

FitText භාවිතා කිරීමට උත්සාහ කරන්න ප්ලගිනය , මන්ද වීව්පෝට් ප්‍රමාණ මෙම ගැටලුවට විසඳුම නොවන බැවිනි.

පුස්තකාලය එක් කරන්න:

<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

මෙම ගුණාංගය සමඟ ඔබේ අංගය සැමවිටම තබා ගන්න :

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

හෝ

CSS: style = "font-size: 100%;"

ඔබ පූර්ණ තිරයට යන විට, ඔබට දැනටමත් පරිමාණ විචල්‍යයක් ගණනය කර තිබිය යුතුය (පරිමාණය> 1 හෝ පරිමාණය = 1). ඉන්පසු, පූර්ණ තිරයේ:

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

එය කුඩා කේත සමඟ හොඳින් ක්‍රියා කරයි.


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);
    }
});

ප්‍රති ult ලය


3

මෙය මට ප්‍රයෝජනවත් විය:

`අකුරු-ප්‍රමාණය: 10px` සැකසීමෙන් ලබාගත් පළල / උස මත පදනම්ව අකුරු ප්‍රමාණය ආසන්න වශයෙන් දැක්වීමට මම උත්සාහ කරමි. මූලික වශයෙන්, අදහස නම් “මට පික්සල් 20 ක් පළල සහ පික්සල් 11 ක උසකින් යුත්“ අකුරු ප්‍රමාණය: 10px ”තිබේ නම්, පික්සල් 50 ක් පළල සහ පික්සල් 30 ක උසකින් යුත් කන්ටේනරයක් ගණිතයට ගත හැකි උපරිම අකුරු ප්‍රමාණය කුමක් ද?

පිළිතුර ද්විත්ව සමානුපාතික පද්ධතියකි:

{20: 10 = 50: X, 11: 10 = 30: Y} = {X = (10 * 50) / 20, Y = (10 * 30) / 11}

දැන් X යනු පළල හා ගැලපෙන අකුරු ප්‍රමාණයකි, Y යනු උසකට ගැලපෙන අකුරු ප්‍රමාණයකි; කුඩාම අගය ගන්න

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;
}

සැ.


2

ජාවාස්ක්‍රිප්ට් පසුබෑමක් ලෙස (හෝ ඔබේ එකම විසඳුම), ඔබට මගේ jQuery පරිමාණ ප්ලගිනය භාවිතා කළ හැකිය , එමඟින් referenceවිකල්පය සම්මත කිරීමෙන් මව් මූලද්‍රව්‍යයට (බහාලුම්) සාපේක්ෂව පරිමාණය කිරීමට ඔබට ඉඩ සලසයි .


2

එය ඕනෑම කෙනෙකුට ප්‍රයෝජනවත් වේ නම්, මෙම ත්‍රෙඩ් එකේ ඇති බොහෝ විසඳුම් පෙළ පේළි කිහිපයකට ඔතා, ඊ.

නමුත් පසුව මම මෙය සොයා ගත් අතර එය ක්‍රියාත්මක විය:

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

උදාහරණ භාවිතය:

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


2

ගතික පෙළ සඳහා, මෙම ප්ලගිනය බෙහෙවින් ප්‍රයෝජනවත් වේ:

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

CSS එක් කරන්න:

.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();


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 + '%';
    }
  }
}

ඔබට සමහර විට vw / vh පසුබෑමක් ලෙස භාවිතා කළ හැකිය, එබැවින් ඔබ ගතිකව පවරයි emහෝrem ජාවාස්ක්‍රිප්ට් භාවිතා කර ඒකක කිරීම, ජාවාස්ක්‍රිප්ට් අක්‍රීය කර ඇත්නම් අකුරු කවුළුවට පරිමාණය වන බව සහතික කරයි.

අයදුම් කරන්න .resizeඔබ පරිමාණය කිරීමට කැමති පෙළ අඩංගු සියලුම අංග පන්තිය .

කවුළු ප්‍රමාණය වෙනස් කිරීමට පෙර සිදුවීම් ශ්‍රාවකයා එක් කිරීමට පෙර ශ්‍රිතය ක්‍රියාත්මක කරන්න. එවිට, එහි බහාලුමට නොගැලපෙන ඕනෑම පෙළක් පිටුව පූරණය වන විට මෙන්ම ප්‍රමාණය වෙනස් කළ විටද පරිමාණයට අඩු වේ.

සටහන: මෙම පෙරනිමි font-sizeඑක්කෝ සකසා ගත යුතු em, remහෝ %නිසි ප්රතිඵල අත්කර ගැනීමට.


1

HTML

<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`;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.