Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Непонятное поведение бордеров (https://javascript.ru/forum/xhtml-html-css/38556-neponyatnoe-povedenie-borderov.html)

antserg 06.06.2013 13:46

Непонятное поведение бордеров
 
Здравствуйте.

Есть 5 текстовых полей инпут, каждый из них обернут в абзац (<p>). В конце каждого поля добавлены по тегу <span> с картинкой внутри. Проблема в том, что никак не могу выравнять бордеры этих полей и span. Поля 2 и 4 - нормально выравнялись, остальные нет. Подскажите, пожалуйста, почему так происходит? Также хочется понять здесь логику такого поведения.

Ссылка (все не нужное выбросил, минимум кода):
http://sergcloud.ru/borders/

ksa 06.06.2013 16:55

antserg, не верь инпутам. :D
Работай только с однотипными элементами. Например с теми же спанами...

В один из них засунь инпут без бордюров с нужной шириной и высотой.

antserg 06.06.2013 17:27

Огромное вам спасибо. Вы правы.

bes 06.06.2013 20:10

может так
<span style="white-space: nowrap; border: solid 1px gray; padding: 0.1em; border-radius: 0.2em;">
	<input value="через:" style="outline-style: none; border: none;">
	<img src="http://sergcloud.ru/borders/i/x.png">
</span>

danik.js 07.06.2013 16:02

Цитата:

Сообщение от ksa
antserg, не верь инпутам.

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

Nanto 14.06.2013 06:42

danik.js,
сходу вспоминается, например, это

danik.js 14.06.2013 06:50

Nanto, не сталкивался. Сложно представить случай, когда нужно инпутам указать padding в процентах..

Deff 14.06.2013 07:07

Цитата:

Сообщение от antserg
Есть 5 текстовых полей инпут, каждый из них обернут в абзац (<p>). В конце каждого поля добавлены по тегу <span> с картинкой внутри. Проблема в том, что никак не могу выравнять бордеры этих полей и span. Поля 2 и 4 - нормально выравнялись, остальные нет. Подскажите, пожалуйста, почему так происходит? Также хочется понять здесь логику такого поведения.

Не проще ли - сделать инпуты прозрачными, без бордеров и поставить нужную фоновую картинку на обрамляющий тег <p> ?

Nanto 14.06.2013 07:17

Цитата:

Сообщение от danik.js (Сообщение 256197)
Nanto, не сталкивался. Сложно представить случай, когда нужно инпутам указать padding в процентах..

Бывает... Иногда старые костыли вылезают, иногда ещё что-то... Ну допустим надо инпут на всю ширину растянуть - ?

danik.js 14.06.2013 07:24

Цитата:

Сообщение от Nanto
Ну допустим надо инпут на всю ширину растянуть

И как проценты паддинга помогут? Бордер то в процентах не задашь.
Решение - использовать box-sizing: border-box и никакие проценты не нужны.

Nanto 14.06.2013 07:32

По сабжу (браузеры всё же уточняйте - ага? а то влом перебирать все чтобы багу воспроизвести) - для инпута проставьте корректное значение font-size и будет вам щастье.

Nanto 14.06.2013 07:35

Цитата:

Сообщение от danik.js (Сообщение 256204)
И как проценты паддинга помогут? Бордер то в процентах не задашь.
Решение - использовать box-sizing: border-box и никакие проценты не нужны.

А! Ну с таким подходом конечно... Типа если браузер не поддерживает какие-то фичи из CSS3 и HTML5 - пусть идёт в гуду?
я к тому, что "width:98%; padding:0 1%;", т.е. поля не задашь в пикселях при таком раскладе, а они нужны, иначе текст будет "липнуть" к краям.

danik.js 14.06.2013 07:53

Цитата:

Сообщение от Nanto
т.е. поля не задашь в пикселях при таком раскладе, а они нужны

Помимо полей нужен еще бордер. Его тоже не задашь в пикселях. Предлагаешь задать в процентах? Как ты себе результат представляешь?


Цитата:

Сообщение от Nanto
Типа если браузер не поддерживает какие-то фичи из CSS3 и HTML5 - пусть идёт в гуду?

Я не о "каких-то фичах" говорю, а о box-sizing. IE8 это свойство поддерживает (причем без префикса в отличие от Firefox), а этого достаточно в большинстве проектов. А если не достаточно - то ie-хаки в помощь (или conditional comments)


<style>
    input {
        -moz-box-sizing: border-box;
        box-sizing: border-box;
        width: 100%;
        border: 1px solid gray;
        padding: 4px;
        *width: 97%;
        *padding: 4px 1%;
    }
</style>
<input />

Nanto 14.06.2013 08:31

danik.js,
box-sizing распространение получил относительно недавно, поэтому есть куча кода который надо поддерживать, а не переписывать. В идеале-то, конечно, лучше использовать его (а ещё лучше без префиксов и оглядки на старых ослов). А с процентными бордерами, уже и не помню... как вариант обернуть дивкой с margin:0 1px; и инпуту width:100%; а бордеры пусть на отступы накладываются.

danik.js 14.06.2013 09:10

Цитата:

Сообщение от Nanto
box-sizing распространение получил относительно недавно, поэтому есть куча кода который надо поддерживать, а не переписывать.

И? Ну поддерживай. Какое это имеет отношение к обсуждаемой проблеме?

Цитата:

Сообщение от Nanto
А с процентными бордерами, уже и не помню... как вариант обернуть дивкой с margin:0 1px; и инпуту width:100%; а бордеры пусть на отступы накладываются.

Если мы добавим обертку, то и процентный паддинг нам не нужен. Это именно то, о чем я и говорю - процентный паддинг даже не представляю в каком извращении может пригодиться.
<!DOCTYPE html>
<style>
    body {
        outline: 1px dotted blue;
    }
    div {
        margin: 0 5px;
    }
    input {
        width: 100%;
        border: 1px solid red;
        padding: 4px;
        margin: 0 -5px;
    }
</style>
<div><input /></div>


Часовой пояс GMT +3, время: 01:27.