Чи варто використовувати одиниці значення px чи rem у своєму CSS? [зачинено]


375

Я розробляю новий веб-сайт і хочу, щоб він був сумісний з якомога більшою кількістю браузерів та налаштувань браузера. Я намагаюся вирішити, яку одиницю вимірювання я повинен використовувати для розмірів своїх шрифтів та елементів, але не можу знайти остаточну відповідь.

Моє запитання: я повинен використовувати pxабо remв своєму CSS?

  • Поки я знаю, що використання pxне сумісне з користувачами, які коригують розмір шрифту в своєму браузері.
  • Я ігнорував ems, оскільки вони більше клопоту підтримувати, порівняно з rems, оскільки вони каскадують.
  • Деякі кажуть, що remроздільна здатність незалежна і тому більш бажана. Але інші кажуть, що більшість сучасних браузерів так чи інакше збільшують всі елементи однаково, тому використання pxне є проблемою.

Я запитую це, тому що існує дуже багато різних думок щодо того, що є найбільш бажаною мірою відстані в CSS, і я не впевнений, що найкраще.


4
Це питання суперечки та аргументації та думки, а не виду технічних питань, у яких добре. До речі, правильна відповідь - «ні». ☺
Юкка К. Корпела

Навіть коментар застарів. Тільки тому, що ОП вимагає правильної думки, це не означає, що ми будемо лише давати власну думку. Майже через 8 років це питання показує, що все ще існує зацікавленість у розвитку теми. Поточні відповіді є обґрунтованими та достатньо технічними та НЕ заперечують. Для цього я пропоную редагувати слово "думка" на "досвід", щоб ми не потрапляли в цю пастку повторного відкриття та закриття питання знову і знову.
Тім Вермален

2
@TimVermaelen це питання було закрито лише один раз у житті. Внесена зміна не була суттєвою, оскільки відповідь все ще повністю залежить від контексту, який неможливо надати, якщо ОП не редагує питання, щоб задати конкретний сценарій. Не існує "найкращого" варіанту для всіх випадків, тому це питання ґрунтується на думці.
TylerH

Відповіді:


418

TL; DR: використання px.

Факти

  • По-перше, надзвичайно важливо знати, що за специфікацієюpx одиниця CSS не дорівнює одному фізичному пікселю відображення. Це завжди було правдою - навіть у специфікації CSS 1 1996 року .

    CSS визначає опорний піксель , який вимірює розмір пікселя на дисплеї 96 dpi. На дисплеї, який має dpi, істотно відмінний від 96dpi (наприклад, відображення Retina), користувальницький агент змінює масштаб pxпристрою таким чином, щоб його розмір відповідав розміру опорного пікселя. Іншими словами, саме це масштабування саме тому 1 піксель CSS дорівнює 2 фізичним пікселям відображення сітківки.

    Однак, до 2010 року (і незважаючи на ситуацію мобільного масштабування) pxмайже завжди дорівнював одному фізичному пікселю, оскільки всі широкодоступні дисплеї були близько 96 dpi.

  • Розміри, вказані в ems, відносяться до батьківського елемента . Це призводить до em"проблеми складання ", де вкладені елементи стають поступово більшими або меншими. Наприклад:

    body { font-size:20px; } 
    div { font-size:0.5em; }

    Дає нам:

    <body> - 20px
        <div> - 10px
            <div> - 5px
                <div> - 2.5px
                    <div> - 1.25px
  • CSS3 rem, який завжди стосується лише кореневого htmlелемента, зараз підтримується у 96% усіх браузерів, які використовуються .

Думка

Я думаю, що всі згодні з тим, що добре створити ваші сторінки так, щоб вони були пристосовані до всіх, а також врахували людей із вадами зору. Одне з таких питань (але не єдине!) Дозволяє користувачам збільшувати текст вашого сайту, щоб його було легше читати.

На початку єдиним способом надати користувачам спосіб масштабування розміру тексту було використання одиниць розміру відносного розміру (наприклад, ems). Це тому, що меню розміру шрифту браузера просто змінило розмір кореневого шрифту. Таким чином, якщо ви вказали розміри шрифту в px, вони не змінюватимуть масштаб при зміні параметра розміру шрифту браузера.

Сучасні браузери (і навіть не дуже сучасний IE7) усі змінили метод масштабування за замовчуванням, щоб просто збільшити масштаб на все, включаючи зображення та розміри вікон. По суті, вони роблять опорний піксель більшим або меншим.

