Поскольку ответ Стива Тьо всегда появляется первым и в основном одиноким, когда я ищу несколько у-осей в Google, я решил добавить немного измененную версию его ответа. Это подход из этого примера matplotlib .
Причины:
mpl_toolkits.axisartist
, mpl_toolkits.axes_grid1
). import matplotlib.pyplot as plt
fig = plt.figure()
host = fig.add_subplot(111)
par1 = host.twinx()
par2 = host.twinx()
host.set_xlim(0, 2)
host.set_ylim(0, 2)
par1.set_ylim(0, 4)
par2.set_ylim(1, 65)
host.set_xlabel("Distance")
host.set_ylabel("Density")
par1.set_ylabel("Temperature")
par2.set_ylabel("Velocity")
color1 = plt.cm.viridis(0)
color2 = plt.cm.viridis(0.5)
color3 = plt.cm.viridis(.9)
p1, = host.plot([0, 1, 2], [0, 1, 2], color=color1,label="Density")
p2, = par1.plot([0, 1, 2], [0, 3, 2], color=color2, label="Temperature")
p3, = par2.plot([0, 1, 2], [50, 30, 15], color=color3, label="Velocity")
lns = [p1, p2, p3]
host.legend(handles=lns, loc='best')
# right, left, top, bottom
par2.spines['right'].set_position(('outward', 60))
# no x-ticks
par2.xaxis.set_ticks([])
# Sometimes handy, same for xaxis
#par2.yaxis.set_ticks_position('right')
host.yaxis.label.set_color(p1.get_color())
par1.yaxis.label.set_color(p2.get_color())
par2.yaxis.label.set_color(p3.get_color())
plt.savefig("pyplot_multiple_y-axis.png", bbox_inches='tight')
Насколько я знаю, это не возможно в IE, потому что это использует компонент ОС.
Вот ссылка , где управление заменяется, но я не знаю, является ли это тем, что Вы хотите сделать.
<select>
Что-то Новое, Часть 1 , Таким образом, Вы создали красивый, совместимый стандартами сайт, использующий последние и самые большие методы CSS. Вы освоили управление моделирования каждого элемента, но подсознательно, тихий голос ворчит Вас о том, насколько ужасный Ваш <select>
с. Ну, сегодня мы собираемся исследовать способ заставить ту небольшую речь замолчать и действительно завершенный наши проекты. С небольшими сценариями DOM и некоторым творческим CSS, также можно сделать Ваш <select>
с beautiful†¦, и Вы не должны будете жертвовать доступностью, удобством использования или постепенным ухудшением.
Все мы знаем эти <select>
, просто ужасно. На самом деле многие пытаются ограничить его использование для предотвращения его классической сети приблизительно 1 994 границы вставки. Мы не должны избегать использования <select>
, хотя - это - важная часть текущего набора инструментов формы; мы должны охватить его. Тем не менее некоторое креативное мышление может улучшить его.
<select>
Мы будем использовать простое для нашего примера:
<select id="something" name="something">
<option value="1">This is option 1</option>
<option value="2">This is option 2</option>
<option value="3">This is option 3</option>
<option value="4">This is option 4</option>
<option value="5">This is option 5</option>
</select>
[Примечание: подразумевается, что это <select>
находится в контексте заполнять формы.]
, Таким образом, мы имеем пять <option>
с в <select>
. Это <select>
имеет исключительно присвоенный id
из "чего-то". В зависимости от браузера/платформы Вы просматриваете его на, Ваш <select>
вероятный примерно походит на это:
(источник: easy-designs.net )
или это
(источник: easy-designs.net )
Скажем, мы хотим заставить его выглядеть немного более современным, возможно, как это:
(источник: easy-designs.net )
Поэтому, как мы делаем это? Хранение основного <select>
не является опцией. Кроме основного цвета фона, шрифта и настроек цвета, Вы действительно не имеете большой контроль.
Однако мы можем подражать превосходной функциональности <select>
в новом управлении формой, не жертвуя семантикой, удобством использования или доступностью. Чтобы сделать это, мы должны исследовать природу <select>
.
А <select>
является, по существу, незаказанным списком выбора, в котором можно выбрать единственное значение для представления наряду с остальной частью формы. Так, в сущности это <ul>
на стероидах. Продолжая тот ход мыслей, мы можем заменить <select>
незаказанным списком, пока мы даем ему некоторую расширенную функциональность. Как [1 131] с может быть разработана в несметном числе различных путей, мы почти домашние свободный. Теперь вопросы становятся, "как удостовериться, чтобы мы поддержали функциональность <select>
при использовании <ul>
?" Другими словами, как мы отправляем правильное значение наряду с формой, если мы больше не используем управление формой?
Вводят DOM. Заключительный шаг в процессе делает эти <ul>
, функционируют/чувствуют себя подобно <select>
, и мы можем выполнить это со Сценарием JavaScript/ECMA и небольшим умным CSS. Вот основной список требований, у нас должно быть функциональное поддельное <select>
:
С этим планом, мы можем начать заниматься каждой частью по очереди.
Поэтому сначала мы должны собрать все атрибуты и s из и восстановить его как a. Мы выполняем это путем выполнения следующего JS:
function selectReplacement(obj) {
var ul = document.createElement('ul');
ul.className = 'selectReplacement';
// collect our object's options
var opts = obj.options;
// iterate through them, creating <li>s
for (var i=0; i<opts.length; i++) {
var li = document.createElement('li');
var txt = document.createTextNode(opts[i].text);
li.appendChild(txt);
ul.appendChild(li);
}
// add the ul to the form
obj.parentNode.appendChild(ul);
}
Вы могли бы думать "теперь, что происходит, если уже существует выбранный <option>
?" Мы можем объяснить это путем добавления другого цикла, прежде чем мы создадим <li>
с, чтобы искать выбранный <option>
и затем сохранить то значение чтобы к [1 140] наш выбранный <li>
, как "выбрано":
…
var opts = obj.options;
// check for the selected option (default to the first option)
for (var i=0; i<opts.length; i++) {
var selectedOpt;
if (opts[i].selected) {
selectedOpt = i;
break; // we found the selected option, leave the loop
} else {
selectedOpt = 0;
}
}
for (var i=0; i<opts.length; i++) {
var li = document.createElement('li');
var txt = document.createTextNode(opts[i].text);
li.appendChild(txt);
if (i == selectedOpt) {
li.className = 'selected';
}
ul.appendChild(li);
…
[Примечание: Отсюда на, опция 5 будет выбрана, для демонстрации этой функциональности.]
Теперь, мы можем выполнить эту функцию на каждом <select>
на странице (в нашем случае, одном) со следующим:
function setForm() {
var s = document.getElementsByTagName('select');
for (var i=0; i<s.length; i++) {
selectReplacement(s[i]);
}
}
window.onload = function() {
setForm();
}
Мы почти там; давайте добавим некоторый стиль.
я не знаю о Вас, но я - огромный поклонник CSS, выпадает (особенно разнообразие Suckerfish ). Я работал с ними в течение некоторого времени теперь, и это наконец рассветало на мне, который <select>
в значительной степени похож на выпадающее меню, хотя с немного большим количеством продолжения под капотом. Почему бы не применять ту же стилистическую теорию к нашему поддельному - <select>
? Основной стиль проходит примерно так:
ul.selectReplacement {
margin: 0;
padding: 0;
height: 1.65em;
width: 300px;
}
ul.selectReplacement li {
background: #cf5a5a;
color: #fff;
cursor: pointer;
display: none;
font-size: 11px;
line-height: 1.7em;
list-style: none;
margin: 0;
padding: 1px 12px;
width: 276px;
}
ul.selectOpen li {
display: block;
}
ul.selectOpen li:hover {
background: #9e0000;
color: #fff;
}
Теперь, для обработки "выбранного" элемента списка мы должны стать немного более лукавыми:
ul.selectOpen li {
display: block;
}
ul.selectReplacement li.selected {
color: #fff;
display: block;
}
ul.selectOpen li.selected {
background: #9e0000;
display: block;
}
ul.selectOpen li:hover,
ul.selectOpen li.selected:hover {
background: #9e0000;
color: #fff;
}
Уведомление, которое мы не используем: псевдокласс при наведении курсора для <ul>
, чтобы заставить его открыться, вместо этого мы class
- луг он как "selectOpen". Причина этого является двукратной:
<select>
, ведут себя как реальное <select>
, нам нужен список для открытия в onclick
событие а не на простом наведении мыши. Для реализации этого мы можем взять то, что мы узнали из Suckerfish, и примените его к нашему собственному JavaScript путем динамичного присвоения и удаления этого class
в 'событиях 'onclick events for the list items. To do this right, we will need the
ability to change the
onclick' для каждого элемента списка на лету для переключения между следующими двумя действиями:
<select>
при нажатии на выбранную/опцию по умолчанию, когда список сворачивается; и <select>
. Мы создадим функцию, вызванную selectMe()
для обработки переназначения "выбранного" class
, переназначения эти onclick
события для элементов списка и сворачивание поддельного - <select>
:
, Поскольку исходный Suckerfish учил нас, IE не распознает состояние при наведении курсора ни на чем кроме <a>
, таким образом, мы должны будем объяснить это путем увеличения части нашего кода с тем, что мы изучили от них. Мы можем присоединить onmouseover и onmouseout события к "selectReplacement" class
- редактор <ul>
и <li>
с:
function selectReplacement(obj) {
…
// create list for styling
var ul = document.createElement('ul');
ul.className = 'selectReplacement';
if (window.attachEvent) {
ul.onmouseover = function() {
ul.className += ' selHover';
}
ul.onmouseout = function() {
ul.className =
ul.className.replace(new RegExp(" selHover\\b"), '');
}
}
…
for (var i=0; i<opts.length; i++) {
…
if (i == selectedOpt) {
li.className = 'selected';
}
if (window.attachEvent) {
li.onmouseover = function() {
this.className += ' selHover';
}
li.onmouseout = function() {
this.className =
this.className.replace(new RegExp(" selHover\\b"), '');
}
}
ul.appendChild(li);
}
Затем мы можем изменить несколько селекторов в CSS, для обработки парения для IE:
ul.selectReplacement:hover li,
ul.selectOpen li {
display: block;
}
ul.selectReplacement li.selected {
color: #fff;
display: block;
}
ul.selectReplacement:hover li.selected**,
ul.selectOpen li.selected** {
background: #9e0000;
display: block;
}
ul.selectReplacement li:hover,
ul.selectReplacement li.selectOpen,
ul.selectReplacement li.selected:hover {
background: #9e0000;
color: #fff;
cursor: pointer;
}
Теперь у нас есть список, ведущий себя как <select>
; но нам все еще нужно средство изменения выбранного элемента списка и обновления значения связанного элемента формы.
у Нас уже есть "выбранный" class
, мы можем обратиться к нашему выбранному элементу списка, но нам нужен способ пойти о применении его к <li>
, когда на это нажимают и удаление его от любого из его ранее "выбранных" одноуровневых элементов. Вот JS для выполнения этого:
function selectMe(obj) {
// get the <li>'s siblings
var lis = obj.parentNode.getElementsByTagName('li');
// loop through
for (var i=0; i<lis.length; i++) {
// not the selected <li>, remove selected class
if (lis[i] != obj) {
lis[i].className='';
} else { // our selected <li>, add selected class
lis[i].className='selected';
}
}
}
[Примечание: мы можем использовать простой className
присвоение и освобождение, потому что мы полностью управляем <li>
с. Если (по некоторым причинам) необходимо было присвоить дополнительные классы элементам списка, я рекомендую изменить код, чтобы добавить и удалить "выбранный" класс к Вашему className
свойство.]
Наконец, мы добавляем немного функции для устанавливания значения оригинала <select>
(который будет отправлен наряду с формой), когда <li>
будет нажат:
function setVal(objID, selIndex) {
var obj = document.getElementById(objID);
obj.selectedIndex = selIndex;
}
Мы можем затем добавить эти функции к onclick
событие нашего <li>
с:
…
for (var i=0; i<opts.length; i++) {
var li = document.createElement('li');
var txt = document.createTextNode(opts[i].text);
li.appendChild(txt);
li.selIndex = opts[i].index;
li.selectID = obj.id;
li.onclick = function() {
setVal(this.selectID, this.selIndex);
selectMe(this);
}
if (i == selectedOpt) {
li.className = 'selected';
}
ul.appendChild(li);
}
…
Там у Вас есть он. Мы создали наше функциональное поддельное - . As we have
not hidden the original
yet, we can [watch how it
behaves](files/4.html) as we choose different options from our
faux-
. Of course, in the final version, we don't want the original
to show, so we can hide it by
луг класса это, как "заменено", добавив что к JS здесь:
function selectReplacement(obj) {
// append a class to the select
obj.className += ' replaced';
// create list for styling
var ul = document.createElement('ul');
…
Затем добавьте, новое правило CSS скрыться
select.replaced {
display: none;
}
С приложением нескольких изображений для завершения дизайна (свяжитесь не доступный), мы хороши для движения!
<час>И вот другой ссылка кому-то, который говорит, что она не может быть сделана.
ТОЛЬКО Используя CSS impossbile. На самом деле все элементы формы невозможно настроить для взгляда таким же образом на всех браузерах только с CSS. Можно попробовать niceforms хотя ;)
От моего личного опыта, где мы пытались поместить границу, красную, когда недопустимая запись была выбрана, невозможно поместить границу, красную из избранного элемента в IE.
, Как указано, прежде чем ocntrols в Internet Explorer использует WindowsAPI, чтобы потянуть и представить, и у Вас нет ничего для решения этого.
то, Что было нашим решением, должно было поместить цвет фона избранного светло-красного элемента (чтобы текст был читаем). цвет фона работал в каждом браузере, но в IE у нас были побочные эффекты что элемент где тот же цвет фона как выбор.
Так для суммирования решения мы гнали мяч:
select
{
background-color:light-red;
border: 2px solid red;
}
option
{
background-color:white;
}
Примечание, что цвет был выбран с шестнадцатеричным кодом, я просто, не помнит который.
Это решение давало нам требуемый эффект в каждом браузере за исключением границы, красной в IE.
Удача
Вам было бы нужно изготовленное на заказ избранное поле с CSS и JavaScript. Необходимо было бы сделать абсолютно уверенным, что это ухудшается отлично к стандартному избранному элементу, должен пользователь отключать JavaScript.
IMO, это просто не стоит усилия. Палка с моделированием шрифта в выборе для создания его близко к дизайну сайта; покиньте границы, и т.д., к коробчатой секции.
Посмотрите этот код ... надеюсь, ты счастлив :)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style type="text/css">
<style type="text/css">
*{margin:0;padding:0;}
select {font: normal 13px Arial, SansSerif, Verdana; color: black;}
.wrapper{width:198px; position: relative; height: 20px; overflow: hidden; border-top:1px solid #dddddd; border-left:1px solid #dddddd;}
.Select{color: black; background: #fff;position: absolute; width: 200px; top: -2px; left: -2px;}
optgroup{background-color:#0099CC;color:#ffffff;}
</style>
</head>
<body>
<div class="wrapper">
<select class="Select">
<optgroup label="WebDevelopment"></optgroup>
<option>ASP</option>
<option>PHP</option>
<option>ColdFusion</option>
<optgroup label="Web Design"></optgroup>
<option>Adobe Photoshop</option>
<option>DreamWeaver</option>
<option>CSS</option>
<option>Adobe Flash</option>
</select>
</div>
</body>
</html>
Саджай
IE <8 не отображает выпадающий список сам, он просто использует элемент управления Windows, который нельзя стилизовать таким образом. Начиная с IE 8 это изменилось, и теперь применяется стиль. Конечно, его рыночная доля пока еще невелика.
Я работал над невозможностью поставить рамку на выделение в IE7 (IE8 в режиме совместимости)
Придавая ему границу вместе с отступом, это выглядит как ....
Не все, но начало ...
Для моих целей это решает:
.select-container {
position:relative;
width:200px;
height:18px;
overflow:hidden;
border:1px solid white !important
}
.select-container select {
position:relative;
left:-2px;
top:-2px
}
Чтобы добавить больше стиля, необходимо использовать вложенные блоки div.
Чтобы сделать границу вдоль одной стороны выделения в IE, используйте фильтры IE:
select.required { border-left: сплошной красный 2 пикселя; фильтр: progid: DXImageTransform.Microsoft.dropshadow (OffX = -2, OffY = 0, цвет = # FF0000) }
Я помещаю границу только с одной стороны всех моих входов для требуемого статуса.
Вероятно, есть эффекты, которые лучше подходят для круговой границы ...
http://msdn.microsoft.com/en-us/library/ms532853 (v = VS.85). aspx
экстраполируйте это! :)
filter:
progid:DXImageTransform.Microsoft.dropshadow(OffX=-1, OffY=0,color=#FF0000)
progid:DXImageTransform.Microsoft.dropshadow(OffX=1, OffY=0,color=#FF0000)
progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=-1,color=#FF0000)
progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=1,color=#FF0000);