Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   HTML5. Кроссбраузерное Оформление Placeholder... (https://javascript.ru/forum/xhtml-html-css/31276-html5-krossbrauzernoe-oformlenie-placeholder.html)

Mike_Kharkov 01.09.2012 00:44

HTML5. Кроссбраузерное Оформление Placeholder...
 
Здравствуйте.
HTML5 изучаю недавно и на днях решил применить атрибут 'placeholder'.
(с соответствующим плагином для кроссбраузерности.)
В результате столкнулся со следующими трудностями:
1) Opera не поддерживает регуляцию цвета для текста.
2) В Safary невозможно отцентрировать текст по горизонтали.
Буду благодарен, если кто подскажет обходные пути.
(Возможно требуется прописать что-нибудь в скрипте? Я в этом не силён.)
P.S. Также было бы неплохо понять, каким образом можно найти аналог св-ва ':focus' для инпутов в ie-7?
(необходимо поменять цвет бордерам.)
Пример страницы с проблемами находиться здесь:
http://webmaster.ayrveda.ru/Placeholder/index.html
Буду признателен за любую помощь...

Deff 01.09.2012 01:47

http://webcache.googleusercontent.co...client =opera

Mike_Kharkov 01.09.2012 02:13

Цитата:

Сообщение от Deff (Сообщение 202170)

Уже было прописано и это не работает...
(просто по фаербагу неотображается...)

Deff 01.09.2012 02:14

Mike_Kharkov,
Ну я про ограничения в Опере , "что ничего не поддерживаецо"... хотя нужно смотреть уже 12.02 вышла

devote 01.09.2012 02:20

Цитата:

Сообщение от Deff
Ну я про ограничения в Опере - ничего не поддерживаецо...

ты бы еще статью десятилетней давности нарыл бы... с утверждением того что ничего не работает.

Deff 01.09.2012 02:22

devote,
Я сижу на 11.52 - кроме текста ничо не вижу, потом я не утверждал - а констатирова про "нет" в Опере в статье ... :blink: и пыталсо поддержать спичь

devote 01.09.2012 02:24

Цитата:

Сообщение от Deff
Я сижу на 11.52 - кроме текста ничо не вижу

я сижу на 11.64 вроде как все пучком работает. Хотя на 12-ой наверно уж все пашет что надо.

Mike_Kharkov 01.09.2012 02:34

Вложений: 2
Цитата:

Сообщение от devote (Сообщение 202184)
я сижу на 11.64 вроде как все пучком работает. Хотя на 12-ой наверно уж все пашет что надо.

У меня версия '12.50 internal' - но цвет для текста не изменяеться...

Nanto 03.09.2012 13:19

в 12-ой вообще ничерта толком не работает (12, 12.01, 12.02) - я не понимаю что Opera Software ASA год делали... Куча необъяснимых багов (порой не повторяемых даже на однотипных конфигурациях), косяки с флэшем и т.д. Надо бы уходить с неё потихоньку - уже два патча выпустили - а всё бестолку.

devote 03.09.2012 14:10

Nanto,
а конкретнее можете сказать что именно вас не устраивает? Косяк с флешем легко решается, просто в комплект 12-ой оперы зачем то сунули Flash 8-й версии из за этого часто видите предложение о его переустановке..
Решение:
Зайдите в папку с плагинами оперы C:\Program Files\Opera\program\plugins найдите в ней файл NPSWF32.DLL и просто его удалите... Затем перезапустите оперу. И проблемы с флешем уйдут.

devote 03.09.2012 14:21

Цитата:

Сообщение от Nanto
я не понимаю что Opera Software ASA год делали...

работали они, напомню, над оперой работаю всего два/три программиста в отличии от того количества программистов что делают ФФ, Хром и т.д. Лично я уважаю этих разработчиков, так как эти два/три разработчика довольно таки не плохо справляются и успевают внедрить все то что в других браузерах внедряют сотни программистов в тот же срок.

FINoM 03.09.2012 14:36

Mike_Kharkov, все эти проблемы решит яваскрипт.

Nanto 03.09.2012 16:48

Цитата:

Сообщение от devote (Сообщение 202784)
работали они, напомню, над оперой работаю всего два/три программиста в отличии от того количества программистов что делают ФФ, Хром и т.д. Лично я уважаю этих разработчиков, так как эти два/три разработчика довольно таки не плохо справляются и успевают внедрить все то что в других браузерах внедряют сотни программистов в тот же срок.