Так, хто - то ще можуть змінити свій браузер стилі по замовчуванням для настройки розміру шрифту по замовчуванням (еквівалент варіанти розміру шрифту старого стилю), але це дуже езотеричний спосіб йти про це , і я б парі , ніхто - не робить. (У Chrome він похований під розширеними налаштуваннями, веб-контентом, розмірами шрифтів. У IE9 це ще більше приховано. Вам потрібно натиснути Alt та перейти до Перегляд, розмір тексту.) Набагато простіше просто вибрати параметр масштабування у головне меню браузера (або використовувати Ctrl+ +/ -/ колесо миші).

1 - в межах статистичної помилки, природно

Якщо ми вважаємо, що більшість користувачів використовують масштабні сторінки, використовуючи параметр збільшення, я вважаю, що відносні одиниці здебільшого не мають значення. Набагато простіше розробити свою сторінку, коли все вказано в одній одиниці (зображення розроблені в пікселях), і вам не доведеться турбуватися про складання. ( "Мені сказали, що математики не буде" - там потрібно вирішити, що потрібно розраховувати, на що насправді працює 1.5em.)

Ще однією можливою проблемою використання лише відносних одиниць для розміру шрифту є те, що шрифти за розміром користувача можуть порушувати припущення, які створює ваш макет. Наприклад, це може призвести до того, що текст буде відсікатися або працювати занадто довго. Якщо ви використовуєте абсолютні одиниці, вам не доведеться турбуватися про несподівані розміри шрифту від порушення вашого макета.

Тому моя відповідь - використовувати піксельні одиниці. Я використовую pxдля всього. Звичайно, ваша ситуація може відрізнятися, і якщо ви повинні підтримувати IE6 (можливо, боги RFC змилуються над вами), вам все emодно доведеться використовувати s.


43
Ви повинні використовувати пікселі та rem. Тож нові браузери отримують ремарки, а старі браузери повертаються до пікселів (як це робить WordPress 2012). Це може бути автоматизовано за допомогою Sass або Less, тому все, що вам потрібно зробити - це ввести значення px, і воно автоматично виводить px та rem.
cchiera

63
Моя велика суперечка з цим аргументом полягає в тому, що під час регулювання розміру шрифту та інтервалу між чутливими точками проходу ви можете встановити новий розмір шрифту на html-елементі, і кожне встановлене вами вимірювання автоматично регулюється, тоді як з px вам потрібно буде записати нові правила для кожного вимірювання, яке ви хочете налаштувати. Звичайно, більше коригувань, можливо, знадобиться навіть при використанні рема, але при розумному плануванні ви отримуєте величезну кількість пропорційного масштабування безкоштовно. Прив’язання певних вимірювань проміжків до коду для введення, більш легкого коду та меншої складності / більшої ремонтоздатності дорівнює мені явним виграшем.
RobW

16
Якщо припустити, що жоден користувач не змінює налаштування розміру шрифту, досить сміливий. Така претензія повинна бути підкріплена даними. В іншому випадку це лише спосіб відчужити деяких користувачів, які вже неміцні (сильно слабкі зр. Ppl). Якщо можете, використовуйте rem замість px. IMO, програми повинні мати можливість незалежно масштабувати свій інтерфейс та розмір шрифту. "Просто використовувати px" - це те, що хочуть почути багато розробників, які борються з проблемою електронної пошти, але це не правильна відповідь для Інтернету.
Оліввв

18
Було б здорово провести наступні дії щодо цього. Rem зараз підтримує 95%.
Статистика навчання за прикладом

10
Неправильно, мене не хвилює IE (ніхто не повинен).
Вахід Амірі

193

Я хотів би похвалити відповідь josh3736 за надання чудового історичного контексту. Хоча це добре сформульовано, ландшафт CSS змінився за майже п’ять років відтоді, як це питання було задано. Коли це питання було задано,px ні правильну відповідь, але це вже не вірно сьогодні.


tl; dr: використанняrem

Огляд блоку

Історично px одиниці зазвичай представляли один піксель пристрою. Якщо пристрої мають більшу та більшу щільність пікселів, це не застосовується для багатьох пристроїв, наприклад, для Retina Display від Apple.

remодиниці представляють розмір r oot em . Це з font-sizeусіх матчів :root. У випадку HTML це <html>елемент; для SVG, це те<svg> елемент. За замовчуванням font-sizeу кожному браузері * є 16px.

На момент написання, remце підтримується приблизно 98% користувачів . Якщо ви стурбовані , що інший 2%, я нагадаю вам , що запити медіа також підтримується приблизно 98% користувачів .

Про використання px

Більшість прикладів CSS в Інтернеті використовують pxзначення, оскільки вони були де-факто стандартом. pt,in і в теорії можна було б використовувати різноманітні інші одиниці , але вони не справлялися з малими значеннями, тому що вам швидко доведеться вдаватися до дробів, які довше вводити, і важче міркувати.

