Управление шириной элементов в CSS3
Свойство CSS3 box-sizing потрясающе полезно при создании колонок с float-ами. Оно позволяет выбрать вид задания размеров: т.е. включать в размер внутренние и внешние отступы и рамки или же нет.
Это полезно, так как упрощается установка ширин в процентах, когда вам необходимо также задавать отступы и/или рамки. Распространенный пример этого - формы, которые могут стать настоящей головной болью, в случае когда вы задаете ширины в процентах.
Свойство box-sizing принимает два значения:
- content-box: нормальная CSS-модель, когда ширина и высота касается только самого элемента и не включает отступы и границы,
- border-box: модель немного глючит в Internet Explorer. Здесь размеры отступов и границ включаются в общую ширину и высоту элемента.
Пример формы
Допустим, у вас есть такой HTML код:
<div class="group"> <div class="text"> <label for="text1">First name</label> <input type="text" name="text1" id="text1"> </div> <div class="text"> <label for="text2">Last name</label> <input type="text" name="text2" id="text2"> </div> </div>
Расположим два элемента input и элемент label (впредь я буду называть их колонками) на одной строке с помощью свойства float. Это легко. Но нам еще нужно, чтобы ширина текстовых полей была гибкой и зависела от ширины элементов-родителей. Это необходимо для того, чтобы можно было помещать их в разные лэйауты, при этом особо не мучаясь с подсчетами пикселей на ширину.
Вот простенький CSS код, решающий эту задачу:
.text { width:49%; float:right; padding:1em; background:#fff; } .text:first-child {float:left;} .text input { width:100%; padding:8px; border:2px solid #cce; }
Без проблем тут не обойтись
Это довольно-таки маленькая проблема (даже две), но всё-таки проблема:
- Так как ширина относится только к самому элементу, ширины колонок будут по 49% от ширины их родителя + 2em для правого и левого внутреннего отступа (padding). Возможно, 2em - это шире, чем 1%, и в результате, колонки станут шире и не будут соответствовать друг-дружке.
- То же самое касается и ширины полей для ввода (input). width: 100% означает, что их ширина будет такой же, как у основного контента их родителей. Но дополнительно к этому значению есть еще 16 пикселей горизонтальных отступов и 4 пикселя горизонтальных границ, так что они будут на 20 пикселей шире желаемого значения.
box-sizing спешит на помощь
Вот где без box-sizing не обойтись. Он легко решит эту проблему. Просто пропишем это свойство полям ввода (input):
.text { box-sizing:border-box; width:49%; float:right; padding:1em; background:#fff; } .text:first-child {float:left;} .text input { box-sizing:border-box; width:100%; padding:8px; border:2px solid #cce; }
Теперь ширины обеих колонок и полей ввода включают ширины своих отступов и границ. В результате, получаем симпатичную, резиновую строку формы, без перекрываний и переходов на следующую строку.
Я создал простенькую страничку, демонстрирующую эту технику.
Поддержка браузерами и решение возможных проблем
Как обычно, говоря о CSS, и особенно о CSS3, возникает вопрос насчет поддержки браузерами его свойств. Так вот, box-sizing достаточно хорошо поддерживается всеми браузерами. Просмотрите эту статью,. Оказывается, он не поддерживается только в IE7. Самое смешное в том, что в IE6 все отображается корректно.
Чтобы обеспечить поддержку всеми браузерами, добавьте в код следующее:
.text { -moz-box-sizing:border-box; -webkit-box-sizing:border-box; box-sizing:border-box; }
Теперь приступим к IE7. В принципе, все зависит от того, в какой части возникла проблема, посетителей вашего сайта и вашего отношения (и/или заказчика) к использованию старых браузеров. Так что можно даже ничего не исправлять. В случае, если это форма, то ее будут видеть многие пользователи, так что нужно, чтоб она выглядела идеально.
Есть несколько опций для IE7:
- используйте поведение box-sizing
- воспользуйтесь условными комментариями или специальными фичами CSS, предназначенные специально для IE7. Поменяйте ширины полей ввода и колонок, тем самым увеличив внешние отступы.
На моей страничке есть примеры обоих способов. box-sizing работает изящно, но проблемы могут возникнуть с внутренними отступами (если они заданы не в em), а также с вложенными элементами, для которых задано свойство box-sizing:border-box. Так, в примере №3 box-sizing применяется только к колонкам, но не к полям ввода. Чтобы поля ввода не становились шире своих родителей, я задал меньшую ширину для IE7. Пример №4 показывает, как выглядит форма без применения box-sizing. Я всего лишь уменьшил ширину колонок и полей ввода, чтобы они не становились слишком широкими.
В заключение хочу предупредить о том, что несмотря на то что box-sizing поддерживается достаточно хорошо, в IE7 и ранних версиях могут возникнуть проблемы. Убедитесь в том, что в данных браузерах ваши формы отображаются не намного хуже, и если что, подправьте их с помощью CSS.
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/7hpNebcBRRo/lessons.php


Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2025-03-14 » SPF-запись
- 2025-03-07 » SEO на маркетплейсах: как оптимизировать карточку товара для поисковой выдачи
- 2025-02-18 » Топ-10 бесплатных нейросетей для генерации изображений: лучшие ии генераторы 2024 года
- 2025-02-11 » Критическая уязвимость в 1С-Битрикс
- 2025-02-11 » Google Search Console: руководство для начинающих вебмастеров
- 2025-02-11 » Методы измерения результативности рекламных кампаний: плюсы и минусы
- 2025-02-11 » Тренды SEO в 2025 году
- 2025-02-10 » Свой Google в локалке. Ищем иголку в стоге сена
- 2025-01-29 » SEO — это комплексная работа. Шесть главных факторов ранжирования сайтов
- 2025-01-29 » Гайд для главной страницы e-commerce сайта: как оформить, чтобы повысить конверсию
- 2025-01-20 » Krea AI выпустила бесплатную функцию преобразования изображений в 3D-объекты — их можно вращать и вписывать в фотографии
- 2025-01-19 » Отзывы на Яндекс Картах: как пройти модерацию
- 2025-01-15 » Топ-6 лучших российских нейросетей, в которых можно генерировать тексты и изображения бесплатно и без VPN
- 2025-01-14 » 15 бесплатных способов узнать, чем интересуется ваша аудитория
- 2025-01-11 » Бездепозитные бонусы в казино за регистрацию с выводом: особенности и возможности получения
- 2025-01-09 » Новая модель LAM способна выполнять задачи в Word
- 2024-12-26 » Универсальный промпт для нейросети: как выжать максимум из ChatGPT, YandexGPT, Gemini, Claude в 2025
- 2024-11-26 » Капитан грузового судна, или Как начать использовать Docker в своих проектах
- 2024-11-26 » Обеспечение безопасности ваших веб-приложений с помощью PHP OOP и PDO
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-15 » Перенос сайта на WordPress с одного домена на другой
- 2024-11-08 » OSPanel 6: быстрый старт
- 2024-11-08 » Как установить PhpMyAdmin в Open Server Panel
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
Ничто так сильно не разрушает человека, как продолжительное бездействие. |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.
Или напишите нам в WhatsApp
Или напишите нам в WhatsApp