ОАО «Opera Software»
Тип: Публичная компания
Девиз компании: «Лучший Интернет на любом устройстве»
Год основания: 1995
Расположение: Осло, Норвегия
Ключевые фигуры:
Ларс Бойлсен, СЕО
Йон Стефенсон фон Течнер, основатель
Гейр Иварсёй, основатель
Отрасль: Программное обеспечение
Продукция:
Opera Desktop
Opera Mini
Opera Mobile
Nintendo DS Browser
Internet Channel
Opera Devices SDK
Оборот: ▲ NOK 134.8 млн (3 кв. 2009)
Операционная прибыль: ▲ NOK 47.4 млн (3 кв. 2009)
Чистая прибыль: ▲ NOK 2.1 млн (3 кв. 2009)
Число сотрудников: 760 (3 кв. 2009)
Дочерние компании: FastMail, AdMarvel
Сайт: opera.com

Mike_Kharkov 03.09.2012 16:52

Цитата:

Сообщение от FINoM (Сообщение 202790)
Mike_Kharkov, все эти проблемы решит яваскрипт.

Может вы подскажите где можно увидеть работающее решение на JS?
(или что необходимо прописать в данном случае. Если это конечно для вас не трудно..)

Nanto 03.09.2012 17:19

В Гугле забанили?
Вот, например, один из сотни способов:
http://www.xiper.net/collect/html-an...-password.html

Mike_Kharkov 03.09.2012 17:42

Цитата:

Сообщение от Nanto (Сообщение 202816)
В Гугле забанили?
Вот, например, один из сотни способов:
http://www.xiper.net/collect/html-an...-password.html

Это всё понятно. Но я не заметил там атрибута 'Placeholder'?
(такое решение не приемлимо...)
Под примером я подразумевал, что бы необходимый атрибут сохранялся...
(Тоесть так, как это сделано в в данном плагине для IE-7,8,9...)
P.S. Покажите мне где в гугле можно найти подобную(и главное нормально функционирующую) реализацию и для остальных браузеров?

FINoM 03.09.2012 17:50

Цитата:

Сообщение от Mike_Kharkov
Может вы подскажите где можно увидеть работающее решение на JS?

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

Mike_Kharkov 03.09.2012 18:04

Цитата:

Сообщение от FINoM (Сообщение 202824)
Дак учите, я вон тоже раньше работал исключительно верстальщиком около года, потом надоело. Все-таки у программиста задачи интереснее, возможностей больше, да и платят лучше.

Я уже пробовал это делать.
(месяцев 5 учил JS и JQ). Но затем забросил это дело.
Во время практики возникает множество вопросов, ответы на которые нельзя получить на форумах.(так, как в данном топике например.)
В любых видеоуроках(на русском) ответы на эти вопросы не получить...
Остаються только буржуйские уроки.. Там действительно неплохо(по словам моих знакомых обьясняеться.) Но этот язык мне не доступен...
Поэтому в свободное время и занимаюсь сейчас его изучением...
(Других альтернатив пока не вижу. Если вы их видите - буду рад выслушать вашу точку зрения...)

devote 03.09.2012 18:55

Цитата:

Сообщение от Nanto
Число сотрудников: 760 (3 кв. 2009)

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

Nanto 03.09.2012 22:52

Цитата:

Сообщение от Mike_Kharkov (Сообщение 202821)
Это всё понятно. Но я не заметил там атрибута 'Placeholder'?
(такое решение не приемлимо...)
Под примером я подразумевал, что бы необходимый атрибут сохранялся...
(Тоесть так, как это сделано в в данном плагине для IE-7,8,9...)
P.S. Покажите мне где в гугле можно найти подобную(и главное нормально функционирующую) реализацию и для остальных браузеров?

Ничего не понял! Мой пример полностью кроссбраузерно эмулирует поведение placeholder. Плюс возможность задавать стилевое оформление.
Что значит "необходимый атрибут сохранялся"???

Реализацию с "placeholder для нормальных браузеров, а для ослов - JS" Вы не найдёте. Как минимум по той причине, которую Вы сами в первом посте и озвучили. Opera не сможет его стилизовать, как минимум сменить foreground color. Поэтому я Вам и подыскал пример полностью на JS. Хотя можете поизвращаться - поопределять user-agent, и подсовывать Опере, IE (и, видимо, Safari) - js. Но это чревато...
Я в таких случаях просто забиваю - прописываю placeholder - кто поддерживает, тот поддерживает, а остальное - проблемы малых народов!

Mike_Kharkov 03.09.2012 23:02

Цитата:

Сообщение от Nanto (Сообщение 202859)
Я в таких случаях просто забиваю - прописываю placeholder - кто поддерживает, тот поддерживает, а остальное - проблемы малых народов!