Якщо ви хотіли тонкої межі, pxви могли б використовувати 1px, зpt вам потрібно було б використовувати 0.75ptдля послідовних результатів, і це просто не дуже зручно.

Про використання rem

remЗначення за замовчуванням 16pxне є дуже сильним аргументом для його використання. Лист 0.0625remце гірше , ніж листи0.75pt , так чому б хто - небудь використовувати rem?

Є дві частини до remПеревага перед іншими одиницями.

  • Вподобання користувачів дотримуються
  • Ви можете змінити уявне pxзначення remна все, що завгодно

Поважаючи налаштування користувачів

Збільшення браузера сильно змінилося за ці роки. Історично багато браузерів тільки збільшувались font-size, але це змінювалося досить швидко, коли веб-сайти зрозуміли, що їх прекрасні піксельні дизайни порушуються кожного разу, коли хтось збільшує чи зменшує масштаб. У цей момент браузери масштабують всю сторінку, тому масштабування на основі шрифту не виходить із зображення.

Повага до побажань користувача не виходить із картини. Тільки тому, що для браузера встановлено 16pxза замовчуванням, не означає, що будь-який користувач не може змінити свої налаштування на 24pxабо32px виправити для слабкого зору або поганої видимості (колишні відблиски екрана). Якщо ви базуєте свої одиниці rem, будь-який користувач із більшим розміром шрифту побачить пропорційно більший сайт. Бордюри будуть більшими, прокладки будуть більшими, запаси будуть більшими, все буде масштабуватися плавно.

Якщо ви базуєте свої медіа-запити rem, ви також можете переконатися, що сайт, який бачать ваші користувачі, відповідає їх екрану. Користувач з font-sizeнабором для 32pxна 640pxширокий браузер, буде ефективно бачити ваш сайт , як показано користувачеві в 16pxна 320pxширокому браузері. В RWD при використанні абсолютно немає втратrem .

Зміна видимого pxзначення

Оскільки remзаснований на font-sizeна :rootвузлі, якщо ви хочете , щоб змінити те , що 1remявляє собою, все , що вам потрібно зробити , це змінити font-size:

:root {
  font-size: 100px;
}
body {
  font-size: 1rem;
}
<p>Don't ever actually do this, please</p>

Що б ви не робили, не встановлюйте значення :rootелемента font-sizeдля pxзначення.

Якщо ви font-sizeувімкнено htmlаpx значенням, ви здувають власних уподобань без шляху , щоб отримати їх назад.

Якщо ви хочете змінити видиме значення rem, використовуйте %одиниці.

Математика для цього досить пряма.

Очевидний розмір шрифту :rootє 16px, але дозволяє сказати, що ми хочемо його змінити 20px. Все, що нам потрібно зробити, - це помножити 16на деяку цінність 20.

Створіть своє рівняння:

16 * X = 20

І вирішити для X:

X = 20 / 16
X = 1.25
X = 125%

:root {
  font-size: 125%;
}
<p>If you're using the default font-size, I'm 20px tall.</p>

Робити все в кратних кількостях 20не все так добре, але загальна пропозиція - зробити очевидний розмір remрівним 10px. Магічне число для того, 10/16яке є 0.625, або 62.5%.

:root {
  font-size: 62.5%;
}
<p>If you're using the default font-size, I'm 10px tall.</p>

Зараз проблема полягає в тому , що використовується по замовчуванням font-sizeдля іншої частини сторінки набору занадто малі, але є просте виправлення для цього: Встановити font-sizeна bodyвикористанні rem:

:root {
  font-size: 62.5%;
}

body {
  font-size: 1.6rem;
}
<p>I'm the default font-size</p>

Важливо зауважити, що при такому коригуванні, видиме значення remє тим, 10pxщо означає, що будь-яке значення, яке ви могли записати, pxможе бути перетворене безпосередньо rem, натискаючи на десяткове місце.

padding: 20px;

перетворюється на

padding: 2rem;

Вибір розміру шрифту залежить від вас, тому, якщо ви хочете, щоб не було причини, ви не можете його використовувати:

:root {
  font-size: 6.25%;
}
body {
  font-size: 16rem;
}

і мають 1remрівні 1px.

Тож у вас є це просте рішення для поваг до побажань користувачів, а також уникнення надмірного ускладнення вашої CSS.

Зачекайте, так у чому улов?

