CSS RGBA границы / фон альфа двойной - PullRequest
24 голосов
/ 13 апреля 2010

Я работаю над веб-сайтом с высокой степенью прозрачности, и я подумал, что постараюсь создать его полностью в RGBA, а затем сделать запасные варианты для IE. Мне нужен эффект границы в стиле «facebox», где внешняя граница округлена и является менее непрозрачной, чем фон рамки, которую она окружает.

Последний пример из http://24ways.org/2009/working-with-rgba-colour, кажется, предполагает, что это возможно, но я не могу заставить его работать. Когда я попробую следующее:

<!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" xml:lang="en" lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

 <title>RGBA Test</title>
 <style type='text/css'>
   body {
     background: #000;
     color: #fff;
   }
   #container {
     width: 700px;
     margin: 0 auto;
     background: rgba(255, 255, 255, 0.2);
     border: 10px solid rgba(255, 255, 255, 0.1);
     padding: 20px;
   }
  </style>
</head>
<body>
  <div id='container'>
    This should look like a facebox.
  </div>
</body></html>

Кажется, что фон "расширяется" под границей элемента, что приводит к суммированию значений пикселей. Таким образом, когда и фон, и граница полупрозрачны, граница ВСЕГДА будет более непрозрачной, чем фон элемента. Это прямо противоположно тому, чего я пытаюсь достичь, но, похоже, это должно быть возможно на основе примеров, которые я видел.

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

Извините, я не могу опубликовать изображение этого ... Судя по всему, мне не хватает представителя для публикации изображения.

Ответы [ 3 ]

25 голосов
/ 30 января 2011

Вы можете использовать новое свойство background-clip: padding-box;, чтобы начать работу. Он вычисляет, откуда должен начинаться фон внутри рамки. Для более подробной информации и примеров, проверьте здесь

3 голосов
/ 13 апреля 2010

Проверка этого в Firefox подтверждает то, что вы описываете - и мне потребовалось немного времени, чтобы осознать последствия этого! Наличие менее прозрачной границы не повлияет на прозрачный фон под ней, поскольку граница (как вы говорите) является аддитивной.

В этом случае вам придется смоделировать эффект, который вам нужен, и работать с цветами больше, чем альфа:

background: rgba(128, 128, 128, 0.7);
border: 10px solid rgba(0, 0, 0, 0.1);
2 голосов
/ 31 октября 2010

Попробуйте это:

#container {
    width: 700px;
    margin: 0 auto;
    background: rgba(255, 255, 255, 0.2);
    border: 10px solid rgba(255, 255, 255, 0.1);
    padding: 20px;

    /* and here is the fix */
    -webkit-background-clip: padding-box;
    -moz-background-clip: padding;
    background-clip: padding-box;
}
...