CPython - это сбор мусора, как только они выходят из области видимости, поэтому второй []
создается после сбора первого []
. Таким образом, большую часть времени он попадает в ту же ячейку памяти.
Это показывает, что происходит очень четко (выход может отличаться в других реализациях Python):
class A(object):
def __init__(self): print "a",
def __del__(self): print "b",
# a a b b False
print A() is A()
# a b a b True
print id(A()) == id(A())
Либо используйте полупрозрачное изображение PNG , либо используйте CSS 3:
background-color: rgba(255, 0, 0, 0.5);
Вот статья из css3.info, Непрозрачность, RGBA и компромисс (2007-06-03).
Hello, World! Span> p>
Некоторое время назад я писал об этом в Кросс-браузерная прозрачность фона с помощью CSS .
Причудливый Internet Explorer 6 позволит вам сделать фон прозрачным и сохранить текст поверх полностью непрозрачным. Для других браузеров я предлагаю использовать прозрачный файл PNG.
Лучше использовать полупрозрачный .png
.
Просто откройте Photoshop , создайте пиксель 2x2
image (выбор 1x1
может вызвать ошибку Internet Explorer! ), залейте его зеленым цветом и установите непрозрачность на вкладке «Слои» на 60%. Затем сохраните его и сделайте его фоновым изображением:
<p style="background: url(green.png);">any text</p>
Конечно, он работает отлично, за исключением прекрасного Internet Explorer 6 . Доступны лучшие исправления, но вот быстрый взлом:
p {
_filter: expression((runtimeStyle.backgroundImage != 'none') ? runtimeStyle.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src='+currentStyle.backgroundImage.split('\"')[1]+', sizingMethod=scale)' : runtimeStyle.filter,runtimeStyle.backgroundImage = 'none');
}
Непрозрачность фона, но не текста есть некоторые идеи. Либо используйте полупрозрачное изображение, либо наложите дополнительный элемент.
Проблема в том, что текст на самом деле имеет полную непрозрачность в вашем примере.
Самый простой способ - это использовать полупрозрачный фон PNG изображение .
Вы можете использовать JavaScript, чтобы он работал в Internet Explorer 6 , если вам нужно.
В Firefox 3 и Safari 3 вы можете использовать RGBA, например Георг Шелли упомянул .
Малоизвестный трюк заключается в том, что вы можете использовать его и в Internet Explorer. с использованием фильтра градиента.
background-color: rgba(0, 255, 0, 0.5);
filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#7F00FF00', EndColorStr='#7F00FF00');
Первое шестнадцатеричное число определяет альфа-значение цвета.
Полное решение для всех браузеров:
.alpha60 {
/* Fallback for web browsers that doesn't support RGBa */
background: rgb(0, 0, 0) transparent;
/* RGBa with 0.6 opacity */
background: rgba(0, 0, 0, 0.6);
/* For IE 5.5 - 7*/
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);
/* For IE 8*/
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";
}
Это из прозрачности фона CSS без влияния на дочерние элементы, через RGBa и фильтры .
Это при использовании следующего кода:
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title>An XHTML 1.0 Strict standard template</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css" media="all">
.transparent-background-with-text-and-images-on-top {
background: rgb(0, 0, 0) transparent; /* Fallback for web browsers that doesn't support RGBa */
background: rgba(0, 0, 0, 0.6); /* RGBa with 0.6 opacity */
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); /* For IE 5.5 - 7*/
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; /* For IE 8*/
}
</style>
</head>
<body>
<div class="transparent-background-with-text-and-images-on-top">
<p>Here some content (text AND images) "on top of the transparent background"</p>
<img src="http://i.imgur.com/LnnghmF.gif">
</div>
</body>
</html>
Вот как я это делаю (возможно, это не оптимально, но работает):
Создайте div
, которым вы хотите быть полупрозрачный. Дайте ему класс / идентификатор. Оставьте пустым и закройте. Задайте ему заданную высоту и ширину (скажем, 300 на 300 пикселей). Задайте для него непрозрачность 0,5 или любой другой и цвет фона.
Затем, непосредственно под этого div, создайте еще один div с другим классом / идентификатором. Создайте внутри него абзац, где вы разместите свой текст. Задайте div
position: relative и top: -295px
(это отрицательное 295 пикселей). Дайте ему z-index 2 для хорошей оценки и убедитесь, что его непрозрачность равна 1. Оформите абзац так, как вам нравится, но убедитесь, что размеры меньше, чем у первого div
, чтобы он не переполнялся.
Вот и все. Вот код:
.trans {opacity: 0.5; высота: 300 пикселей; ширина: 300 пикселей; цвет фона: оранжевый; } .trans2 {непрозрачность: 1; положение: относительное; верх: -295px; } .trans2 p {ширина: 295 пикселей; черный цвет; font-weight: жирный; }
text text text
Это работает в Safari 2.x, но я не знаю об Internet Explorer.
trans2 p {ширина: 295 пикселей; черный цвет; font-weight: жирный; } text text text
Это работает в Safari 2.x, но я не знаю об Internet Explorer.
trans2 p {ширина: 295 пикселей; черный цвет; font-weight: жирный; } text text text
Это работает в Safari 2.x, но я не знаю об Internet Explorer.
Для простого полупрозрачного цвета фона приведенные выше решения (CSS 3 или фоновые изображения) являются лучшими вариантами. Однако если вы хотите сделать что-то более сложное (например, анимацию, несколько фонов и т.д.), или если вы не хотите полагаться на CSS 3, вы можете попробовать "технику панели":
.pane, .pane > .back, .pane > .cont { display: block; }
.pane {
position: relative;
}
.pane > .back {
position: absolute;
width: 100%; height: 100%;
top: auto; bottom: auto; left: auto; right: auto;
}
.pane > .cont {
position: relative;
z-index: 10;
}
<p class="pane">
<span class="back" style="background-color: green; opacity: 0.6;"></span>
<span class="cont" style="color: white;">Hello world</span>
</p>
Эта техника работает за счет использования двух "слоев" внутри внешнего элемента панели:
Параметр position: relative
на панели важен; он указывает заднему слою, что нужно подогнать его под размер панели. (Если вам нужно, чтобы тег был абсолютным, измените панель с
на
и оберните все это в тег absolutely-position
. )
Основное преимущество этой техники перед аналогичными вышеперечисленными заключается в том, что панель не обязательно должна быть определенного размера; как указано выше, она будет размещаться по всей ширине (обычная компоновка блочных элементов) и только до высоты содержимого. Внешний элемент панели может иметь любой размер, если он прямоугольный (т.е. inline-block будет работать, а обычный inline - нет).
Кроме того, это дает вам большую свободу для фона; вы можете поместить в задний элемент действительно все, что угодно, и это не повлияет на поток содержимого (если вы хотите несколько полноразмерных подслоев, просто убедитесь, что они также имеют position: absolute, width/height: 100%, и top/bottom/left/right: auto).
Один из вариантов, позволяющий регулировать вставку фона (через top/bottom/left/right) и/или закрепление фона (через удаление одной из пар left/right или top/bottom), заключается в использовании следующего CSS:
.pane > .back {
position: absolute;
width: auto; height: auto;
top: 0px; bottom: 0px; left: 0px; right: 0px;
}
Как написано, это работает в Firefox, Safari, Chrome, Internet Explorer 8 (и более поздних версиях) и Opera, хотя Internet Explorer 7 и Internet Explorer 6 требуют дополнительных CSS и выражений, IIRC, и, насколько я знаю, второй вариант CSS не работает в Opera.
На что следует обратить внимание:
s вместо
s для упрощения CSS.
Более полное демо, демонстрирующее гибкость этой техники при использовании ее в тандеме с display: inline-block
, а также с auto
и конкретными width
s/min-height
s:
. pane, .pane > .back, .pane > .cont { display: block; } .pane { position: relative; width: 175px; min-height: 100px; margin: 8px; } .pane > .back { position: absolute; z-index: 1; width: auto; height: auto; top: 8px; bottom: 8px; left: 8px; right: 8px; } .pane > .cont { position: relative; z-index: 10; } .debug_red { background: rgba(255, 0, 0, 0, 0.5); border: 1px solid rgba(255, 0, 0, 0, 0.75); } .debug_green { background: rgba(0, 255, 0, 0, 0.5); border: 1px solid rgba(0, 255, 0, 0, 0.75); } .debug_blue { background: rgba(0, 0, 255, 0.5); border: 1px solid rgba(0, 0, 255, 0.75); }
Содержание панели.
Содержание панели.
Pane content.
Pane content.
Pane content.
Pane content.
Pane content.
Pane content.
Pane content.
Pane content.
Pane content.
Pane content.
Содержание панели.
Содержание панели.
Pane content.
Pane content.
А вот живая демонстрация широко используемой техники:
62
ответ дан 22 November 2019 в 19:55
поделиться
Это лучшее решение, которое я смог придумать, НЕ используя CSS 3. И оно отлично работает в Firefox, Chrome и Internet Explorer, насколько я могу судить.
Поместите контейнер DIV и два дочерних DIV на одном уровне, один для содержимого, другой для фона. И используя CSS, автоматически подгоните размер фона под размер содержимого и поместите фон фактически на задний план, используя z-index.
.container { position: relative; } .content { position: relative; color: White; z-index: 5; } .background { position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; background-color: Black; z-index: 1; /* Эти три строки предназначены для прозрачности во всех браузерах. */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter: alpha(opacity=50); opacity: .5; }
Вот содержание.
Фон должен увеличиться, чтобы соответствовать содержимому.