Я боявся, що ви можете це запитати. Як би я хотів зробити вигляд, що remце магія і вирішує все, все ще є певні питання. На мій погляд , нічого не порушує , але я зателефоную їм, щоб ви не могли сказати, що я вас не попередив.

Медіа-запити (використання em)

Одне з перших питань, з яким ви зіткнетеся, remстосується медіа-запитів. Розглянемо наступний код:

:root {
  font-size: 1000px;
}
@media (min-width: 1rem) {
  :root {
    font-size: 1px;
  }
}

Тут значення remзмін залежить від того, застосовується медіа-запит, а медіа-запит залежить від значення rem, і що на землі відбувається?

remу медіа-запитах використовується початкове значення font-sizeі не повинно (див. розділ Safari) враховувати будь-які зміни, які можуть статися font-sizeз :rootелементом. Іншими словами, очевидною цінністю є завжди 16px .

Це трохи дратує, бо це означає, що вам доведеться зробити деякі дробові обчислення, але я виявив, що в більшості поширених медіа-запитів вже використовуються значення, кратні 16.

|   px | rem |
+------+-----+
|  320 |  20 |
|  480 |  30 |
|  768 |  48 |
| 1024 |  64 |
| 1200 |  75 |
| 1600 | 100 |

Крім того, якщо ви використовуєте препроцесор CSS, ви можете використовувати міксинги або змінні для управління вашими медіа-запитами, що повністю замаскує проблему.

Сафарі

На жаль, є відома помилка у Safari, де зміни :rootрозміру шрифту насправді змінюють обчислені remзначення для діапазонів запитів медіа. Це може викликати дуже дивну поведінку, якщо розмір шрифту :rootелемента змінюється в медіа-запиті. На щастя, виправлення просте: використовуйте emблоки для медіа-запитів .

Контекстна комутація

Якщо ви переключаєтесь між проектами на різні проекти, цілком можливо, що видимий розмір шрифту remматиме різні значення. В одному проекті ви можете використовувати видимий розмір, 10pxде в іншому проекті може бути видимий розмір 1px. Це може заплутати і викликати проблеми.

Моя єдина рекомендація тут - дотримуватися, 62.5%щоб перетворити remна очевидний розмір 10px, тому що це було більш поширеним у моєму досвіді.

Спільні бібліотеки CSS

Якщо ви пишете CSS, який буде використовуватися на веб-сайті, який ви не контролюєте, наприклад, для вбудованого віджета, насправді немає хорошого способу дізнатися, який розмір очевидного розміру remбуде мати. Якщо це так, сміливо продовжуйте користуватися px.

Якщо ви все ще хочете використовувати rem, подумайте про випуск версії таблиць стилів Sass або LESS зі змінною для зміни масштабування на видимий розмір rem.


* Я не хочу когось відлякувати від використання rem, але мені не вдалося офіційно підтвердити, що кожен браузер використовує 16pxза замовчуванням. Розумієте, браузерів дуже багато, і одному браузеру було б не так вже й важко розходитися, скажімо, 15pxабо 18px. Проте під час тестування я не бачив жодного прикладу, коли веб-переглядач, що використовував параметри за замовчуванням у системі, що використовує налаштування за замовчуванням, мав будь-яке значення, окрім 16px. Якщо ви знайдете такий приклад, будь ласка, поділіться ним зі мною.


Я знаю, що це пізно, але мені подобається спосіб використання REM, але у мене найбільше проблем із використанням rem, коли я використовую matrix()Javascript, який використовує значення перекладу матриці px(виправте мене, якщо я помиляюся), і я так плутаюся з ним .
Ampersanda

3
@Ampersanda, в JavaScript ви багато в чому використовуєте обчислені значення пікселів. Моя рекомендація - перемикати класи, де це можливо, щоб CSS міг керувати тим, як виглядають речі. Для деяких речей ви не зможете уникнути використання JS для обчислення значень пікселів, тому найкраще ставити підрахунок значення пікселя зі стану DOM.
zzzzBov

Я бачу, так що я повинен, getComputedStyle()але результат завжди на піксель, тому я повинен ділити результат на remзначення (наприклад, 16). CMIIW
Амперсанда

@Ampersanda, тільки якщо ви фактично генеруєте remзначення, якщо у вас вже є правильне pxзначення, немає необхідності переходити на remодиниці для речей, які вже обчислені для заданого контексту.
zzzzBov

мають 1rem рівні 1px Це викликає проблеми з - за мінімального розміру шрифту в Chrome: stackoverflow.com/questions/44378664 / ... stackoverflow.com/questions/24200797 / ...
Paul

44

У даній статті описується досить добре плюси і мінуси px, emі rem.

Нарешті автор робить висновок, що найкращим методом є, ймовірно, використання обох pxі rem, оголосивши pxспочатку для старих браузерів та повторного декларування remдля нових браузерів:

html { font-size: 62.5%; } 
body { font-size: 14px; font-size: 1.4rem; } /* =14px */
h1   { font-size: 24px; font-size: 2.4rem; } /* =24px */

1
Так, саме це мене зацікавило в першу чергу. Я не розумію двох речей: він лише радить це як одиницю вимірювання шрифтів (а не елементів), і якщо я правильно його розумію, єдиною реальною причиною використання (r) em є те, щоб користувачі IE могли змінити розмір тексту?

1
@Samuel Я так вірю. Якщо б не зміна розміру тексту, я вважаю, що ми вважатимемо за краще використовувати px. Що стосується одиниці елементів, то дотримуватися їх pxбуло б краще, як зазвичай хотілося б точно розмістити елементи.
uzyn

Але якщо ви це зробите, будь-яке налаштування веб-переглядача, яке визначає розмір базового шрифту, зірве ваш макет правильно? Чому б не все було?

1
Як багато коментарів відзначити тут , що причина , нам потрібно канави px, щоб дозволити зміну розміру. Тепер, якщо ми користуємося rem, нам ще потрібно забезпечити pxрезервне копіювання (у старих браузерах). По суті, те, що це означає px, що змінити розмір підтримки краще, ніж rem. Нові веб-переглядачі підтримують pxзміну розміру, а для старих - будь-який спосіб, з якого ми збираємось px. Тепер, грунтуючись на цьому висновку, мені дуже цікаво знати, навіщо використовувати rem? Якщо я можу побачити світло в кінці тунелю.
fusionstrings

3
Немає гарантії, що такі значення, як 62,5% = 10 пікс. Це справедливо лише тоді, коли для шрифту браузера за замовчуванням встановлено 16 пікселів. Хоча це за замовчуванням, це не гарантується.
cimmanon

7

В якості рефлекторної відповіді я рекомендую використовувати rem, тому що це дозволяє змінити "рівень масштабування" всього документа за потреби, якщо це необхідно. У деяких випадках, коли ви хочете, щоб розмір був відносно батьківського елемента, тоді використовуйте em.

Але підтримка rem є плямистою, IE8 потребує поліфазу, а Webkit виявляє помилку. Більше того, підрахунок пікселів може призвести до того, що речі, такі як одна піксельна лінія, іноді зникають. Засіб полягає в кодуванні пікселів для таких дуже маленьких елементів. Це вносить ще більшу складність.

Отже, загалом, запитайте себе, чи варто цього - наскільки важливо та ймовірно, що ви змінюєте "рівень масштабування" всього документа в CSS?

У деяких випадках це так, для деяких випадків це буде ні.

Отже, це залежить від ваших потреб, і вам доведеться зважувати плюси і мінуси, оскільки використання rem і em вносить деякі додаткові міркування порівняно з "нормальним" робочим процесом на основі пікселів.

Майте на увазі, що легко переключити (а точніше конвертувати) свій CSS з px в rem (JavaScript - інша історія), оскільки наступні два блоки CSS-коду дають той самий результат:

html {
}

body {
  font-size:14px;
}

.someElement {
  width: 12px;
}

html {
  font-size:1px;
}

body {
  font-size:14rem;
}

.someElement {
  width: 12rem;
}

6

Так, REM і PX відносні, але інші відповіді пропонують перейти на REM через PX, я також хотів би створити резервну копію на прикладі доступності.
Коли користувач встановлює різний розмір шрифту в браузері, REM автоматично масштабує вгору та вниз елементи на зразок шрифтів, зображень тощо на веб-сторінці, що не стосується PX.


Наведений нижче текст лівого боку gif задається за допомогою одиниці розміру шрифту REM, тоді як правий бік шрифту встановлюється блоком PX.

введіть тут опис зображення

Як видно, REM автоматично збільшує / зменшує розмір, коли я змінюю розмір веб-сторінки за замовчуванням. (Нижній правий бік)

Розмір шрифту веб-сторінки за замовчуванням становить 16 пікселів, що дорівнює 1 рема (лише для html-сторінки за замовчуванням, тобто html{font-size:100%}), 1,25 єм дорівнює 20 пікселів

PS: хто ще використовує REM? Рамки CSS! як, наприклад, Bootstrap 4, Bulma CSS тощо, тож краще погоджуйтеся.


3

Відповідь josh3736 є гарною, але надати контрапункт через 3 роки:

