Предотвратите непрозрачность двух divs от перекрытия в CSS [duplicate]

В моем случае проблема была в конфигурации времени выполнения сервера:

Проверьте, что JRE - это необходимая версия:

Проект был в версии 1.7, а сервер JRE был установлен как 1.6, после того, как он перешел к правильной версии Java, которую он начал нормально.

29
задан web-tiki 1 May 2015 в 16:20
поделиться

5 ответов


РЕЗЮМЕ:


В зависимости от того, что необходимо, это может быть сложно, но базовый подход довольно прямолинейный.



I написал всю статью об этом здесь:

было бы легче читать.

http://dream-world.us/2012/01/07/overlapping- transparent-divs-with-one-border /



Этот подход немного отличается от моей первой мысли ... но это имеет тот же результат.

  1. Я сделал черный / прозрачный шаблон для круга и установил его в :before.
  2. Затем окружность трансформируется rotate(180deg) и перемещается в соответствии с углом <div>.
  3. Затем я установил opacity этой окружности на 0.6.
  4. На <div> не влияет opacity.
  5. Затем я добавил элемент :after и поместил изображение как background (вы можете управлять этим через js, если необходимо)
  6. Я добавил некоторые эффекты к изображению (border-radius, box-shadow, border), чтобы показать, насколько легко и независимо управлять этим элементом.
  7. Я использовал li ghter background и установите для opacity значение 0.3, чтобы показать результат

ЗДЕСЬ FIDDLE: http://jsfiddle.net/pixelass/nPjQh/4/

Посмотрите на эту версию для некоторых безумных результатов: http://jsfiddle.net/pixelass/nPjQh/5/

каждый из этих примеров используйте только один элемент div

Основные правила. (эти правила «могут» использоваться для создания динамического поведения с помощью js)

position = absolute;

top = circleHeight / -2;

left = circleHeight / -2; // (left = top)

rotation = 180deg;

opacity = значениеAofBackground;

bgColor = valueRGBofBackground;

#inner {
    width: 100%;
    height: 100%;
    position: absolute;
    left: 0;
    top: 0;
    z-index: -1;
    background-color: rgba(0, 0, 0, 0.3);
    padding:20px;
    border-radius: 20px;
    border-top-left-radius: 0;
}
#inner:before {
    content: "";
    background-image: -webkit-linear-gradient(transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0)),
        -webkit-linear-gradient(0deg, transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0));
    height: 40px;
    width: 40px;
    border-radius: 40px;
    position: absolute;
    top: -20px;
    left: -20px;
    -webkit-transform: rotateZ(180deg);
    opacity:0.3;
}
#inner:after {
    content: "";
    background: url('http://lorempixel.com/10/10/sports/1/') no-repeat;
    background-position:0;
    height: 10px;
    width: 10px;
    border-radius: 10px;
    position: absolute;
    top: -6px;
    left: -6px;
    -webkit-box-shadow: 0 0 10px rgb(255,255,255);
    border: 1px rgb(255,255,255) solid;

}

Лучшее объяснение


Оригинальная комментированная версия http://jsfiddle.net/pixelass/nPjQh/10/

см. комментарии в код ниже

#inner {
background: rgba(0,0,0,0.5) /*this is the full color-code of the div (with alpha)*/
}
#inner:before {
    /*the solid color of the circle = rgbValue of the div*/
    background-image: -webkit-linear-gradient(transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0)),
        -webkit-linear-gradient(0deg, transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0));
    /*opacity of the circle = alpha of the div*/
    opacity: 0.5;
}

Этот пример имеет полный прозрачный div ... круг - это «pacman» - форма: http://jsfiddle.net/pixelass/nPjQh/ 14 /

pacman shaped circle [/g14]


Управление смещением круга


Посмотрите на эти примеры которые обрабатывают смещение круга (НЕ ИСПОЛЬЗУЮЩИЕ ПСЕВДО-ЭЛЕМЕНТЫ)

Копия кода OP (с коррекцией 15 пикселей): 1: 1: http://jsfiddle.net/pixelass/nPjQh/12 /

С намного меньшим смещением (5px): http://jsfiddle.net/pixelass/nPjQh/13/

( содержимое имеет ту же непрозрачность, что и круг)

Как работает смещение?

Управлять background-size по сравнению с top и left

Правила:

t op = left;

background-size = elementHeight * 2 + top * 2;

