Вот как я это делаю (это может быть не оптимально, но оно работает):
Создайте div
, который вы хотите быть полупрозрачным. Дайте ему класс / id. Оставьте его ПУСТОЙ и закройте его. Дайте ему заданную высоту и ширину (скажем, 300 пикселей на 300 пикселей). Дайте ему непрозрачность 0,5 или все, что вам нравится, и цвет фона.
Затем, НЕПОСРЕДСТВЕННО НИЖЕ, что div, создайте еще один div с другим классом / id. Создайте абзац внутри него, где вы разместите свой текст. Дайте div
позицию: относительный и верхний: -295px
(это НЕГАТИВНО 295 пикселей). Дайте ему z-индекс 2 для хорошей меры и убедитесь, что его непрозрачность равна 1. Создайте свой абзац, как вам нравится, но убедитесь, что размеры меньше, чем размеры первого div
, поэтому он не переполняется.
Вот и все. Вот код:
.trans {
opacity: 0.5;
height: 300px;
width: 300px;
background-color: orange;
}
.trans2 {
opacity: 1;
position: relative;
top: -295px;
}
.trans2 p {
width: 295px;
color: black;
font-weight: bold;
}
<body>
<div class="trans">
</div>
<div class="trans2">
<p>
text text text
</p>
</div>
</body>
Это работает в Safari 2.x, я не знаю об Internet & nbsp; Explorer.
Я бы реализовал структуру данных с этими двумя словарями
Dictionary<TKey1, KeyValuePair<TKey2, TValue>> dict1;
Dictionary<TKey2, KeyValuePair<TKey1, TValue>> dict2;
Таким образом, если вам дается 1 ключ, у вас есть как значение, так и другой ключ для удобного удаления и обновления.
Значит, вам нужен многоиндексный словарь, поддерживающий поиск на основе любого ключа и поддерживающий расширения для нескольких ключей?
Может быть, вы думаете о неправильной структуре данных, попробуйте KD-Tree ] вместо этого. Неизменяемое KD-дерево удовлетворяет требованиям безопасности потоков.
KD-деревья имеют некоторые основные преимущества перед наивным подходом Dictionary {Key1, Dictionary {Key2, Value}}
, а именно, что вы можете искать для всех полей на основе Key2 без знания Key1. Кроме того, KD-деревья позволяют вам искать ключи, которые находятся рядом с некоторым другим ключом. Например, сайты знакомств классифицируют людей по десяткам групп (курильщики / некурящие, пол, религия, образ жизни, возраст, рост), а затем возвращают ближайших соседей на основе вашего запроса.
Вот реализация C # и Java:
Я тут рискну и покажусь глупым, но вы можете просто создать свой собственный Словарь, основанный на двух словарях. Это не было бы слишком сложно написать (даже с механизмами блокировки для обеспечения безопасности потоков). Я имею в виду, что существует множество примеров, когда вы можете использовать индекс или ключ для доступа к коллекции. (Например, Session)
И наоборот, если у вас несколько индексов одного и того же типа, вы можете просто добавить один и тот же элемент несколько раз.
Словарь будет поддерживать что-то с индексом GUID, а также с индексом простого имени " Джо "- не забудьте добавить элемент дважды.
Вы можете просто использовать для этого обычный словарь и вставить значение дважды, по одному разу для каждого ключа. Для удаления удалите оба ключа.
Плюсы:
Недостатки:
size ()
удваивается. Вы думали о том, чтобы иметь два словаря, по одному для каждого ключа? Добавление элемента добавит его к обоим.
Удаление означает также удаление из обоих словарей и требует обоих ключей. Чтобы удалить только одним ключом, элемент должен хранить оба ключа. Если он еще не содержит оба ключа, вы можете обернуть его в объект-контейнер, содержащий оба ключа и элемент.
Два словаря, но не дублируйте элементы в каждом.
У вас будет словарь значений и словарь ключей.
Когда вы вызываете свой метод добавления, вы сгенерирует GUID и добавит его вместе с ключом в словарь ключей.
Затем используйте GUID в качестве ключа к словарю значений.
Если вы хотите добавить два ключа, вы добавите еще один элемент в словарь ключей с тем же идентификатором GUID.
Конечно, это означает, что каждый поиск требует двух проверок данных, но никогда больше, даже если у вас есть 50 ключей для одного и того же значения.
Найдите guid на основе ключа из таблицу ключей, затем найдите данные на основе этого идентификатора в таблице значений.
Возможно, вариант:
Сделайте, как предлагает Джон Кугельман, просто добавьте элемент дважды в один и тот же словарь. Затем у вас есть второй словарь, который сопоставляет значения с наборами ключей.
Когда вы добавляете пару ключ-значение, вы просто добавляете ее как обычно в первый словарь, а затем извлекаете набор ключей, принадлежащих этому значению, из второго словаря и добавляете ключ.
Dictionary
Dictionary
Удаление значения выполняется путем извлечения набора ключей из dict2 и удаления их по одному из dict1.
Количество ключей: dict1. Count и количество значений dict2.Count
Я написал такой словарь и разместил его в моем блоге . Он предоставит вам приятный API вроде этого:
DoubleKeyDictionary<int, string, string> books = new DoubleKeyDictionary<string, string, string>();
bookListEx.Add(1, “21/12/2009″, “Lord of the Rings - Fellowship of the Ring”);
Вы также можете использовать "Equals" для двух словарей и для каждого из них.
Обратите внимание, что в коде есть по крайней мере одна ошибка (обнаруженная в комментариях) и нет модульных тестов и т. Д. Когда (да!) У меня будет время, я обновлю код с модульные тесты ...
А как насчет мультииндексного контейнера , вдохновленного ускорением ??
Взгляните на CodeProject .
Создание простого класса для хранения Tkey1, TKey2, TValue, создание списка из них и использование LINQ для запроса такой структуры было бы вариантом.