Я рекомендую використовувати remодиниці для шрифтів, хоча б тому, що це полегшує вам , розробнику, змінити розміри. Це правда, що користувачі дуже рідко змінюють розмір шрифту за замовчуванням у своїх веб-переглядачах, а сучасне збільшення браузера збільшуватиме pxодиниці. Але що робити, якщо до вас звертається ваш начальник і каже: "Не збільшуйте зображення чи значки, а зробіть всі шрифти більшими". Набагато простіше просто змінити розмір шрифту кореня та дозволити всі інші шрифти масштабувати відносно цього, а потім змінити pxрозміри в десятках чи сотнях правил css.

Я думаю, що все ще має сенс використовувати pxодиниці для деяких зображень або для певних елементів компонування, які завжди повинні бути однакового розміру незалежно від масштабу дизайну.

Caniuse.com, можливо, сказав, що лише 75% браузерів, коли josh3736 опублікував свою відповідь у 2012 році, але станом на 27 березня вони вимагають 93,78% підтримки . Тільки IE8 не підтримує його серед браузерів, які вони відстежують.


1
Only IE8 doesn't support it among the browsers they track.Так? На пов’язаній сторінці зазначено, що "IE9 & IE10 не підтримують ремінь-блоки, коли вони використовуються у властивості скорочення шрифту або під час використання псевдоелементів. IE9, 10 та 11 не підтримують rem блоків, коли вони використовуються у властивості висоти рядка при використанні: перед і: після псевдоелементів. Межі розміру в ремінці зникають, коли сторінку зменшується в Chrome. Не працює на веб-переглядачі Samsung Note II Android 4.3 та Samsung Galaxy Tab 2 на Android 4.2. У Chrome 31-34 та на базі Chrome Android (як-от 4.4) виникла помилка розміру шрифту, коли елемент root має розмір відсотка ".
e-sushi

Також, пов’язаний з вашим as of March 27 they claim 93.78% support.на момент написання цього коментаря, каніуса показує лише 91,79% повної підтримки браузера. Дивлячись на ваш відсоток, я впевнений, що ви також включили підтримку баггі- браузера (зараз на рівні 2,8%, що можна інтерпретувати як оптимістичне загальне покриття 94,6% - але факт полягає в тому, що ті 2,8% мають баггі, неповну або навіть повністю відсутність підтримки ... , як було відзначено в моєму попередньому коментарі: кожна помилка є результатом іншою версією браузера і операційної система , комбінація) Ви можете виправити свою відповідь відповідно ....
е-суша

1

Я знайшов найкращий спосіб запрограмувати розміри шрифтів веб-сайту - це визначити базовий розмір шрифту для, bodyа потім використати em (або rem) для всіх інших, які font-sizeя декларую після цього. Я вважаю, що це особисте уподобання, але воно мені добре послужило, а також ввімкнуло в себе більш легко реагувати на дизайн .

Що стосується використання блоків ремонту, я думаю, що добре знайти баланс між прогресивністю у вашому коді, але також запропонувати підтримку для старих браузерів. Ознайомтесь із цим посиланням про підтримку веб-переглядача для ремінних блоків , яке повинно допомогти визначити ваше рішення.


Добре. Але чуйний дизайн так само легко робиться з px-одиницями правильно (просто напишіть ваші медіа-запити на основі px замість em)?

Однак ви можете, якщо ви хочете зменшити розмір шрифту, оскільки ширина огляду вашого веб-сайту зменшиться, ви можете змінити розмір bodyшрифту, і все зміниться з ним.
cereallarceny

Я не дуже переживаю за підтримку браузера. Я просто включаю резервний розмір px для всіх розмірів, щоб старші веб-переглядачі мали що інтерпретувати.

Потім перейдіть по прогресивному шляху за допомогою рема. Поки ви надаєте резервний запас, тоді я не бачу ніякої шкоди. Мені це здається просто зайвою роботою, але, можливо, не у вашій ситуації.
cereallarceny

0

ptподібний тим rem, що він відносно фіксований, але майже завжди незалежний від DPI, навіть коли невідповідні веб-переглядачі ставляться pxдо пристрою. remзалежить від розміру шрифту кореневого елемента, але ви можете використовувати щось на зразок Sass / Compass, щоб зробити це автоматично за допомогоюpt .

Якщо у вас це було:

html {
    font-size: 12pt;
}

то 1remзавжди було б 12pt. remі emє настільки ж незалежними від пристрою, як елементи, на які вони покладаються; деякі веб-переглядачі не поводяться згідно зі специфікацією та ставляться до нихpx буквально. Ще за старих часів Інтернету 1 бал послідовно розглядався як 1/72 дюйма - тобто 72 дюйма в дюймі.