Посмотрите на цветок (это также только один <div> с псевдоэлементами) [background-size больше круга. который создает зеленые листья на дне

http://jsfiddle.net/pixelass/nPjQh/15/

one div makes a flower [/g15]


ТЕКУЩАЯ ПРОБЛЕМА


См. эту скрипту: http://jsfiddle.net/pixelass/nPjQh/16/

Если не использовать другой слой, как показано в примерах в верхней части сообщения, контент будет прозрачным. Поэтому, если вам нужно только изображение внутри круга, приведенные выше примеры будут работать нормально.

conent is transparent [/g16]

КАК РЕШИТЬ ЭТУ ПРОБЛЕМУ

Если вам нужен холст или другой div внутри круга, вам нужно будет поставить круг на div и слоем нужный div по кругу

См. эту скрипту: http://jsfiddle.net/pixelass/nPjQh/17/

немного изменится, и он будет работать нормально. ПОЛУЧИТЕ КОД ИЗ FIDDLE

correcting the opacity issue [/g17]


Различные формы / расширенные стили


Если вы используете другой форма с плоскими сторонами, вы даже можете поместить границу вокруг суммы двух div .. или даже добавить тень окна

, все еще используя простую разметку ....

<div id="foo">
    <div id="bar">
    </div>
</div>

См. скрипку для теневого окна: http://jsfiddle.net/pixelass/nPjQh/21/

adding a box-shadow [/g18]


Применить границу к кругу


Используя -webkit-mask-image, мы могли бы добавить границу к кругу. http://jsfiddle.net/pixelass/nPjQh/24/

border on round element [/g19]


Дополнительные примеры:


Четыре круга вокруг div

http://jsfiddle.net/pixelass/nPjQh/25/

Разметка:

<div id="foo">
    <div id="bar1"></div>
    <div id="bar2"></div>
    <div id="bar3"></div>
    <div id="bar4"></div>
</div>

4 circles [/g20]

Используя эту технику для создания всплывающей подсказки

http://jsfiddle.net/pixelass / nPjQh / 31 /

Разметка:

<div id="foo">
    <div id="bar"></div>
    I am a pure css tooltip with a semi-transparent background and a black border. <br/>
    My width is static an my height is dynamic...
</div>

css tooltip [/g21]

37
ответ дан 29 revsuser950658 20 August 2018 в 16:52
поделиться
  • 1
    Область перекрытия никогда не изменяется. Я не понимаю, как будет работать фоновый градиент. Пожалуйста, отправьте пример, если сможете. – tripleZee 5 January 2012 в 20:12
  • 2
    Я дома около 2 часов. если позиция статична, это действительно простой взлом .. – user 5 January 2012 в 20:18
  • 3
    Я могу быть немного плотным, но во всех ваших примерах скриптов, которые были в настоящее время опубликованы (4, 5, 6), я не вижу того, что на самом деле воссоздает и обращается к проблеме OP о перекрывающейся непрозрачности цвета, создающего более темный регион. пытается избежать. – ScottS 6 January 2012 в 04:53
  • 4
    цель состоит в том, чтобы сделать полупрозрачную коробку с расширенным круглым углом в верхнем левом углу ... верно? это именно то, что показывают эти примеры. – user 6 January 2012 в 07:17
  • 5
    @pixelass Ах да, opacity! Пропустил это =) Я смею сказать, что это блестяще. Как этот ответ имеет только 2 оборота? Твои сумасшедшие примеры потрясающие! Я полностью использую это где-то. – Rudie 6 January 2012 в 22:44

Я думаю, что единственным способом было бы сделать непрозрачность отдельно,

, например. http://dabblet.com/gist/1566278

10
ответ дан Andrew 20 August 2018 в 16:52
поделиться
  • 1
    Да, но это также изменит прозрачность текста. – Roko C. Buljan 5 January 2012 в 19:43
  • 2
    @roXon правда, но легко работал. Проще чем использовать холст, как OP предлагает ... – Andrew 5 January 2012 в 19:45
  • 3
    Правда. +1 для (я думаю, единственный) разумный ответ (используя два div!). – Roko C. Buljan 5 January 2012 в 19:48
  • 4
    К сожалению, в div #foo много контента, который не может быть прозрачным. – tripleZee 5 January 2012 в 20:09
  • 5
    см. мой ответ выше ... в зависимости от браузера это можно легко сделать с помощью CSS3 и js – user 5 January 2012 в 20:14

Я создал Q / A для обработки этого сценария наряду с «зависанием» таких перекрывающихся элементов.

Перекрытые элементы с непрозрачностью и обработка «зависания» на этих .

Решение состоит в том, чтобы установить непрозрачность на родительском уровне непосредственно на дочерние элементы и переключить их во время наведения с помощью JS.


HTML

<div class="wrapper">
  <div class="first"></div>
  <div class="second"></div>
</div>

JS

$(".first, .second").hover(function() {
  $(".wrapper, .first, .second").not(this).toggleClass("add-opacity");
});

