-
Posts
5,139 -
Joined
-
Last visited
-
Days Won
32
Content Type
Profiles
Forums
Calendar
Store
Everything posted by s0rr0w
-
Браузер какой? Телепаты в отпуске.
-
Я думал вы там деньги зарабатываете. А вы, оказывается, проблемы друг другу создаете... Всегда верстал так, как хотелось мне. Кто не согласен - идет в сад. А, вы там шахтерством занимаетесь, дали в руки мешок и кирку - копаете от сюда и до обеда? Удачное бизнес-решение! Преклоняю голову перед гуру веб-бизнеса! Из ваших слов слово "верстальщик" звучит как "раб". Давайте, а я вам все баги расскажу.
-
Им не хватает места для того, чтобы поместиться в том месте, где они находятся сейчас.
-
Да все там есть. Копайте внимательнее.
-
.left выкидываем position:absolute; z-index:2; .right выкидываем position:relative; width:100%; z-index:1; ставим margin-left:379px;
-
Опера 9.63 - все нормально.
-
И что вы выигрываете? Например, лежащая девушка сверху имеет тень, которая падает на разделительную полоску. Я бы сделал PNG без полоски, с чистой тенью, полоску сделал бы примитивным бордером. Но, из-за слитого макета, картинка будет с полоской. Любое изменение цвета полоски = перерезать картинку наново. Еще вариант - лупа под поисковой формой. Так как нереально выковырять из-под формы полное изображение лупы, то можно напороться на интересный баг в сафари, который может изобразить форму ввода по-своему, и не факт, что она будет по высоте такой, какой она изображена в макете. Был бы полный рисунок, было бы проще всем. Вот и возникает резонный вопрос, нафига сливать слои в макете? То, что я делаю сейчас, к сожалению не могу показать. Закрытое ПО. А то, что делал раньше - без проблем, например http://www.1plus1.ua/
-
Эмуляция селекта вам поможет.
-
body {height:auto !important;...
-
Читал, читал. Я для тех, кто не задавал вопросы, написал.
-
Потому что я в слове margin ошибку допустил.
-
1. Нет 2. Скопировать код себе с понравившегося сайта.
-
Тогда попробуй следующий финт ушами .img-desc{ width: 575px; } .img-desc img { display: block; } .img-desc cite{ background: #111; filter:alpha(opacity=55); opacity:0.55; color: #fff; position: absolute; width: 555px; padding: 10px; border-top: 1px solid #999 magrin-top: -20px; } Значение magrin-top поставишь нужное.
-
[skipped]
-
Описание может быть двухстрочным?
-
Ученье - свет...
-
Я бы такому дизайнеру вернул слитый макет обратно, с кучей матов впридачу. Кто принялся резать с ходу, не задав ни одного вопроса, двойка за работу, даже не смотря в код. Вы прокакали кучу денег компании-исполнителя, выраженном во времени, которое вы потеряете при переделывании макета. За это я бы не погладил по голове, а лишил бы премии, или сделал бы отрицательную премию, со знаком минус.
-
Это у некоторых в голове бардак, вот это уже точно нехорошо. Свойство opacity не является прозрачностью самого блока. Действие аналогично маске, которая налагается на весь блок с его содержимым. Называть данное поведение неправильным - публичное признание в полном незнании матчасти. Реализовать задачу можно через png в фоне блока.
-
Итак, как и обещал, мое решение. Чтобы не мудрствовать лукаво, в качестве носителя блоков выберем TBODY у таблицы. Итак, начальная форма у нас получится вот такая: <h1>Поиск по параметрам:</h1> <div class="moduleBlock"> <div class="formContent"> <table> <tbody> <tr> <th>Фамилия:</th> <td><span class="inputBox"><input type="text"></span></td> <th>Имя:</th> <td><span class="inputBox"><input type="text"></span></td> <th>Отчество:</th> <td><span class="inputBox"><input type="text"></span></td> </tr> </tbody> <tbody> <tr> <th>E-main:</th> <td><span class="inputBox"><input type="text"></span></td> </tr> </tbody> <tbody> <tr> <th>ICQ:</th> <td><span class="inputBox"><input type="text"></span></td> <th>GTALK:</th> <td><span class="inputBox"><input type="text"></span></td> </tr> </tbody> </table> </div> <div class="actionBlock"> <a href="#">очистить</a> <a href="#">отправить</a> </div> </div> Мы обернули весь рабочий код модуля специальным блоком, чтобы иметь общую родительскую ноду и для формы и для управляющих элементов. Зачем нужен <span class="inputBox"></span> я расскажу позже. Самое первое, что мы реализовываем, это механизм очистки формы. Так как обработчик для очистки формы был написан для прошлого примера, мы его используем повторно. Добавляем каждому полю ввода атрибут SC="sc_clear_form:clear", а на ссылку пишем простой код GSC_setValAndLaunch( 'clear', true, $getParentByClassName( this, 'moduleBlock' ) ); Установить значение состояния clear в true и запустить обход дерева начиная с ноды, которая имеет класс moduleBlock, тобишь с нашего родительского контейнера для модуля. Что получаем: <h1>Поиск по параметрам:</h1> <div class="moduleBlock"> <div class="formContent"> <table> <tbody> <tr> <th>Фамилия:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear"></span></td> <th>Имя:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear"></span></td> <th>Отчество:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear"></span></td> </tr> </tbody> <tbody> <tr> <th>E-main:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear"></span></td> </tr> </tbody> <tbody> <tr> <th>ICQ:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear"></span></td> <th>GTALK:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear"></span></td> </tr> </tbody> </table> </div> <div class="actionBlock"> <a href="#" onclick="GSC_setValAndLaunch( 'clear', true, $getParentByClassName( this, 'moduleBlock' ) ); return false;">очистить</a> <a href="#">отправить</a> </div> </div> Очистка формы работает. Идем дальше. Нам теперь нужно добавить элементам формы обработчик, который при onchange выполнял следующую операцию: проходил по всем элементам формы и спрашивал, все ли элементы пустые. Если хоть один элемент заполнен, то нужно задизейблить все остальные блоки. Добавляем функцию <h1>Поиск по параметрам:</h1> <div class="moduleBlock"> <div class="formContent"> <table> <tbody SC="sc_remove_class:clear:disabled|sc_remove_class_by_id:dis:name:disabled"> <tr> <th>Фамилия:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear|sc_have_def_val:is_def" onchange="disableBlock( this, 'name')"></span></td> <th>Имя:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear|sc_have_def_val:is_def" onchange="disableBlock( this, 'name')"></span></td> <th>Отчество:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear|sc_have_def_val:is_def" onchange="disableBlock( this, 'name')"></span></td> </tr> </tbody> <tbody SC="sc_remove_class:clear:disabled|sc_remove_class_by_id:dis:email:disabled"> <tr> <th>E-main:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear|sc_have_def_val:is_def" onchange="disableBlock( this, 'email')"></span></td> </tr> </tbody> <tbody SC="sc_remove_class:clear:disabled|sc_remove_class_by_id:dis:mess:disabled"> <tr> <th>ICQ:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear|sc_have_def_val:is_def" onchange="disableBlock( this, 'mess')"></span></td> <th>GTALK:</th> <td><span class="inputBox"><input type="text" SC="sc_clear_form:clear|sc_have_def_val:is_def" onchange="disableBlock( this, 'mess')"></span></td> </tr> </tbody> </table> </div> <div class="actionBlock"> <a href="#" onclick="GSC_setValAndLaunch( 'clear', true, $getParentByClassName( this, 'moduleBlock' ) ); return false;">очистить</a> <a href="#">отправить</a> </div> </div> Осталось последнее, отправка данных только из нужного блока. У нас с прошлого примера остался замечательный обработчик sc_collect, но нам нужно его применить только для той TBODY, которая активна на данный момент. Обойдем эту ситуацию следующим образом. Создадим обработчик var sc_get_node = function ( controller, node, scData, execOptions ) { try { if ( !$matchClassName( node, scData.args[0] ) ) controller.states[ scData.state ] = node; } catch ( e ) { } } Если у ноды есть класс, который передан в параметре scData.args[0], то мы состоянию присваиваем данную ноду. Добавляем функцию кнопке "отправить" var blockSubmit = function ( node ) { try { // Находим контейнер модуля по имени класса. var container = $getParentByClassName( node, "moduleBlock" ); // Запускаем обход дерева. Ограничиваем обход только TBODY GSC_setValAndLaunch( "collect", null, container, { propagation: "TBODY"} ); var collectResult = GSC_getVal( "collect" ); if ( collectResult == null ) { // нельзя отправлять пустую форму } else { // collectResult будет равняться ноде, которая на данный момент не имеет класса disabled var tmpData = {}; GSC_launch( collectResult, "collect", { formData: tmpData } ); // console.debug(tmpData); } } catch ( e ) { } }; Если у кого есть firebug, тот может раскомментировать строку // console.debug(tmpData); и посмотреть, что все работает как надо. Итак, что у нас есть? * У нас есть "хитрый" дизейбл форм через CSS (ноу-хау!) * Можно построить логику, при которой будут дисейблиться только часть элементов формы в блоке. * Добавление новых элементов делается путем простого копи-паста. * Нет ни единого идентификатора, и можно делать более одного модуля на странице без потери функциональности всего модуля. * Написано всего два новых контроллера и две JS-функции, остальное использовано повторно. Исходник качаем тут: http://forum.htmlbook.ru/index.php?act=att...=post&id=63
-
Пример для темы http://forum.htmlbook.ru/index.php?showtopic=13745 sample9.zip
-
Вы видели призывы с моей стороны забить на семантику ? Везде нужно подходить с умом, а не доводить до абсурда.
-
Лучше лечить display: inline
-
Как отобразить в бразуре отформиатированный HTML и CSS?
s0rr0w replied to termoplus's question in HTML Coding
А код изучить не судьба? -
Некоторые болеют вирусным заболеванием под названием "острый семантический бзик". Группировка контента несемантична