Якщо у вас старий невідповідний веб-переглядач і у вас є:

html {
    font-size: 16px;
}

то 1remбуде залежати від пристрою. Елементи, які успадковуватимуться htmlза замовчуванням, 1emтакож залежать від пристрою. 12ptбуде надійно гарантованим незалежним від пристрою еквівалентом:, 16px / 96px * 72pt = 12ptде96px = 72pt = 1in .

Зробити математику може бути досить складно, якщо ви хочете дотримуватися конкретних одиниць. Наприклад .75em of html = .75rem = 9pt, і .66em of .75em of html = .5rem = 6pt. Гарне правило:

  • Використовуйте ptдля абсолютних розмірів. Якщо вам дійсно потрібно, щоб це було динамічним щодо кореневого елемента, ви запитуєте занадто багато CSS; вам потрібна мова, яка компілюється в CSS, як Sass / SCSS.
  • Використовуйте emдля відносних розмірів. Це досить зручно, щоб можна було сказати: "Я хочу, щоб поле зліва було приблизно максимальної ширини літери", або "Зробіть текст цього елемента трохи більшим, ніж його оточення". <h1>є хорошим елементом, на якому слід використовувати розмір шрифту в ems, оскільки він може з’являтися в різних місцях, але завжди повинен бути більшим, ніж текст поблизу. Таким чином, вам не потрібно мати окремий розмір шрифту для кожного класу, який застосовується h1: розмір шрифту адаптується автоматично.
  • Використовуйте pxдля дуже маленьких розмірів. При дуже малих розмірах ptможе бути розмитим у деяких браузерах на 96 DPI, оскільки ptі pxне дуже вибудовується. Якщо ви просто хочете створити тонку рамку з одним пікселем, скажіть так. Якщо у вас дисплей з високим рівнем DPI, це не стане очевидним для вас під час тестування, тому обов'язково протестуйте на загальному 96-DPI-дисплеї в якийсь момент.
  • Не торкайтеся субпікселів, щоб зробити вигадливі речі на дисплеях з високою роздільною здатністю. Деякі веб-переглядачі можуть підтримувати його, особливо на дисплеях з високою роздільною здатністю, але це не-ні. Більшість користувачів віддають перевагу великим і зрозумілим, хоча Інтернет навчила нас розробників інакше. Якщо ви хочете додати розширену інформацію для своїх користувачів із сучасними екранами, ви можете використовувати векторну графіку (читати: SVG), якою ви все одно повинні займатися.

1
pt призначений для друкованих ЗМІ і ніколи не повинен використовуватися для екранів
sf

@sf CSS визначає pt та px таким чином, що вони завжди однакові співвідношенням, не дивлячись на те, що технічно точне використання цих термінів (72pt = 96px = 1in). Насправді в CSS px насправді не є одним пікселем пристрою. На моєму екрані 1px - це 2 пікселі пристрою. Перевага використання pt над px полягає в тому, що ви можете легко вказати розміри елементів відносно розмірів, що стосуються тексту.
Zenexer

-2

Половина (але лише половина) химерної відповіді (інша половина - гірка зневага до реальності бюрократії):

Використовуйте vh

Все завжди залежить від вікна браузера.

Завжди дозволяйте прокручувати вниз, ніколи в сторону.

Встановіть ширину корпусу як статичну 50 Вт, і нічого не плаває і не виривається з батьківського діва. І стиль використовуйте лише таблиці, щоб все було жорстко на місце, як очікувалося. Включіть функцію javascript, щоб скасувати будь-яку ctrl +/- діяльність, яку може виконувати користувач.

Усі вас будуть ненавидіти, крім людей, які говорять вам, щоб вони відповідали їх макету, і вони будуть в захваті. І всі знають, що їх думка є єдиною, яка має значення.


-3

Так. Або, вірніше, ні.

Е, я маю на увазі, це не має значення. Використовуйте той, який має сенс для вашого конкретного проекту. PX та EM або обидва однаково дійсні, але будуть поводитись трохи інакше, залежно від загальної архітектури CSS вашої сторінки.

ОНОВЛЕННЯ:

Для уточнення я констатую, що зазвичай це не має значення, яким ви користуєтесь. Часом ви можете спеціально вибрати одне за іншим. ЕМ приємно, якщо ви можете почати з нуля і хочете використовувати базовий розмір шрифту і зробити все відносно цього.

PX часто потрібні, коли ви переоблаштовуєте редизайн на існуючу базу коду і вам потрібна специфіка px, щоб запобігти поганим проблемам вкладання.


Отже, ваша відповідь - це не має значення? Або є певні ситуації, в яких ви б цінували одне над іншим? І якщо так, то в яких ситуаціях це було б так?

