Можно ли вернуть строительные блоки

css позиционирование блоков и элементов

Можно ли вернуть строительные блоки</span>» width=»300″ height=»201″ class=»alignleft size-medium» /></p><p> 7 декабря 2016</p><p><strong>Цель урока:</strong> Знакомство с понятием позиционирования блоков и элементов в CSS. Фиксированное, относительное и абсолютное позиционирование.</p><p></p><h3>Позиционирование блоков</h3><p>Элемент в html — это прямоугольник; <strong>схемы позиционирования определяют где должен располагаться этот прямоугольник</strong>, а также как он должен влиять на элементы вокруг себя.</p><p>Рассмотрим <strong>два элемента, служащих для стилизации</strong>:</p><ol><li>Тег div — это <strong>блочный элемент</strong>, который может содержащать другие блоки, такие как, например, изображения и таблицы.</li><p><strong>Пример:</strong></p><table><tr><td>блок текста</td></tr></table><p>блок текста</p><li>Тег span — <strong>строчный элемент</strong>, содержащий любой текст; элемент можно вставить прямо в строку (встраиваемый элемент). Может заменить собой элементы: FONT, I, B, U и т.п.</li></ol><p><strong>Пример:</strong></p><table><tr><td>Текст продолжение текста</td></tr></table><p>Текст продолжение текста</p><h3>Статическое позиционирование</h3><p>position: static</p><p><strong>Статическое позиционирование</strong> — это позиционирование элемента по умолчанию. Такой элемент занимает на веб-странице место соответственно своему положению в html-коде, т.е. определенное в нормальном потоке.</p><p><strong>Нормальный поток элементов</strong> — это отображение элементов соответственно их месту в коде</p><p>На статически позиционированный элемент не действуют свойства top, bottom, left и right.</p><p><strong>Пример:</strong></p><p>div{ position: static; }</p><h3>Фиксированное позиционирование CSS</h3><p>position: fixed</p><ul><li>Фиксированно позиционированный элемент <strong>удаляется из потока HTML</strong> и позиционируется относительно окна браузера. Элемент как будто «плавает» над другими тегами страницы.</li><li>Он остается на месте при прокрутке страницы.</li><li>При фиксированном позиционировании <strong>необходимо задать координаты расположения элемента</strong>.</li></ul><p><strong>Установка координат:</strong></p><ul><li>top | bottom</li><li>left | right</li></ul><p><strong>Значения:</strong><br />auto | величина | %</p><p><strong>Пример:</strong></p><table><tr><td>…</td></tr></table><p>…</p><p>Я на уроке в первый раз.<br /> Теперь я ученица.<br /> Вошла учительница в класс,-<br /> Вставать или садиться?</p><p> Блок без стиля</p><p><strong>Результат:</strong></p><h3>Относительное позиционирование CSS</h3><p>position: relative</p><ul><li>Относительное позиционирование <strong>располагает элемент относительно его нормального положения</strong>.</li><li>При относительном позиционировании обязательна <strong>установка координат</strong> расположения элемента относительно его нормального положения.</li></ul><p><strong>Установка координат:</strong></p><ul><li>top | bottom</li><li>left | right</li></ul><p><strong>Значения:</strong><br />auto | величина | %</p><p><strong>Пример:</strong></p><table><tr><td>Я на уроке в первый раз.Теперь я ученица.Вошла учительница в класс,-Вставать или садиться?Относительно позиционированный блок</td></tr></table><p>Я на уроке в первый раз.<br /> Теперь я ученица.<br /> Вошла учительница в класс,-<br /> Вставать или садиться?</p><p> Относительно позиционированный блок</p><p><strong>Результат:</strong></p><p>Я на уроке в первый раз.Теперь я ученица.Вошла учительница в класс,-</p><p>Вставать или садиться?</p><p>Относительно позиционированный блок</p><h3>Абсолютное позиционирование CSS</h3><p>position: absolute</p><ul><li>Абсолютная позиция отсчитывается от ближайшего к элементу родительского контейнера, который имеет позиционирование absolute, relative или fixed (кроме static). Если такой родительский элемент отсутствует, то им считается окно браузера.</li><li>При абсолютном позиционировании обязательна <strong>установка координат</strong> расположения элемента относительно его родителя (см. пред. пункт).</li></ul><p><strong>Установка координат:</strong></p><ul><li>top | bottom</li><li>left | right</li></ul><p><strong>Значения:</strong><br />auto | величина | %</p><p><strong>Пример:</strong></p><table><tr><td>h1 { position:absolute; top: 100px; left: 200px}</td></tr></table><p>h1 { position:absolute; top: 100px; left: 200px }</p><p><strong>Результат:</strong></p><p><strong>Пример взаимодействия с родительским блоком:</strong></p><ol><table><tr><td>123456</td><td> блок 1 блок 2</td></tr></table><p>блок 1 блок 2</p><p><strong>Результат:</strong></p><table><tr><td>123456</td><td> блок 1 блок 2</td></tr></table><p>блок 1 блок 2</p><p><strong>Результат:</strong></p></ol><h3>Перекрытие слоев в CSS</h3><p>z-index</p><p>Блоки с абсолютным позиционированием могут быть расположены на разных уровнях, которые определяются свойством z-index.</p><p><strong>Значения:</strong></p><ul><li>auto «нулевой уровень», задаваемый по умолчанию;</li><li><strong>отрицательное число</strong> — объект располагается «ниже» нулевого уровня (удаляется вглубь, под элементы);</li><li><strong>положительное число</strong> — объект располагается «выше» нулевого уровня.</li></ul><p><strong>Пример:</strong></p><table><tr><td>…</td></tr></table><p>…</p><p>Параграф нормального потока</p><p><strong>Результат:</strong></p><p><strong>Задание:</strong> Скачайте файл.<br />Добейтесь эффекта, как на итоговом изображении, используя файл logo.png в качестве тега img.</p><p>Используйте следующие свойства CSS:</p><ul><li>position:</li><li>z-index:</li><li>top:</li><li>left:</li><li>opacity:0.5; /* прозрачность */</li><li>filter: Alpha(Opacity=50); /* прозрачность для IE */</li></ul><p><strong>Требуемый результат:</strong></p><p>Источник: <code>https://labs-org.ru/css-12/</code></p><h2>Возврат стройматериалов продавцу</h2><p><img alt=Что относится к стройматериалам?

Согласно общепринятой классификации строительными материалами являются: древесина, цемент, металлы, песок, камень, штукатурка, бетон и многие другие. Все стройматериалы подразделяются на:

  • конструкционные;
  • теплоизоляционные;
  • гидроизоляционные;
  • акустические;
  • кровельные;
  • отделочные;
  • герметизирующие;
  • специального назначения.

Нормативная база

Возврат и обмен строительных материалов регламентирует статья 25 Закона Российской Федерации «О защите прав потребителей», а также статья 502 Гражданского кодекса РФ. Следуя их положениям, потребитель может обменять товар ненадлежащего качества на аналогичный, а также сдать его обратно и вернуть деньги в полном объеме.

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

В тексте постановления Правительства РФ №55 от 19.01.1998г. прописаны ограничения данного потребительского права. В нем приводится перечень товаров, которые не подлежат ни обмену, ни возврату. Помимо прочих, в него включены отделочные и строительные материалы, которые продаются метражом.

Исходя из этого, при покупке линолеума, ковролина, кабеля, шнуров, виниловой пленки и иных строительных товаров, которые отрезают при продаже, необходимо быть очень внимательными и заранее обдумать все вопросы, связанные с цветом, размерами и другое.

Можно ли вернуть строительные материалы?

Покупая строительные материалы, вы вступаете в рыночные отношения с их продавцом.

Правительство нашей страны гарантирует соблюдение прав потребителя посредством исполнения норм соответствующего законодательного акта.

Поэтому любые стройматериалы можно вернуть обратно в магазин в течение 14 календарных дней в случае, если они не входят в список товаров, не подлежащих возврату и обмену.

Но даже стройматериалы, входящие в перечень товаров не подлежащих возврату и обмену, должны быть качественными, иначе их также можно вернуть продавцу и получить деньги назад.

Когда нельзя вернуть стройматериалы?

Строительные материалы нельзя вернуть в магазин, если они одновременно удовлетворяют двум условиям:

  • находятся в перечне товаров, не подлежащих возврату и обмену, так как отпускаются на метраж;
  • являются качественными и не содержат дефектов, с которыми были приобретены потребителем.

Кроме того, закон запрещает возврат:

  • бытовой химии и средств, содержащих пестициды (скажем, антигрибковых препаратов);
  • шнуров, кабелей, проводов проданных по метражу;
  • напольных покрытий, отпускаемых отрезным способом;
  • сухих смесей в открытых упаковках;
  • штукатурки и клея, которые продавались на разлив или в россыпь.

Но и эти стройматериалы по законодательству можно вернуть в том случае, если покупателю удастся доказать, что он не был в достаточной мере информирован о товаре.

Например, когда при покупке обоев он не обнаружил на ценнике указание на то, что они имеют виниловую основу и не смог правильно подобрать клей впоследствии.

В такой ситуации необходимо сослаться на статью 18 Закона «О защите прав потребителей».

Сроки на возврат

По закону потребитель имеет право вернуть строительные материалы в течении четырнадцати дней. Этот срок относится как к некачественной, так и к качественной, но не подошедшей по каким-либо причинам продукции. 

Пошаговая инструкция возврата

Для того чтобы вернуть строительные материалы в магазин, нужно совершить ряд последовательных действий.

  1. Проверьте – не повреждена ли упаковка товара, и не входит ли его наименование в перечень продукции, запрещенной к возврату и обмену. Если ни то, ни другое к конкретной ситуации не относится, можно перейти к следующему шагу.
  2. Обратитесь в магазин и сообщите о своем желании совершить возврат стройматериалов. В большинстве случаев проблем не возникает, и вернуть строительные материалы удается на месте, в присутствии менеджера или администратора.
  3. Вам отказали в возврате? В таком случае следует составить официальную претензию в письменной форме и направить её руководителю магазина строительных материалов. Начинается претензионный этап решения конфликта. Адресант обязан ответить на поступившую претензию в течение десяти дней. Если ответа не последует, покупатель вправе подать иск в судебные органы.

Претензия

В тексте претензии на возврат строительных материалов необходимо указать:

  • наименование и адрес торговой точки;
  • личные и контактные данные потребителя;
  • дату приобретения товара;
  • наименование товара;
  • стоимость покупки;
  • дату обнаружения недостатков или несоответствия;
  • описание причин возврата товара;
  • ссылки на законодательные акты, разрешающие возврат в данном случае.