CODEPEN

Надеюсь, это поможет.

0
ответ дан Gibin Ealias 20 August 2018 в 16:52
поделиться

Как насчет этого: http://jsfiddle.net/rudiedirkx/TqRCw/

(редактор Dabble всасывает !!) [/ ​​g2]

Он может " t можно сделать только с псевдоэлементами sadly = (

Это можно сделать только с псевдоэлементами! См. ответ пикселяссы. Однако CSS3 - это требование.

1
ответ дан Rudie 20 August 2018 в 16:52
поделиться
  • 1
    это можно легко сделать без какой-либо специальной разметки или псевдоэлементов ... поверьте мне, это действительно просто ... домой через час или два ... тогда я дам правильный ответ на этот вопрос ... – user 5 January 2012 в 21:56
  • 2
    извините ... конечно, не без псевдоэлемента .. так как он предназначен для создания круга. моя идея - использовать комбинацию фонового градиента, фонового положения и фонового размера. – user 5 January 2012 в 22:21
  • 3
    Покажи мне, покажи мне =) Я очень извиняюсь. Без JS, хотя! – Rudie 5 January 2012 в 23:09
  • 4
    + 1 - Я просто посмотрел на ваш ответ и обнаружил, что он почти идентичен моему (только вы опубликовали гораздо раньше, чем я, а ваш немного более изящный). – ScottS 5 January 2012 в 23:24
  • 5
    Работает хорошо, но мне нужно поместить изображение или элемент холста внутри этого маленького круга. – tripleZee 5 January 2012 в 23:50

Пересмотренный ответ

Этот скрипт совместим с с IE9 и разрешает дублирование фона, необходимое в моем первоначальном ответе. Он использует псевдоэлементы для генерации круга. Это решение отталкивает идею пикселя «pacman», но вместо использования нового генерации градиента фона для генерации используется более старый (и мало используемый или понятный ) clip свойство, чтобы сделать круг в два частей. Это решило вопрос о том, что ваш круг не «центрирован» на углу.

#foo {
    height:150px;
    width:250px;
    background: rgba(0, 0, 0, 0.6);
    position:absolute;
    left:40%;
    top:20%;
}

#bar {
    height:40px;
    width:40px;
    position:absolute;
    top:-15px;
    left:-15px;
    line-height: 40px;
}

#bar:before,
#bar:after {
    content: '';
    display: block;
    background: rgba(0, 0, 0, 0.6);
    border-radius: 40px;
    width: 100%;
    height: 100%;
    position: absolute;
    z-index: -1;
    top: 0;
    left: 0;
}

#bar:before {
    clip: rect(0 40px 15px 0);
}

#bar:after {
    clip: rect(15px 15px 40px 0);
}

Оригинальный ответ

Вы можете это сделать ( см. Скрипт ) , Он подталкивает круг ниже и «накладывает» часть, которая перекрывается с псевдоэлементом, чтобы восстановить фоновый цвет тела:

body{background:green;}

#foo{
height:150px;
width:250px;
background:rgba(0, 0, 0, 0.6);
position:absolute;
left:40%;
top:20%;
}

#bar{
height:40px;
width:40px;
background:rgba(0, 0, 0, 0.6);
border-radius:40px;
position:absolute;
top:-15px;
left:-15px;
z-index: -1;
}

#bar:after {
    content: '';
    display: block;
    background: green;
    position: absolute;
    right: 0;
    bottom: 0;
    width: 25px;
    height: 25px;
}
2
ответ дан ScottS 20 August 2018 в 16:52
поделиться
  • 1
    Неплохо, но зеленый был всего лишь примером. Как бы вы справились с этим, не зная, что такое цвет фона? – tripleZee 8 January 2012 в 03:48
  • 2
    @ tripleZee - хороший вопрос. Я переформулировал ответ. У меня все еще есть небольшая проблема, которую мне нужно выработать, так как ваш круг не сидит на углу. – ScottS 8 January 2012 в 06:08
  • 3
    @ tripleZee - я разработал проблему, когда круг был смещен по центру. – ScottS 9 January 2012 в 14:49
  • 4
    OP должен был упомянуть, что он ищет способ, совместимый с iPhone. даже если ваша версия поддерживает IE9, она несовместима с iPhone (и не является моей). ваша версия имеет крошечные перекрытия, у меня есть крошечные пробелы ... anyways +1 для поддержки IE9 – user 9 January 2012 в 17:13
  • 5
    Да, немного об iPhone было бы хорошо знать. Я не уверен, какую версию вы в последний раз смотрели, но я не вижу крошечных совпадений с последними. – ScottS 9 January 2012 в 17:32
Другие вопросы по тегам:

Похожие вопросы: