2008-10-07 2 views
24

Я надеюсь найти ресурс для выравнивания элементов ввода на странице HTML. Мне трудно получить элемент select, а текстовое поле будет иметь одинаковую ширину даже при использовании атрибута стиля ширины, и это еще сложнее в браузерах. Наконец, входы файлов кажутся невозможными для доступа к одному и тому же браузеру ширины ширины. Есть ли хорошие руководства или советы для этого? Возможно, есть некоторые атрибуты CSS по умолчанию, которые я должен установить.Как выстроить элементы ввода HTML?

+0

Почему это считается связанным с программированием? – 2009-05-02 16:06:41

+17

@Jeremy, хотя можно утверждать, что html & css не являются строго «программированием», но это, безусловно, нечто близкое. Это также то, что я бы догадался, что огромное количество людей на этом сайте делает ежедневную часть своей работы. – 2009-10-17 18:07:47

+0

Эта проблема возникает при рендеринге в стандартном режиме, удаляет тег doctype и видит разницу. Проверьте этот вопрос, который решил проблему для меня: http://stackoverflow.com/questions/5627110/doctype-html-width-render-issue-input-element – pauloya 2011-08-29 21:19:25

ответ

17

Я протестировал это в Internet Explorer 7, Firefox 3 и Safari/Гугл Хром. Я определенно вижу проблему с <select> и <input type="file">. Мои результаты показали, что если бы вы ввели все входные данные с одинаковой шириной, то <select> будет примерно на 5 пикселей короче во всех браузерах.

Использование Eric Meyer CSS reset script не помогает в этом, но если вы просто сделаете свои <select> входы на 5 пикселей шире, вы получите очень хорошее (хотя и не идеальное) выравнивание в основных браузерах. Единственным отличием является Safari/Google Chrome, и он, по-видимому, на 1 или 2 пикселя шире, чем у всех других браузеров.

Что касается <input type="file">, то у вас нет большой гибкости при стилизации. Если JavaScript является для вас вариантом, вы можете реализовать метод shown on quirksmode, чтобы добиться большего контроля над стилем управления загрузкой файлов.

См. Мой полный рабочий пример ниже в XHTML 1.0 Строго для типичной формы с согласованной шириной ввода. Обратите внимание, что это не использует трюк 100% ширины, указанный другими здесь, потому что он имеет ту же проблему с непоследовательной шириной. Кроме того, нет таблиц, используемых для визуализации формы, поскольку таблицы должны использоваться только для табличных данных, а не для макета.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Example Form</title> 
    <style type="text/css"> 
    label, input, select, textarea { 
     display: block; 
     width: 200px; 
     float: left; 
     margin-bottom: 1em; 
    } 

    select { 
     width: 205px; 
    } 

    label { 
     text-align: right; 
     width: 100px; 
     padding-right: 2em; 
    } 

    .clear { 
     clear: both; 
    } 
    </style> 
</head> 
<body> 
    <form action="#"> 
    <fieldset> 
     <legend>User Profile</legend> 
     <label for="fname">First Name</label> 
     <input id="fname" name="fname" type="text" /> 
     <br class="clear" /> 

     <label for="lname">Last Name</label> 
     <input id="lname" name="lname" type="text" /> 
     <br class="clear" /> 

     <label for="fav_lang">Favorite Language</label> 
     <select id="fav_lang" name="fav_lang"> 
     <option value="c#">C#</option> 
     <option value="java">Java</option> 
     <option value="ruby">Ruby</option> 
     <option value="python">Python</option> 
     <option value="perl">Perl</option> 
     </select> 
     <br class="clear" /> 

     <label for="bio">Biography</label> 
     <textarea id="bio" name="bio" cols="14" rows="4"></textarea> 
     <br class="clear" /> 
    </fieldset> 
    </form> 
</body> 
</html> 
13

Я обычно помещаю их в ячейку div или таблицы (насколько я знаю) ширины, которую я хочу, а затем задайте стиль выбора и ввода: ширина до 100%, чтобы они заполнили div/ячейку, в которой они находятся.

+4

Приятная идея! И таблицы - единственный надежный способ сделать форму хорошей ... – Geoff 2008-10-08 03:06:56

0

Вы начинаете свои файлы CSS с некоторыми базовыми настройками? Может оказаться полезным включить отступ и маржу на всех элементах. Я не тестировал, может ли это повлиять на элементы выбора/ввода.

Вот пример CSS Reset от Эрика Мейера:

http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/

1

Кроме ширины, я бы установление границ и полей тоже, они могут или не могут повлиять на элементы управления. Нечто подобное может помочь:

input, select { 
    width: 100px; 
    margin: 0px; 
    border: 1px solid; 
} 

Ron есть хорошая идея тоже.

0

Входы файлов могут быть принципиально разными в браузерах и, безусловно, не позволяют значительно упростить настройку, что может раздражать, но я также понимаю, почему это происходит с точки зрения безопасности. Например, попробуйте изменить текст кнопки «Просмотр», которая отображается в большинстве браузеров, или сравнить входной файл в Safari с другими браузерами ...

0

Я не думаю, что Ron's идея работает ...

тест:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title></title> 
    <link href="styles/reset.css" rel="stylesheet" type="text/css"/> 

    <style type="text/css"> 
     input, select{ 
      width: 100%; 
     } 
    </style> 
</head> 
<body> 

<div style="width: 200px;"> 
    <input type="text"> 
    <select> 
     <option>asdasd</option> 
     <option>asdasd</option> 
    </select> 

</div> 

</body> 
</html> 

Это приводит к тому, что входной некоторые ПВ шире выбор (это, вероятно, OS- зависимый).Я не уверен, что это может быть достигнуто даже с трюком + 5px, поскольку стиль выбора, похоже, зависит от ОС (по крайней мере, от темы Windows).

2

Я обнаружил, что если вы установите выберите и вход элемент границы и отступы до 0, они же ширины. (Протестировано на Chrome 14, Firefox 7.0.1, Opera 11.51, IE 9)

Помещение границы 1px/отступов на элементах выбора и ввода делает элемент ввода на 2 пикселя шире. Например:

<form class="style"> 
    <input name="someInput" /> 
    <select name="options"> 
     <option value="1">Value 1</option> 
     <option value="2">Value 2</option> 
    </select> 
</form> 

.style select { 
    width: 100px; 
    padding: 1px; 
    border: 1px solid black; 
} 
.style input { 
    width: 96px; /* -2 px for 1px padding(1px from each side) and -2px for border 
    (select element seems to put border inside, not outside?) */ 
    padding: 1px; 
    border: 1px solid black; 
} 
0

Если вам отчаянно нужна {ширина: 100%; } И не определены с шириной в пикселях, то JQuery ваш друг:

$(function() { 
    var allSelects = $('input[type="text"], textarea'); 
    allSelects.css('width', (allSelects.width()-6)+'px'); 
} 

-6 пикселей работает лучше для меня (FF9), редактировать, как вы считаете нужным.

0

Это связано с тем, что с вводом < > граница и дополнение добавляются к ширине (как и большинство других элементов). С < выберите >, граница и дополнение включены в ширину, как в старом режиме IE quirks.

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

input { width: 200px; padding: 10px; border-width:5px; } 
select { width: 230px; padding: 10px; border-width:5px; } 

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

input, select { 
    width: 200px; 
    padding: 10px; 
    border-width:5px; 
    -webkit-box-sizing: content-box; /* Safari/Chrome, other WebKit */ 
    -moz-box-sizing: content-box; /* Firefox, other Gecko */ 
    box-sizing: content-box;   /* Opera/IE 8+ */ 
} 

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

Протестировано в Chrome, IE8, FF

Смежные вопросы