Я согласен.
Но в вашем случае, насколько я понямаю, не наблюдаеться того, что пример работал в зависимости от того или иного браузера?
Тоесть меня бы в данной ситуации устроило, что бы ваш пример работал для ie-7,8,9 + Opera и возможно Safary! А Mozilla и Сhrome(и в некоторых случаях+ safary) конечно будут по человечески функционировать..
Но вопрос в том, где мне найти подобную реализацию?
(сам такое смастерить не смогу...)

devote 04.09.2012 00:13

немного магии с CSS3 и малость JS:

Только для браузеров поддерживающие CSS3, хотя под IE дописать не проблема
<style type="text/css">
	label {
		position: relative;
	}
	label span {
		position: absolute;
		left: 0;
		width: 100%;

		top: 1px; /* управлять высотой подсказки */

		/* Стиль для placeholder */
		text-align: center;
		color: #aeaeae;
		font-size: 14px;
		font-family: Tahoma;
	}
	label input:focus + span, label input:not([value=""]) + span {
		display: none;
	}
</style>
<!--[if lte IE 8]><style type="text/css">
	/* В ИЕ ниже девятой версии просто не будет отображать подсказку */
	label input + span {
		display: none;
	}
</style><![endif]-->
<label>
	<input type="text" value="" onchange="this.setAttribute('value', this.value);" />
	<span>Please enter name</span>
</label>
<label>
	<input type="text" value="" onchange="this.setAttribute('value', this.value);" />
	<span>Please enter email</span>
</label>
<label>
	<input type="password" value="" onchange="this.setAttribute('value', this.value);" />
	<span>Please enter password</span>
</label>

Mike_Kharkov 04.09.2012 04:29

Цитата:

Сообщение от devote (Сообщение 202867)
немного магии с CSS3 и малость JS:

Только для браузеров поддерживающие CSS3, хотя под IE дописать не проблема

Спасибо за пример.(говорю искренне.)
Но как я уже сказал это не совсем то что мне необходимо...
(отсутствует 'placeholder'.)
Как по мне проще выглядит то, что я сам когда то состряпал:
http://webmaster.ayrveda.ru/Script_Form/index.html
Меньше HTML кода. + это семантичнее...
(но также отсутствует и 'placeholder'. Код возможно сделан далеко не наилучшим образом - но всё же это проще ИМХО.)

Nanto 04.09.2012 06:25

Блин, я уже изрядно пьян... Так что не ждите отменя никакой конкретики! Вы 4 месяца изучали JS (или 6?..).
Тут на форуме куча скриптов - на определение юзер-агента. Возьмите любой за образец - и IE, Опере и Сафари - подсовывайте js-файл. А уж елси так необходимо "задействовать плюшки html5" - то Хрому и Фоксу подсовывайте цсс-ный placeholder.
Повторюсь - я сейчас чересчур пьян. Но это сможет сделать и дебил.
Надеюсь, Вы достаточно компетентны, чтобы справится с подобной задачей, в противном случае - извините, не по адресу.

devote 04.09.2012 08:42

Цитата:

Сообщение от Mike_Kharkov
Спасибо за пример.(говорю искренне.)

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

Скрипт отдельно на гитхабе: https://github.com/devote/HTML5-Placeholder
<!DOCTYPE html>
<html>
	<head>
		<script type="text/javascript" src="https://github.com/devote/HTML5-Placeholder/raw/master/placeholder.min.js"></script>
		<script type="text/javascript">
			function insertInput() {
				var input = document.createElement('input');
				input.type = "text";
				input.setAttribute( 'placeholder', "Enter value" );
				document.body.appendChild( input );
				inputPlaceholder( input );
			}
		</script>

		<style type="text/css">

			input {
				color: #f00;
				text-align: center;
			}

			/*
			* Стиль для браузеров не поддерживающих
			* placeholder или псевдо-елемента input-placeholder
			*/
			input.input-placeholder, textarea.input-placeholder {
				color: #00f;
				text-align: center;
			}

			/*
			* Стиль для WebKit браузера ( Chrome )
			*/
			input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
				color: #00f;
				text-align: center;
			}

			/*
			* Стиль для Mozilla ( FireFox )
			*/
			input:-moz-placeholder, textarea:-moz-placeholder {
				color: #00f;
				text-align: center;
			}
		</style>
	</head>
	<body>
		<input type="text" value="" placeholder="Enter name" />
		<input type="text" value="" placeholder="Enter email" class="vasya" />
		<input type="password" value="" placeholder="Enter password" class="petya" />
		<textarea placeholder="Enter message"></textarea>
		<button onclick="insertInput();">Insert new input</button>
	</body>
</html>

devote 04.09.2012 08:48

да забыл написать, для динамически вставленных input'ов можно заюзать метод inputPlaceholder пример:
var inp = document.createElement( 'input' );
inp.type = "text";
inp.setAttribute('placeholder', "Введи что-то");
document.body.appendChild( inp );
inputPlaceholder( inp ); // активируем placeholder для вновь вставленного элемента

