Метою даної статті не буде подача читачеві 100% вичерпних фактів, правил, визначень, причин появи і способів усунення багів, пов'язаних з властивістю hasLayout, так як така інформація вже давно існує, і посилання на неї наведені в кінці поста.
Навпаки, в даній статті ми розглянемо властивість hasLayout з практичного боку, подивимося на нього виряченими очима приголомшеного кодера після того як, зверстати сайт на основі плаваючої (float) моделі для gecko та інших нормальних браузерів, він відкрив його в IE6)).
Отже, почати варто з того, що властивість hasLayout - рідне властивість (прикол дрібном'який програмістів, помилка їх генетичних експериментів) браузера Internet Explorer!
Тобто, якщо ви, як повністю поважає себе кодер, вирішили, що ТАКИЙ браузер як IE не варто вашого дорогоцінного уваги і нервів, щоб під нього верстати - то можете спокійно закривати вкладку і шукати в Інтернеті статті про те, як вирівняти вміст комірок таблиці по вертикалі.
Якщо ж ви все-таки ставитеся до меншості, що з'явився, вважаю, з першою версією IE і званому «верстальник розумний» ( «html-coder erectus» або якось так в переводі з латині) - продовжимо.
Як говориться в перекладі офіційної статті про цю властивість: hasLayout - властивість «позиціонування», яке є пріоритетним властивістю IE / win і визначає, як елементи на сторінці взаємодіють між собою (розраховуються), реагують на події, промальовувалися.
Чим нам цікаво це властивість? Та тим, що завдяки його правильному застосуванню можна виправити абсолютна більшість багів браузера Internet Explorer! До того ж це часто допомагає вирішити проблеми з використанням float-моделі для IE6 (в IE7 з нею теж далеко не все гладко, але вже цілком стерпно), а хіба не про це мріє кожен кодер ?!
Властивість hasLayout присвоєно деяких елементів документа за замовчуванням:
- ,
,
, , - ,
на решті воно відсутнє і може бути встановлено за допомогою деяких прийомом.
Перелік прийомів, найбільш часто допомагають на моїй практиці (повний перелік в офф. Документації):
- встановлюємо для елементу фіксовані ширину або висоту (width / height: значення) в залежності від ситуації (width / height: 1% - часто допомагає прийом).
- все ще не допомогло? Пробуємо перше в комбінації з overflow: hidden. Дана комбінація може виправити ситуацію тільки для IE7, так як тільки в цій версії движка IE властивість overflow стало встановлювати на елемент hasLayout. Допомагає не менше часто.
- пробуємо властивість zoom: 1! important. Взагалі властивість zoom (масштаб) створено для браузерів для того, щоб, відповідно, масштабувати елементи, а не встановлювати hasLayout. Але оскільки в століття браузерів, які самі все що завгодно масштабують, а величини поступово переходять на запис в px замість em, це властивість не знайшло практичного застосування, то використовують його для IE фікса.
Примітка: часто буває, що IE неправильно отрісовиваєт елементи через їх великий вкладеності. Попросту кажучи, на певному етапі можуть губитися правильні розміри для одного з вкладених елементів і тоді, природно, все йде шкереберть. У таких випадках потрібно експериментально визначити, на якому саме етапі відбувається неправильний розрахунок елементів і саме елементу-винуватцю привласнити zoom: 1! Important. що, до речі, еквівалентно записи zoom: 100%! important
- min / max-height / width: значення - спрацює, природно, тільки для IE7, але це вже як мінімум півбіди
- position: fixed, position: absolute. В IE існує один потішне баг, який я як-небудь опишу в одному з постів і який мені вдалося виправити завдяки саме використання абсолютного позиціонування. Правда тут прийдеться ще попотіти, думаючи, на що повісити релатів, але в будь-якому випадку ситуація розв'язана.
Вважається, що елементу властива hasLayout, якщо його параметр, який можна перевірити за допомогою виразу: document.getElementById ( 'element_id "). HasLayout =' true '. І навпаки, якщо цей параметр дорівнює' false '.
Скинути властивість hasLayout без праці можна, якщо зазначеним вище css властивостями призначити їх дефолтовая (за замовчуванням) значення: position: static, width / height: auto наприклад.
Найкращим, але, на жаль, не найбільш правдивим інструментом в боротьбі з лама версткою в браузері IE є IE Developer Toolbar. качаємо який з офф. сайту.
А тепер, як я і обіцяв, трохи практики. Припустимо, ви верстали сторінку, яка відмінно показується в FF, Opera, Safari, Chrome, але IE не піддається тому, щоб повторити все за побратимами. У такому випадку, якщо ви абсолютно впевнені, що проблема не в банальному незакритих тезі і неправильному завданні значень, на що перші 4 браузера іноді можуть закрити очі, то спробуємо поекспериментувати з hasLayout.
Примітка: якщо щось не так уже в IE7, то не раджу відкладати на потім перевірку цього ж «приколу» і в IE6, так як обидва браузера в великому (але не у всіх!) Кількості випадком повторюють одні й ті ж помилки.
Далі, переконавшись, що стрілочка активна, вибираємо за допомогою неї цікавий для нас елемент і в поле для введення значень можемо прописати цьому елементу будь-який нас цікавить властивість або ж змінити значення вже існуючих властивостей. Проходимо по пунктам зі списку способів установки hasLayout в 'true'. експериментуємо, вообщем. І, якщо на цьому етапі ви все зробили правильно і помилка була саме в неправильному «позиціонуванні» в IE, то буде вам щастя!
У проги взагалі є чимало можливостей, з якими рекомедую вам розібратися самим.
І на закінчення посилання, які допомогли мені при написанні даного матеріалу і за якими ви зможете знайти більш детальну (що не означає більш доступну) інформацію про властивості hasLayout:
- nikolas_ sharp. @ Василь, все вірно. За 4 роки, думаю, у всіх, хто хотів, рожеві окуляри спали. Задумка нетямущим (каюсь, са.
- Василь. Вас просто як лохів підсадять а потім скажуть а давай зробимо межа по більше і більше і вийде віртуальний долар. І тепер їх навіть друкувати не на.
- Василь. Фігня цей біткоіни у нього немає ціни в майбутньому. Принаймні що він представляє? Так то ж що і долар, нічого. Цей біткоіни просто конвертація еле.
- nikolas_ sharp. Оновив пост відкликанням про крісельце через 6 років.
- Михайло. Згоден, що все що не робиться в інеті: чи то блог, пізнавальний ресурс, новинний. в 99% зводиться до монетизації. Якщо створюється сайт заради інт.
Схожі статті