@ Самуель, так, можливо, ви можете скористатися тим чи іншим. Я оновив свою відповідь додатковою інформацією.
DA.

Вибачте, я трохи заплутався в оригінальному формулюванні. Думаю, у вас був REM у назві та EM у тілі. Здається, ви спеціально запитуєте про REM. Відповідь все-таки однакова, але REM має деякі додаткові переваги, але в основному використовується такий же, як і EM - він дозволяє використовувати "базовий" розмір шрифту.
DA.

Чому " em's [...] приємно, якщо ви можете почати з нуля і хочете використовувати базовий розмір шрифту і зробити все відносно цього ".? Яка перевага (r) em над px? Це так, що користувачі IE можуть змінити розмір тексту, чи є інші переваги перед px (що здається більш простим)?

EM і REM мають однакові переваги: ​​ви можете встановити HTML або BODY на певний розмір шрифту (скажімо, 10 пікселів), а потім встановити все інше як EM або REM. Таким чином, якщо ви хочете зробити весь тип пропорційно більшим, ви просто зміните цей початковий 10px стиль на 11px. Це було набагато корисніше 5 років тому, коли ми всі створювали власні віджети, що змінюють розмір шрифту на основі JS. У наші дні браузери роблять таку кращу роботу в масштабуванні (особливо мобільному), що я вважаю це набагато меншою користю. Якщо ви вважаєте, що PX простіший, то це для вас вигода і, безумовно, поважна причина роботи з PX.
DA.

-4

em - це шлях вперед, не тільки для шрифтів, але ви можете використовувати їх і з полями, товщиною рядків та іншими елементами, чому?

Простіше кажучи, Em - це єдині, які масштабують унісон із клавішами alt + та alt у браузері для збільшення масштабу.

Інші вимірювальні шкали, але не такі чисто, як ем.

З іншого боку, якщо ви хочете найкращого масштабування, також перетворіть свою графіку у векторний SVG, де це можливо, оскільки вони також будуть чітко масштабуватись із співвідношенням масштабування браузерів.


3
Але більшість браузерів сьогодні масштабує всі елементи сторінки однаково (якщо ви не регулюєте базовий розмір шрифту), так що перевага використання (r) em не відповідає дійсності сучасним браузерам?

Це є і це не так, хоча ви правильні в тому, що ви говорите, це більше про коефіцієнт масштабування, а не на дельту масштабування. Дельта завжди буде рівномірною незалежно від використовуваного вимірювання, але масштабний коефіцієнт (за умови, що математика виконана правильно) буде коригуватись у міру необхідності, наприклад, широкоекранний монітор проти стандартного монітора, або прямокутний піксель проти квадратних пікселів. Оскільки реальні фактично базуються на справжньому вимірюванні принтерів, то масштабування завжди буде приємнішим, інші (наприклад,%) часто в кращому випадку - дельта зміщення
шовті

(продовження) з множенням, застосованим в обох напрямках, і в результаті може в деяких випадках дати сильно непропорційний коефіцієнт перегляду.
shawty

2
"Просто кажучи, Em - це єдині, які масштабують унісон із клавішами alt + та alt у браузері для збільшення масштабу." = це неправильно.
DA.

Гаразд, я міг би сказати це краще, дивіться мій попередній коментар щодо виправлення.
shawty

-5

ІМС - ТІЛЬКИ, що масштабує для медіа-запитів, які обробляють +/- масштабування, що весь час роблять люди, а не лише сліпі люди. Ось ще одна дуже добре написана професійна демонстрація того, чому це має значення.

До речі, саме тому Zurb Foundation використовує ems , тоді як нижчий Bootstrap 3 все ще використовує пікселі.


2
Це не зовсім правильно. У старі часи пікселі не можна було збільшити в старих версіях IE. +/- тепер робить повний перегляд сторінки в усіх поточних браузерах, тому це не проблема. Крім того, це питання стосується реймів, а не px - не em vs px.
Річ Бредшоу

1
Ви, хлопці, змушуєте мене сміятися. Ви навіть намагалися масштабувати свій сайт, використовуючи +/- за допомогою пікселів? Запис про збільшення пікселів масштабується неправильно неправильно. Вниз проголосуй за мене все, що ти хочеш. Голоси не змінюють реальність.
robmuh

1
Можливо, ми приймаємо дещо інші речі - будь-який шанс ви можете створити просту демонстрацію, щоб продемонструвати різницю?
Річ Бредшоу

Я не думаю, що питання полягає в тому, які одиниці використовувати в медіа-запитах…
binki
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.