К претензии нужно приложить чеки, квитанции и иные документы, подтверждающие факт покупки. Если документы передаются руководителю организации непосредственно на руки, стоит взять у него расписку, свидетельствующую о том, что он их получил. Ответственное лицо отказывается её подписывать? В таком случае лучше направить претензию заказным письмом и зарегистрировать факт его отправки на почте.

Скачать образец претензии на возврат строительных материалов можно здесь.

Возврат строительных материалов в интернет-магазин

Условия возврата строительных материалов в онлайн-магазин немного другие. Они регулируются статьей 26.1 «О дистанционном способе продажи товаров» Закона Российской Федерации «О защите прав потребителей».

Согласно её положениям, покупатель вправе отказаться от приобретения товара в течение семи дней после его получения (если продавец не указал определенных условий возврата, покупатель имеет право на отказ от стройматериалов на протяжении трех месяцев).

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

При этом продавец возвращает покупателю деньги за товар, но удержит средства, которые пошли на оплату доставки. Совершить возврат средств интернет-магазин должен в течение десяти дней после поступления соответствующего требования.

Это обязательство закреплено в статье 21 «Правил продажи товаров дистанционным способом».

Если речь идет о приобретении в интернет-магазине строительных материалов с дефектами, покупатель вправе:

  • совершить замену стройматериалов на другие;
  • потребовать возврат части уплаченных средств в счет покрытия ущерба;
  • потребовать продавца устранить недостатки товара;
  • вернуть полную сумму, уплаченную за строительные материалы, тем самым отказавшись от договора поставки.

Стоит знать о том, что отсутствие чека в покупке в интернет-магазине строительных материалов не является законным основанием для отказа в возврате средств или обмене товара. Деньги возвращаются тем же способом, которым они были получены – на карту, электронный кошелек, курьерской службой и др.

Действия в случае отказа в возврате или обмене

В случае игнорирования претензии потребителя на возврат строительных материалов и отказа в возврате средств, покупатель имеет полное право подать судебный иск в соответствующую инстанцию.

Иногда для определения правоты придется провести специальную экспертизу стройматериалов.

На её основе делается заключение, которое впоследствии используется в качестве доказательства в ходе судебного разбирательства.

К документам следует приложить дубликат официальной претензии, чеки и квитанции, а также свидетельства о понесенном ущербе, если таковой имеет место быть.

Нюансы возврата стройматериалов

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

Например, по нормам закона «О защите прав потребителей» возврат обоев в неповрежденной упаковке вполне допускается. Но здесь есть одна особенность. При возврате нужно вернуть весь товар, а не часть покупки. Поэтому если вы купили 10 рулонов обоев, неправильно рассчитали метраж помещения, и после ремонта у вас осталось 2 лишних рулона, вернуть их обратно вы не сможете.

Как лучше обезопасить себя от напрасных трат в подобных ситуациях? В случае, если у вас есть предположения о том, что 1-2 рулона обоев могут оказаться ненужными, попросите продавца пробить их отдельным чеком. Тогда вы без проблем сможете вернуть их в магазин в течение 14 дней после покупки и получить за них деньги обратно.

Данное требование не касается ситуаций, когда, например, один из пяти купленных рулонов оказался бракованным. В таком случае вам обязаны вернуть за него деньги, как бы он ни был пробит.

Многие сетевые магазины, привлекая клиентов, способны установить собственные правила возврата, если они направлены в сторону выгоды потребителя. Так, некоторые из них предлагают забрать обратно по отпускной цене те строительные материалы, которые останутся у покупателя после завершения ремонта не распакованными.

Источник: https://potrebitel-expert.ru/vozvrat-i-obmen/stroitelnye-materialy/

Как выровнять элемент по вертикали внутри блочного элемента

