Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Кроссбраузерный <select> без кастомизации + защита своего кода. (https://javascript.ru/forum/xhtml-html-css/39707-krossbrauzernyjj-select-bez-kastomizacii-zashhita-svoego-koda.html)

Mike_Kharkov 09.07.2013 00:16

Кроссбраузерный <select> без кастомизации + защита своего кода.
 
Добрый вечер.
Так вышло, что у меня одномоментно возникло 2 вопроса - но для каждого из них создавать отдельный пост я не увидел смысла..

1) Меня заинтересовал следующий момент:
Можно ли организовать кроссбраузерную реализацию тега <select> без помощи JS??
Имею ввиду не сам внешний вид - а именно размеры тега + вертикальное центрирование шрифта?
Для примера есть такая страница:
http://webmaster.ayrveda.ru/Viwall.ru-2/index.html
В шапке есть 2 селекта и мне необходимо что бы размеры и вертикальное центрирование было одинаковым в следующих браузерах(в последних их версиях):
Mazilla, Google Chrome, Safari, Opera, + IE-7,8,9,10!?
Проблема в том, что в ie-7 cелект мне не удаётся вертикально отцентрировать: (c остальными браузерами разобрался.)
http://webmaster.ayrveda.ru/ie_7_selects.jpg

2) Реально ли на сегодняшний день загрузить сайт на свой хостинг и продемонстрировать его заказчику таким образом, что бы он не смог его украсть?)
В том числе и через специализированные программы(например: Фаербаг, Скрапбук и т.п.) ???
Интересно мнение бывалых в этом деле пользователей..

P.S. Буду признателен за любые конструктивные советы по данным вопросам..

devote 09.07.2013 01:11

Цитата:

Сообщение от Mike_Kharkov
В шапке есть 2 селекта и мне необходимо что бы размеры и вертикальное центрирование было одинаковым в следующих браузерах

давно использую такой способ стилизации селектов:
<!DOCTYPE html>
<html>
  <head>
<style>
    .select-wrapper {
        position: relative;
        overflow: hidden;
        border: 1px solid #e8e8e8;
        border-radius: 5px;
        background-color: #f7f7f7;
        background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #eee));
        background-image: -webkit-linear-gradient(top, #fff, #eee);
        background-image:    -moz-linear-gradient(top, #fff, #eee);
        background-image:     -ms-linear-gradient(top, #fff, #eee);
        background-image:      -o-linear-gradient(top, #fff, #eee);
        background-image:         linear-gradient(to bottom, #fff, #eee);
        filter: progid:DXImageTransform.Microsoft.Gradient(StartColorStr=#ffffff, EndColorStr=#eeeeee, GradientType=0);
        box-shadow: 0 0 4px #ccc;
		height: 22px;
        width: 150px;

        margin: 10px;
    }
    .select-wrapper select {
        position: relative;
        width: 100%;
        opacity: 0;
        /** IE7 disable style **/
        filter: expression('filter: none;');
        -ms-filter: "Alpha(opacity=0)";
        z-index: 1;
        top: 0;
        left: 0;
    }
    .select-wrapper:before {
        position: absolute;
        content: attr(data-select-value);
        white-space: nowrap;
        font-family: Tahoma, Arial;
        font-size: 12px;
        color: #000;
        height: 100%;
        width: 100%;
        margin: 4px 0 0 5px;
    }
    .select-wrapper .select-arrow {
        position: absolute;
        background: inherit;
        filter: inherit;
        top: 0;
        right: 0;
        height: 100%;
        width: 20px;
    }
    .select-wrapper .select-arrow:after {
        position: absolute;
        content: " ";
        border: 0;
        border-top: 5px solid #aaa;
        border-left: 5px solid transparent;
        border-right: 5px solid transparent;
        width: 0;
        height: 0;
        top: 50%;
        right: 4px;
        margin-top: -2px;
    }
    .select-wrapper select:focus + .select-arrow:after {
        border-top: 5px solid #555;
    }
</style>
  </head>
  <body>
<div class="select-wrapper" data-select-value="- select city -">
    <select onchange="this.parentNode.setAttribute('data-select-value', this.children[this.selectedIndex].innerHTML)">
        <option>- select city -</option>
        <option value="1">Saint-Petersburg</option>
        <option value="2">Moscow</option>
        <option value="3">New York</option>
    </select>
    <div class="select-arrow"></div>
</div>
<div class="select-wrapper" data-select-value="option 1">
    <select onchange="this.parentNode.setAttribute('data-select-value', this.children[this.selectedIndex].innerHTML)">
        <option value="ololo">option 1</option>
        <option value="hehe">option 2</option>
        <option value="lalala">option 3</option>
    </select>
    <div class="select-arrow"></div>
</div>
<div class="select-wrapper" data-select-value="option 1">
    <select onchange="this.parentNode.setAttribute('data-select-value', this.children[this.selectedIndex].innerHTML)">
        <option value="ololo">option 1</option>
        <option value="hehe">option 2</option>
        <option value="lalala">option 3</option>
    </select>
    <div class="select-arrow"></div>
</div>
<div class="select-wrapper" data-select-value="option 1">
    <select onchange="this.parentNode.setAttribute('data-select-value', this.children[this.selectedIndex].innerHTML)">
        <option value="ololo">option 1</option>
        <option value="hehe">option 2</option>
        <option value="lalala">option 3</option>
    </select>
    <div class="select-arrow"></div>
</div>
  </body>
</html>
Правда в ИЕ7 они остаются стандартными, потому как там нет псевдо-элементов after/before... Хотя лично я уже давно положил болт на ИЕ7. В остальных браузерах все пучком.

Mike_Kharkov 09.07.2013 01:24

Я так понимаю что JS код в данной реализации всё же необходим?
Имею ввиду:
onchange="this.parentNode.setAttribute('data-select-value', this.children[this.selectedIndex].innerHTML)"

+
data-select-value="..."

P.S. Но все равно Большое Спасибо! Не знал об этом. Обязательно возьму на заметку..

danik.js 09.07.2013 04:51

А зачем вы поддерживаете IE7 но совсем забыли про IE6? Число пользователей и контингент примерно одинаковый. Насколько я знаю все уже давно забили как на IE6 так и на IE7, оставляя минимальную поддерживаемую версию - IE8 (ибо XP-шки..)

По второму вопросу - речь про html-страницы? Если заказчик задастся целью, то сохранит исходники себе. Но я таких никогда не встречал.
Можно разве что усложнить ему процесс (до такой степени, что он плюнет на это дело). Но готовых вариантов не подскажу. Был тут чел на форуме, который занимался подобной фигней )

Хотя не, js еще можно запрятать, а вот HTML и CSS можно всегда скопировать в отладчике браузера.

Mike_Kharkov 09.07.2013 12:57

Цитата:

Сообщение от danik.js (Сообщение 261233)
А зачем вы поддерживаете IE7 но совсем забыли про IE6? Число пользователей и контингент примерно одинаковый. Насколько я знаю все уже давно забили как на IE6 так и на IE7, оставляя минимальную поддерживаемую версию - IE8 (ибо XP-шки..)

По второму вопросу - речь про html-страницы? Если заказчик задастся целью, то сохранит исходники себе. Но я таких никогда не встречал.
Можно разве что усложнить ему процесс (до такой степени, что он плюнет на это дело). Но готовых вариантов не подскажу. Был тут чел на форуме, который занимался подобной фигней )

Хотя не, js еще можно запрятать, а вот HTML и CSS можно всегда скопировать в отладчике браузера.

Дело в том, что IE-7 необходим заказчику, а ie-6 нет.
Насчёт сохранения кода - речь действительно о html страницах.

danik.js 09.07.2013 13:15

А по ссылке твоя работа? Жесть. Нафига такие классы?
Цитата:

class="menu_index_bottom_navigation menu_margin_left_bottom_navigation_index"
И так вся страница. В подвале зачем-то тег <menu> хотя он используется чисто для тубларов и контекстных меню. Для ссылок на страницы используется <nav>

Mike_Kharkov 09.07.2013 13:55

Цитата:

Сообщение от danik.js (Сообщение 261275)
А по ссылке твоя работа? Жесть. Нафига такие классы?

И так вся страница. В подвале зачем-то тег <menu> хотя он используется чисто для тубларов и контекстных меню. Для ссылок на страницы используется <nav>

1) Работа моя. Объясню зачем такие классы(хотя сам никогда так не верстаю. Об этом скажет моё портолио на фрилансере.ру)
+ если вы заметили, то в вашем примере 2 класса?(а не один!)
На сайте планировалось 10000 страниц примерно.
На каждой странице есть класс 'center_content_index' и добавлять новый класс(к этому блоку) на новой странице я не имел возможности потому как это не нравилось программисту.
Как в таком случае избежать проблем?
(Буду рад выслушать вашу версию!)


2) По следующей странице:
https://www.free-lance.ru/commune/pr...a-kritika.html
Человек говорит о том что nav-ul-li вполне подходит для главной навигации.
(Скинул бы вам ещё ссылку на форум HTMLbook.ru - но он, к сожалению, сейчас не работает.)
Вот к примеру ссылка на книгу:
https://dl.dropboxusercontent.com/u/34067843/%D0%A5%D0%BE%D0%B3%D0%B0%D0%BD%20%D0%91.%20-%20HTML5%20%D0%B8%20CSS3.%20%D0%92%D0%B5%D0%B1-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D 0%BA%D0%B0%20%D0%BF%D0%BE%20%D1%81%D1%82%D0%B0%D0% BD%D0%B4%D0%B0%D1%80%D1%82%D0%B0%D0%BC%20%D0%BD%D0 %BE%D0%B2%D0%BE%D0%B3%D0%BE%20%D0%BF%D0%BE%D0%BA%D 0%BE%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20-%202012.pdf

Посмотрите стр. 30, 34! (только страницы именно в книге а не в браузере.)
Как по мне там тоже самое что и у меня в плане тега <nav> реализовано.?


Насчёт меню в принципе с вами согласен - но опять же сейчас уже не помню точно где(По моему в книге Б.Хогана - но возможно и ошибаюсь.) читал о том что допускается что бы <menu> использовался и таким образом как на данной странице.
http://htmlbook.ru/html/menu
Возьмите хотя бы отсюда первый пример - там аналогичная ситуация.

P.S. А вообще, если честно, мне непонятно зачем такая педантичность к этим тегам?
Вы за SEO оптимизацию что ли беспокоитесь?
(Если так - то это напрасно.)

danik.js 09.07.2013 15:20

С классами понятно.
Что-то ты на какие-то сомнительные источники ссылаешься.
Вот, прочитай тут про использование <menu> - http://www.w3.org/wiki/HTML/Elements/menu
Хотя на htmlbook тоже все правильно написано, ты видимо невнимательно прочел.
Цитата:

Сообщение от Mike_Kharkov
P.S. А вообще, если честно, мне непонятно зачем такая педантичность к этим тегам?

Да я вот тоже об этом задумался. Можно ведь вместо <nav> использовать <figure>, вместо <header> прекрасно подойдет <footer>, правда же? А w3c и whatwg сидят и каждый день какой-то фигней занимаются, какую-то там семантику никому не нужную сочиняют..

Mike_Kharkov 09.07.2013 15:26

Цитата:

Сообщение от danik.js (Сообщение 261310)
С классами понятно.
Что-то ты на какие-то сомнительные источники ссылаешься.
Вот, прочитай тут про использование <menu> - http://www.w3.org/wiki/HTML/Elements/menu
Хотя на htmlbook тоже все правильно написано, ты видимо невнимательно прочел.

Да я вот тоже об этом задумался. Можно ведь вместо <nav> использовать <figure>, вместо <header> прекрасно подойдет <footer>, правда же? А w3c и whatwg сидят и каждый день какой-то фигней занимаются, какую-то там семантику никому не нужную сочиняют..

))
Я понял вашу мысль.
Но во первых, на практике, с точки зрения SEO так оно и получается.
(По большому счёту.)
Во вторых - в моём случае я считаю, не настолько всё серьезно, как вы описали.

danik.js 09.07.2013 15:34

Я всего лишь указал на недочет и как его исправить:
Цитата:

Сообщение от danik.js
В подвале зачем-то тег <menu> хотя он используется чисто для тубларов и контекстных меню. Для ссылок на страницы используется <nav>

Про хэдер с футером это конечно уже перебор)


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