devote 04.09.2012 08:51

Цитата:

Сообщение от Nanto
Тут на форуме куча скриптов - на определение юзер-агента.

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

devote 04.09.2012 09:35

Исправил ошибку в коде

Mike_Kharkov 04.09.2012 09:40

Цитата:

Сообщение от devote (Сообщение 202897)
ну вот накатал по быстрому, скриптом обрабатывается только в тех браузерах где нет поддержки placeholder или криво обрабатываются стили. В данном скрипте есть один недостаток, я не стал его допиливать, но если нужно позже допилю. Недостаток в том что в ИЕ ниже 9-й версии нельзя у вставленного в DOM элемента input сменить атрибут type, поэтому поля с типом password в ИЕ8 и ниже не будут отображать placeholder:
[HTML run]<!DOCTYPE html>

Большое спасибо. Если сможете допилить - я подожду сколько необходимо(не вопрос.)
Правда на вскидку заметил, что в ie-7,8 после фокуса текст не исчезает и затем когда вводиться новый текст - он врезаеться в середину(сверху накладывается) старого...
P.S. Даже не знаю как вас благодарить. Если все заработает будет здорово... Сейчас уже нет сил во всём разбираться(ночь работал).
Как только проснусь - сразу займусь вашим плагином... :)
Ещё раз Oгромное Спасибо!

devote 04.09.2012 09:47

Цитата:

Сообщение от Mike_Kharkov
Правда на вскидку заметил, что в ie-7,8 после фокуса текст не исчезает и затем когда вводиться новый текст - он врезаеться в середину(сверху накладывается) старого...

хм... странно но у меня все гуд.. вы проверяли до исправления моей ошибки или после?

Цитата:

Сообщение от Mike_Kharkov
Если сможете допилить - я подожду сколько необходимо(не вопрос.)

хорошо допилю позже

Mike_Kharkov 04.09.2012 09:48

Цитата:

Сообщение от devote (Сообщение 202906)
хм... странно но у меня все гуд.. вы проверяли до исправления моей ошибки или после?

Проверял до исправления. Сейчас всё ОК! :)

devote 04.09.2012 11:27

Допилил его, теперь во всех браузерах должно работать нормально, на текстовых полях и на поле password а так же на textarea

devote 04.09.2012 12:26

закинул скрипт на гитхаб: https://github.com/devote/HTML5-Placeholder

Nanto 04.09.2012 17:36

Цитата:

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

Ну так и я о том же - есть куча скриптов, которые вычисляют браузер по тем или иным "плюшкам CSS3/HTML5".
Вы вот не стали определять юзер-агента, и поэтому Ваш пример абсолютно не решает проблему топик-стартера - Opera понимает атрибут placeholder, но не меняет для него цвет. Для Оперы этот атрибут надо скрывать.
P.S. Да и фокс чего-то подглючивает.

devote 04.09.2012 21:24

Цитата:

Сообщение от Nanto
Для Оперы этот атрибут надо скрывать.

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

UPD: Я определяю не наличие возможности placeholder а наличие возможности менять стиль посредством CSS псевдо-элемента, если эту возможность отсутствует, тогда обрабатываю скриптом, не зависимо от того понимает браузер сам placeholder или нет... Единственное исключение сделано для Сафари, так как он понимает и то и другое, но не может центровать текст в placeholder, поэтому для него отдельно было введено правило.

Mike_Kharkov 05.09.2012 22:57

Цитата:

Сообщение от devote (Сообщение 202918)
Допилил его, теперь во всех браузерах должно работать нормально, на текстовых полях и на поле password а так же на textarea

Попробовал сейчас поддключить input type="email" и с этим атрибутом скрипт похоже не работает?
Имею ввиду Opera и Safary.
http://webmaster.ayrveda.ru/devote-H...e6e/index.html
(или под этот атрибут он не расчитан?)

devote 05.09.2012 23:05

Цитата:

Сообщение от Mike_Kharkov
(или под этот атрибут он не расчитан?)

хм... странно.. ща посмотрим, вообще должен был работать

devote 05.09.2012 23:12

Mike_Kharkov,
я исправил, затести сейчас

Mike_Kharkov 05.09.2012 23:16

Цитата:

Сообщение от devote (Сообщение 203241)
Mike_Kharkov,
я исправил, затести сейчас

В Safary и Opera норм. - но во всех IE текст отсутствует...

devote 05.09.2012 23:20

Цитата:

Сообщение от Mike_Kharkov
но во всех IE текст отсутствует...

в смысле? я тока что проверил ИЕ, вроде норм... поясни пожалуйста конкретнее.. спс


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