Можно ли вернуть строительные блоки</span>» width=»300″ height=»184″ class=»alignleft size-medium» /></p><p>Постановка задачи: необходимо задать вертикальное выравнивание для inline или inline-block элементов внутри блочного элемента.</p><p>Подходы к решению задачи. Существуют различные способы, рассмотрим основные из них:</p><p>1.	Представить блочный элемент как ячейку таблицы (display: table-cell). 2.	IE6-7: метод expression.</p><p>3.	Приравнивание межстрочного интервала (свойство line-height) и высоты блока (для однострочных элементов).</p><p> 4.	Позиционирование при помощи внешнего блока (position:absolute).</p><p>Ну а подведя итоги, рассмотрим еще один метод:</p><p>5.	Выравнивание с помощью свойства vertical-align.</p><h3>display: table-cell</h3><p>Для вертикального выравнивания применяется свойство display: table-cell родительскому блоку, которое заставляет элемент эмулировать ячейку таблицы. Ему же задается высота и vertical-align: middle:</p><p> Вертикально выравненная строка</p><p>Плюсы:</p><ul><li>Простота;</li><li>Выравнивает как одну, так и несколько строк.</li></ul><p>Минусы:</p><ul><li>Не работает в IE7 и ниже;</li><li>Без дополнительных конструкций сложно манипулировать горизонтальным положением внешнего блока;</li><li>Не всем нравится сам факт использования display: table-cell.</li></ul><h3>IE6-7: метод expression</h3><p>Т.к. предыдущий способ не работает в IE6-7, то надо исправить эту неприятность.</p><p>Expression — короткие куски JS кода, которые помещаются в файл стилей, выполняются один раз и работают только в IE. Expression невалидны. Добавляем к предыдущему примеру в файлы стилей для IE6 и 7 такой кусок кода:</p><p> .wrapper p { z-index: expression( runtimeStyle.zIndex = 1, this == ((200/2)-parseInt(offsetHeight)/2) < 0 ? style.marginTop=»0″ : style.marginTop=(200/2)-(parseInt(offsetHeight)/2) +'px' ); }</p><p>Рассматривать достоинства и недостатки смысла тут нет, т.к. достоинств нет, кроме того, что этот способ дополняет первый в IE6-7, но т.к. эти браузеры уже устарели, на них можно закрыть глаза.</p><h3>line-height</h3><p>Для выравнивания одной строки текста можно использовать одинаковые значения высоты и межстрочного интервала для блока-родителя. Подходит для кнопок, пунктов меню и т.д.</p><p> Вертикально выравненная строка</p><p>Плюсы:</p><ul><li>Простота;</li><li>Кроссбраузерность.</li></ul><p>Минусы:</p><ul><li>Подходит только для однострочных элементов;</li><li>Позволяет выравнивать только по центру.</li></ul><h3>position и отрицательный margin вверх</h3><p>Элемент можно выровнять по вертикали, задав ему фиксированную высоту и применив position: absolute и отрицательный margin-top, равный половине высоты выравниваемого элемента. Родительскому блоку должен быть присвоен position: relative:</p><p>Я выровнен по вертикали</p><p>Плюсы:</p><ul><li>Кроссбраузерность;</li><li>Выравнивать элементы можно как по центру, так и в любом другом положении.</li></ul><p>Минусы:</p><ul><li>Трудоемко при большом количестве элементов;</li><li>Сложно управлять;</li><li>Необходимо знать и фиксировать высоту элемента;</li><li>В некоторых браузерах абсолютное позиционирование может вызвать снижение производительности.</li></ul><h3>Итог по популярным методам</h3><p>Как видно, данные методы не являются универсальными – каждый из них имеет пусть и небольшие, но недостатки. Наиболее универсальным оказывается метод display: table-cell, но он мне никогда не нравился, к тому же мы очень долго не отказывались от поддержки IE6-7. Поэтому появилась необходимость поработать над чем-то более универсальным. Рассмотрим Выравнивание при помощи vertical-align.</p><h3>Выравнивание при помощи vertical-align</h3><p>Как известно, свойство vertical-align не работает для блочных элементов, поэтому применять это свойства для них бесполезно. Однако, данное свойство прекрасно работает для inline и inline-block элементов. Если мы попробуем применить данное свойство для элементов внутри блочного элемента, то мы получим следующую картину:</p><p> Элемент 1 Элемент 2 Элемент 3 Элемент 4 Элемент 5</p><p>Как видно, элементы выравниваются относительно строки, а не всего блока, что нам не подходит. Попробуем тогда внутрь блока добавить элемент (т.к. для inline элемента высоту задать нельзя, то элемент должен быть inline-block) с высотой равной высоте внешнего блока. Добавляем (на картинке ниже показан серой линией) и получаем:</p><p> Элемент 1 Элемент 2 Элемент 3 Элемент 4 Элемент 5</p><p>Зададим для всех элементов vertical-align:middle.</p><p>Что ж, одну строку мы таким образом отцентрировали. А что, если надо несколько строк? И тут проблем нет. Надо лишь для текстовых элементов задать display:inline-block:</p><p> Элемент 1 Элемент с двумя <br /> строками текста Элемент 3 Элемент 4 Элемент <br /> с тремя <br /> строками текста</p><blockquote class=

Если нам не важна совместимость со старыми версиями IE, то элемент мы можем удалить, а его стили заменить на:

.wrapper:after { content:»»; display:inline-block; height:100%; width:0px; overflow:hidden; vertical-align:middle; }

Стоит отметить несколько моментов:

  • К элементам, которые выравниваются, нельзя применять свойство float.
  • Между соседними inline-block элементами всегда есть расстояние, поэтому если их надо прижать друг к другу, то для внешнего блока надо задать font-size:0px; а у самих элементов восстановить, задав нужное значение.
  • Для внутренних элементов таким образом можно задавать как одинаковые значения (top, bottom или middle), так и разные.

Плюсы:

  • Простота;
  • Кроссбраузерность;
  • Выравнивать элементы можно как по центру, так и в любом другом положении;
  • Подходит как для одной строки, так и для нескольких. Также, т.к. элемент имеет display:inline-block, он может содержать текст, графику (фон, картинка) и любой другой элемент.

Минусы:

  • Приходится добавлять дополнительный элемент;
  • При использовании псевдоэлемента :after, теряется поддержка старыми версиями IE.

← Назад в раздел

Источник: https://pixelplus.ru/studio/stat/vertikalnoe-vyravnivanie-vnutri-blochnogo-elementa/

Кроссбраузерный inline-block

Можно ли вернуть строительные блоки</span>» width=»300″ height=»172″ class=»alignleft size-medium» /><br /><i>Разрешите представить вам перевод статьи «Cross-Browser Inline-Block», написанной Райном Доэрти холодным февралем 2009 года. В статье рассказывается о верстке элементов списка с установкой для свойства <b>display</b> значения <b>inline-block</b>.</p><p> Статья об этом, а также о трудностях, возникающих в процессе достижения результата и о методах их «лечения».</i></p><p><b>Inline-block</b>, заманчивое значение для свойства <b>display</b>, которое обещает очень много, а выполняет совсем мало.</p><p> Очень часто я получал PSD-файлы, подобные этому:</p><p> и плакал.</p><p>Обычно такой способ отображения не вызывает проблем. Фиксированная ширина, фиксированная высота, <b>float: left</b> и готово. Если бы не одно, но! Дизайн должен отображаться корректно при любом количестве содержимого. В нашем случае, если в одном из блоков окажется чуть больше данных, то он «сломает» всю сетку.</p><p> Так как первый элемент выше следующих, пятый становится не под ним, как нам того хотелось бы, а «обтекает» по правому краю. В общем, нам необходима эластичность таблицы, но в правильной, семантичной верстке.</p><p>Начнем с простого примера, где у пунктов списка для свойства <b>display</b> установлено значение <b>inline-block</b>:</p><ul><li><h3>This is awesome</h3></li><p>…</p><ul> Результат выглядит корректно в Firefox 3, Safari 3 и в Opera: Кажется, будто что-то не так с вертикальным выравниванием. Говоря по правде, никаких ошибок нет, это как раз корректное поведение браузера, но совсем не тот результат, которого мы бы хотели. А происходит здесь следующее, базовая линия (baseline) каждого элемента <b><li></b> выравнивается с базовой линией родительского элемента <b><ul></b>. Вы спросите, что такое базовая линия? Лучше один раз увидеть, чем сто раз услышать:Базовая линия на рисунке выше обозначена линией, идущей через основание символов. Значением по-умолчанию для свойства <b>vertical-align</b> у <b>inline</b> и <b>inline-block</b> элементов является <b>baseline</b>. Это значит, что базовая линия элементов выравнивается с базовой линией родителя. На рисунке ниже представлен пример такого выравнивания:Как видите, каждая базовая линия блоков на рисунке выше выравнена по базовой линии текста «This is the baseline», который не является элементом <b><li></b>. Это просто текстовый узел, находящийся непосредственно в <b><ul></b>, помещенный туда в качестве индикатора расположения базовой линии элемента <b><ul></b>.Получить желаемый изначально вариант выравнивания довольно просто, достаточно для свойства <b>vertical-align</b> указать значение <b>top</b> и получить в результате отличную сетку: Вот только это не работает в Firefox 2, IE 6 и 7: Для начала займемся Firefox 2. Firefox 2 не поддерживает значение <b>inline-block</b>, зато отлично понимает специфичное для Мозиллы значение <b>-moz-inline-stack</b> для свойства <b>display</b>. Оно приводит к результатам, подобным действию <b>inline-block</b>. Когда мы добавляем его перед <b>display: inline-block</b>, то Firefox 2 игнорирует вышеуказанное, так как не понимает его, и использует <b>-moz-inline-stack</b>. Другие браузеры используют <b>inline-block</b>, игнорируя непонятное для них <b>-moz-inline-stack</b>. К сожалению, это вызывает небольшой баг: Честно, я не знаю, что является его причиной. К счастью, лечится он довольно просто обертыванием всего содержимого элемента <b><li></b> дополнительным .<li><h2>«Загадочные отступы» между инлайн-элементами</h2><p><img alt=inline-block

Значит, inline-block — представляет собой этакую «коробочку», в которой содержатся буковки, т.е. некий коробок со спичками. Этот коробок представляет из себя блок, с поведением строки, т.е. по сути является строчно-блочным элементом.

Строчное поведение inline-block позволяет ему оставаться в одной строке с другими строчными элементами, например -ом или попусту сливаться с обычными буквами, т.е. вести себя, как текст в строке.

Ну а благодаря своим блочным способностям, inline-block-у можно смело задавать любые свойства, которые присущи блочным элементам: ширину, высоту, верхний и нижний margin, например, уже будет действовать, как у блоков.
Ну и т.д., в общем, эдакий «блок-строка»

Живой пример

Как видно из примера, inline-block чувствует высоту и ширину, которую мы ему прописали.

Так же можно заметить одну интересную штуку, наш подопечный выровнялся по вертикали, выровнялся так, как и должны выравниваться большинство инлайн-элементов в html, т.е. по базовой линии (baseline) , т.е.

выравнивается наш блок относительно своего текста, который в нём находится. Добавляем текста в блок и смотрим результат.

Блок выровнялся по базовой линии. Чего и следовало ожидать.
Сразу же приведу несколько разных примеров, поведения inline-block с разным вертикальным выравниванием.

Разное выравнивание

Тут я продемонстрировал три разных выравнивания, но на самом деле их намного больше, если интересно, то вот здесь описаны все возможные варианты. В данной статье нет смысла всех их описывать. Просто учитывайте это, при работе с inline-block.

inline-block — как буква

Одна из главных вещей, которые вы должны знать, это то, что наш коробок со спичками inline-block — является по сути обычной буквой — символом, т.е. весь наш строчный блок составляет всего лишь одну букву в строке, одну единицу. Даже не смотря на то, что содержит в себе кучу других символов или элементов.

Именно по этой причине inline-block не «разрываются», как строчные элементы, а переносятся на следующую строку целиком. Ну и соответственно, если рядом с inline-block не будет пробелов, то расстояние между ним и соседними буквами будет обычный межбуквенный интервал (трекинг), которым можно управлять (кернинг).

Если есть пробелы — до соседней буквы будет этот же интервал плюс ширина пробела.

Переваривайте эту информацию и идёмте дальше…

Почему в статье я использую именно inline-block?

На самом деле «Проблема» пробелов для inline-block и обычных инлайн элементов — является общей. Т.е. и с теми и с другими происходят идентичные вещи. Ненавистные отступы, появляются у тех и у других.

Просто дело в том, что:
Во-первых, inline-block имеет больше возможностей, таких например, как задание ширины или высоты и т.д.
Во-вторых, мне всё-таки хотелось немного объяснить вам, что такое inline-block и что они из себя представляют, всё-же они относятся к строкам, как-никак.

Ну и в-третьих это то, что с inline-block связаны определённые проблемы в браузере Safari, о которых мне бы хотелось, чтобы вы знали.

Так что я думаю, что знакомство с этим поведением строчно-блочного элемента будет для вас полезным делом и, безусловно, расширит ваш кругозор.

Загадочные отступы

Познакомившись поближе со строчно-блочным элементом, мы можем смело двигаться дальше, к демонстрации и ответам на вопрос: «Откуда берутся отступы после инлайн элементов?». Для того, чтобы понять, о чём идёт речь, приведу код и скриншот с проблемой.

  • Пункт 1
  • Пункт 2
  • Пункт 3
  • Пункт 4
  • Пункт 5

ul { font: 14px Verdana,sans-serif; } ul li { display : inline-block ; width : 100px; border : 1px solid #E76D13; /* эмуляция inline-block для IE6-7*/ //display : inline; //zoom : 1; }

В итоге мы видим ту самую «неприятность», из-за которой мы все тут и собрались.

На картинке отчётливо видны пробелы между пунктами меню. Откуда же они берутся? Причина кроется в том, что, как мы уже выяснили, inline-block ведет себя, как обычная буква, а значит так же, как и простой текст — имеет пробелы между словами. Эти пробелы можно отчётливо наблюдать в разных веб-инспекторах, например таких как «IE WebDeveloper» для Internet Explorer.

Как мы видим, браузер создаёт пустой текстовый узел, который, по сути, может являться переводом строки, пробелом или, например, табом. Все и эти перечисленные вещи превращаются в один единственный пробел и описывается следующей сущностью: .

Так же следует учитывать, что, так как пробел — это обычный символ, то, соответственно, и изменяться этот самый символ будет в зависимости от размера или семейства шрифта, т.е, по сути, вести себя точно также, как и обычная буква в строке.

Всё это обязательно следует учитывать при вёрстке.

Наша задача

Перед нами стоит задача каким-то образом избавиться от этого ненавистного расстояния. Убрать, сделать его ширину нулевой, сплющить, спрятать, всё что угодно… в общем придумать какой нибудь способ, который избавит нас от этого межсловного промежутка и соединит наши пункты вплотную.

Материал для работы

Давайте поразмыслим, что же нам сможет помочь для решения этой задачи.

1. margin-left (отрицательный) — свойство, с помощью которого можно сдвинуть пункты влево, как бы друг на друга, «избавившись» так сказать от ненавистного пробела между них.
2.

font-size — свойство, задающее размер шрифта, с помощью которого нашему пробелу (символу) можно выставить размер шрифта, равный нулю, и тем самым сделать его настолько маленьким, что его попусту не будет видно.
3. letter-spacing — свойство, определяющее интервал между символами.

По умолчанию (normal) задаёт обычный интервал, исходя из размера и типа шрифта.
4. word-spacing — свойство, определяющее интервал между словами. По умолчанию так же, как и letter-spacing, задаёт его в зависимости от размера и типа шрифта.
5. Прижать элементы друг к другу, т.е.

вплотную, тег к тегу, и таким образом убрать межссловный интервал.
6. Поставить комментарии между элементами, тем самым убрав между ними отступы.
7. Самое, на мой взгляд, интересное решение из всех… оставлю его пожалуй на закуску… интрига…

Плюс ко всему сделаем тестовый элемент  Ширина = 510px, который будет нашей вспомогательной линейкой. Ширина наших пунктов в сумме составляет 510px. Это боковые границы + их ширина + кол-во самих пунктов ((1+100+1)*5) = 510.

Вроде ничего не забыли, поэтому переходим к рассмотрению всех вышеперечисленных вариантов.

Вариант 1 — margin-left

Первым у нас на очереди выступает левый отрицательный margin. Посмотрим, как он сможет помочь нам. Код CSS для наглядности:

ul { font: 14px Verdana,sans-serif; } ul li { display : inline-block; width : 100px; border : 1px solid #E76D13; margin-left: -.36em; /* эмуляция inline-block для IE6-7*/ //display : inline; //zoom : 1; /* margin-left отдельно для IE6-7 */ //margin-left: 0; }

Из кода видно, что для общего списка я выставил шрифт Verdana и размер шрифта в 14px (в наших примерах будет отталкиваться от этих значений). Ну и ,конечно же, левый отрицательный margin, равный -.36em.

Как вы могли заметить, для нашей цели я выбрал именно масштабируемую единицу длины (em), потому что, как мы уже знаем, наш пробел пляшет от размера шрифта, а значит, может масштабироваться в зависимости от него. Долго повозившись со значениями, я определил, что -.

36em) подходит для нашего шрифта лучше всего (для иного придётся подбирать другие значения), так что оставим, пожалуй, именно этот масштаб. Посмотрим на результат:

Как мы можем наблюдать из скриншота, наши пункты уехали за левую границу, что в принципе и очевидно, ведь мы же по сути подвинули все пункты влево, а значит, и первый пункт также уехал в левую сторону.

Для решения этого «недоразумения», мы можем обнулить margin-left именно у первого пункта меню, добавив в наш код следующую запись ul li:first-child { margin-left: 0;}.

*Стоит заметить, что для IE6-7 мы вообще обнулили margin-left, а почему… мы узнаем чуть позже.

А между делом смотрим результат:

Да, действительно, на данный момент во всех браузерах всё здорово и смотрится одинаково. Хм… неужели мы добились своей цели? Давайте проверим это, сделав размер шрифта, к примеру, в два раза больше.

ul { font: 28px Verdana,sans-serif; } ul li { display : inline-block; width : 100px; border : 1px solid #E76D13; margin-left: -.36em; /* эмуляция inline-block для IE6-7*/ //display : inline; //zoom : 1; /* margin-left отдельно для IE6-7 */ //margin-left: 0; } ul li:first-child { margin-left: 0;}.

Как можно видеть, мы достигли своей цели, но это до тех пор, пока мы не поменяли шрифт, например, на Arial (предварительно подогнав под него левый, отрицательный margin)

Выставив фон нашему списку, мы можем заметить, что теперь результаты немного разнятся в браузерах Chrome, Opera 11.53, IE6-8 и Firefox 8, IE 9.

В первых всё осталось на своих местах, а вот в последних можно заметить небольшой отступ справа, что говорит о том, что всё-таки есть риск получить немного не ту картину, которую мы задумывали изначально. Как вариант, конечно же, можно подогнать спец.

значения для Firefox 8 и IE 9 отдельно, но, опять же, это не очень хорошее решение, так как во-первых, это по сути костыль, а во-вторых, не даёт полной универсальности, ведь никогда не знаешь, при каких размерах и как, поведут себя остальные браузеры.

В общем, я, лично, сделал вывод, что это вполне себе нормальный и жизнеспособный вариант, в фиксированной ситуации можно подогнать размеры и будет всё в порядке.

Ряд минусов конечно же тоже есть, в виде обнуления margin-left у первого пункта + подгонка значений для разных браузеров, ну и… конечно же есть доля риска, из-за которой могут быть, хоть и не большие, но какие-то отличия с отступами, при разных шрифтах и их размерах.

Результат с margin-left

Вариант 2 — font-size

Как вы уже знаете, font-size влияет на размер шрифта элемента, делая его больше или меньше, в зависимости от своего значения.

Пробел — это символ, который исходит от этого самого размера шрифта, а значит, с помощью font-size мы можем попробовать воздействовать на него, например, выставив его значение в ноль и тем самым, возможно полностью «скрыть» наш ненавистный пробел. Давайте проверим это на деле.

ul { font: 14px Verdana, Geneva, sans-serif; /* Выставляем родителю значение в ноль */ font-size: 0; } ul li { display : inline-block; width : 100px; border : 1px solid #E76D13; /* эмуляция inline-block для IE6-7*/ //display : inline; //zoom : 1; }

Что произошло с символами? Куда они все пропали? На самом деле всё просто. font-size наследуемое свойство, а значит, выставив родителю (в нашем случае UL) какое либо значение, отличное от значения по умолчанию, мы должны возвратить font-size в прежнее состояние, у потомков (в нашем случае у LI).

ul { font: 14px Verdana, Geneva, sans-serif; /* Выставляем родителю значение в ноль */ font-size: 0; } ul li { display : inline-block; width : 100px; border : 1px solid #E76D13; /* Возвращаем в нормальное состояние у потомков */ font-size: 14px; /* эмуляция inline-block для IE6-7*/ //display : inline; //zoom : 1; }

Отлично! Теперь всё работает! Но везде ли? Проверяем… упс… к сожалению почти…

Как видно из скриншотов, Safari подвёл нас, напрочь отказавшись обнулять наш межсловный символ :(.

Почему же так произошло? Не найдя ответа на этот вопрос, я рискнул предположить, что всё-таки это ни что иное, как самый настоящий баг браузера Safari и поэтому, нам нужно, либо искать вменяемое лекарство от этого бага, либо отказываться от этого способа, полностью.

Исключать этот способ из списка не очень хочется, потому что, во-первых, этот вариант не работает лишь в Safari, а во-вторых, моя интуиция мне подсказывала, что решение всё же имеется.

В итоге спортивный интерес взял вверх и решение всё таки нашлось! Да, и при чём оно оказалось для меня приятной неожиданностью. Ответ кроется в свойстве display: table, которое вешается на контейнер с пунктами (в нашем случае UL). Проверим.

ul { font: 14px Verdana, Geneva, sans-serif; /* Выставляем родителю значение в ноль */ font-size: 0; /* Лекарство отдельно для Safari */ display: table; } ul li { display : inline-block; width : 100px; border : 1px solid #E76D13; /* Возвращаем в нормальное состояние у потомков */ font-size: 14px; /* эмуляция inline-block для IE6-7*/ //display : inline; //zoom : 1; }

А вот и скриншот из Safari:

Супер! Сработало! Но как же это так? Возможно, при display:table движок воспринимает строку блоков внутри как «что-то вроде table-cell», т.е. ячеек таблицы, в каких-то FF до 3.6, если я ничего не путаю, был похожий баг.

Чем это может нам грозить?

Есть пару мелких недостатков, о которых следовало бы знать.
1. Во всех браузерах, кроме Firefox, точкой отсчёта позиционированных элементов являются ближайший предок с relative, т.е. это может быть та же ячейка (TD).

Но у нас тут не TD, а LI, так что в этом плане проблем у нас точно не будет. Но проблемы будут, если мы захотим позиционировать сами LI, внутри UL, а так как UL у нас — это, по сути, таблица, то Firefox откажется позиционировать пункты относительно её.

Но тут не стоит беспокоиться, так как в этом случае на помощь к нам придёт обычная обёртка (например div) для элемента UL.
2. Второй нюанс — ширина.

display:table по умолчанию не растягивается на доступное пространство, так что может понадобиться еще выставление ширины контейнеру (а при наличии бордеров/паддингов — box-sizing: border-box c нужными префиксами вдобавок).

Это что касалось самого display:table, а что же сам font-size? У него есть минусы? Да, есть, пожалуй, один неприятный недостаток.

Из-за нулевого значения font-size у родителя, мы не можем применять масштабируемые единицы длины к потомкам, т.к. они отталкиваются от наследуемого размера шрифта и соответственно от нуля в нашем случае.

Ну и плюс ко всему, это то, что всегда надо быть начеку и смотреть, чтобы у потомков был переназначен размер шрифта.

Ну а так в целом способ, вполне себе рабочий, если не считать нюансы. Так что смотрим пример в действии и идём дальше.
Решение с font-size

Вариант 3 — letter-spacing

Третьим номером у нас идёт letter-spacing. Чуть ранее мы выяснили, что это свойство влияет на интервал между символами, а так как наш inline-block по сути и есть один, большой символ, то letter-spacing всё таки должен помочь в решении нашей задачи.

Как и в прошлый раз, я повозился с масштабом и выяснил, что -.36em будет как раз то, что нужно для Verdana.

* Да, и ещё стоит учесть, что letter-spacing, как и font-size, наследуемое свойство, поэтому нам придётся проделывать ту же операцию с обнулением потомков, что и во втором варианте.

ul { font: 14px Verdana, Geneva, sans-serif; /* Выставляем родителю значение -.36em */ letter-spacing : -.36em; } ul li { display : inline-block; width : 100px; border : 1px solid #E76D13; /* Возвращаем в нормальное состояние у потомков */ letter-spacing: normal; /* эмуляция inline-block для IE6-7*/ //display : inline; //zoom : 1; }

Отлично, сами пункты вроде бы состыковались так, как нам нужно. «Вроде бы» — я сказал не случайно, а почему, вы поймёте из следующих скриншотов.

Во всех браузерах, кроме Opera, мы можем наблюдать вполне себе отличную картину, но вот в самой Opera к сожалению всё наоборот. Как оказалось, Норвежцы считают, что letter-spacing может влиять на всё, кроме пробела.

Видимо из-за того, что символ пробела означает конец слова, а значит и letter-spacing заканчивает на этом свою работу, так как предназначен для сдвижки/раздвижки букв, именно внутри слова (в т.ч. для кернинга вручную). И тут не имеет значения, что inline-block тоже по сути буква, после неё есть пробел, а значит в любом случае, слово по факту, закончилось.

Считать ли это багом Opera? Ну не знаю, ситуация двоякая, и те и другие по своему правы, так что предлагаю оставить это на совести самой Opera, а самим отправиться на поиски решения этой проблемы.

В общем, повозившись довольно таки приличное время в поисках лекарства для этого случая, я не смог придти ни к чему путному, кроме как воспользоваться предыдущим решением с font-size и добавить его в наши стили.

ul { font: 14px Verdana, Geneva, sans-serif; /* Выставляем родителю значение -.36em */ letter-spacing : -.36em; font-size : 0; } ul li { display : inline-block; width : 100px; border : 1px solid #E76D13; /* Возвращаем в нормальное состояние у потомков */ letter-spacing: normal; font-size : 14px; /* эмуляция inline-block для IE6-7*/ //display : inline; //zoom : 1; }

Да, вот теперь всё отлично, font-size действительно смог нам помочь. Из этого я сделал вывод, что по сути можно пользоваться обоими вариантами в равной степени: font-size + display-table или letter-spacing + font-size. Т.е.

как в первом, так и во втором случае нам требуются вспомогательные инструменты в виде дополнительных свойств.
Upd: Кстати, пока писал статью, обнаружил странный баг в Safari.

Когда выставляешь родителю связку font-size : 0 и letter-spacing в любое значение em

Источник: https://css-live.ru/articles/zagadochnye-otstupy-mezhdu-inlajn-blokami.html

Advokat25
Добавить комментарий