围绕元素但不在其后面的背景

时间:2018-03-22 04:26:31

标签: html css background transparency bootstrap-grid

所以我有一个div,包含一个img,div填满整个屏幕。我需要img(附件上的E)来获取宽度高度保持宽高比。我需要在我的img周围放置一个背景颜色,但在img后面(因为它有透明度,我需要看看后面是什么)。

到目前为止,我让我的img尽可能多地采用宽度和高度,但无法弄清楚如何仅在img周围放置背景而不是落后。

我的猜测是A,B,C,D,F,G,H,I是背景颜色的div,而E是包含img的img或div。

我正在使用Bootstrap 3.3.7,我希望尽可能保持自适应。

请帮忙!

Layout

编辑:完整代码如下所示 编辑2 :简化我的代码,将方法更改为网格1并添加jsfiddle。不幸的是,仍然有空隙来填充图像附件中的B和C,而E没有占用应该占用的所有空间。

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
    <style>
        .grd-container {
            display: grid;
            grid-template-columns: auto auto auto;
            grid-template-rows: auto auto auto;
            /*align-content: stretch;*/
            position: absolute;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            overflow: hidden;
        }
        .grd-item-1,
        .grd-item-2,
        .grd-item-3,
        .grd-item-4,
        .grd-item-6,
        .grd-item-7,
        .grd-item-8,
        .grd-item-9 {
            background-color: #000000;
        }
        .grd-item-1 {
            grid-column-start: 1;
            grid-column-end: 2;
            grid-row-start: 1;
            grid-row-end: 2;
         }
        .grd-item-2 {
            grid-column-start: 2;
            grid-column-end: 3;
            grid-row-start: 1;
            grid-row-end: 2;
         }
        .grd-item-3 {
            grid-column-start: 3;
            grid-column-end: 4;
            grid-row-start: 1;
            grid-row-end: 2;
         }
        .grd-item-4 {
            grid-column-start: 1;
            grid-column-end: 2;
            grid-row-start: 2;
            grid-row-end: 3;
         }
        .grd-item-5 {
            /* main */
            grid-column-start: 2;
            grid-column-end: 3;
            grid-row-start: 2;
            grid-row-end: 3;
            max-height: 100%;
            max-width: 100%;
            width: 100%;
            height: 100%;
         }
        .grd-item-6 {
            grid-column-start: 3;
            grid-column-end: 4;
            grid-row-start: 2;
            grid-row-end: 3;
         }
        .grd-item-7 {
            grid-column-start: 1;
            grid-column-end: 2;
            grid-row-start: 3;
            grid-row-end: 4;
         }
        .grd-item-8 {
            grid-column-start: 2;
            grid-column-end: 3;
            grid-row-start: 3;
            grid-row-end: 4;
         }
        .grd-item-9 {
            grid-column-start: 3;
            grid-column-end: 4;
            grid-row-start: 3;
            grid-row-end: 4;
         }
         .grd-bg {
            z-index: -1;
            grid-column-start: 1;
            grid-column-end: 4;
            grid-row-start: 1;
            grid-row-end: 4;
         }
    </style>
</head>
<body>
    <div class="grd-container">
        <div class="grd-bg">
            <video playsinline autoplay muted loop poster="http://via.placeholder.com/1600x900" id="bgvid"
                style="
                    position: absolute;
                    top: 50%;
                    left: 50%;
                    margin-top: 0;
                    min-width: 100%;
                    min-height: 100%;
                    z-index: -100;
                    -ms-transform: translateX(-50%) translateY(-50%);
                    -moz-transform: translateX(-50%) translateY(-50%);
                    -webkit-transform: translateX(-50%) translateY(-50%);
                    transform: translateX(-50%) translateY(-50%);
                    background: url(http://via.placeholder.com/1600x900) no-repeat;
                    background-size: cover; 
            ">
                <source src="http://f.jblab.info/so_49420556/videobg.mp4" type="video/mp4">
            </video>
        </div>
        <div class="grd-item-1">1</div>
        <div class="grd-item-2">2</div>
        <div class="grd-item-3">3</div>
        <div class="grd-item-4">4</div>
        <img class="grd-item-5" src="http://f.jblab.info/so_49420556/mask.svg">
        <div class="grd-item-6">6</div>
        <div class="grd-item-7">7</div>
        <div class="grd-item-8">8</div>
        <div class="grd-item-9">9</div>
    </div>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

我没有使用纯CSS,所以我使用的是混合CSS / js解决方案。

如果有人找到纯CSS解决方案,请分享。

这是我到目前为止所得到的。

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <style>
        * {
            -webkit-box-sizing: border-box;
            -moz-box-sizing: border-box;
            box-sizing: border-box;
            padding: 0;
            margin: 0;
        }
        .cover-img {
           min-height: 100%;
           min-width: 100%;
           width: auto;
           height: auto;
        }
        #bgvid {
          position: absolute;
          top: 50%;
          left: 50%;
          margin-top: 0;
          min-width: 100%;
          min-height: 100%;
          z-index: -100;
          -ms-transform: translateX(-50%) translateY(-50%);
          -moz-transform: translateX(-50%) translateY(-50%);
          -webkit-transform: translateX(-50%) translateY(-50%);
          transform: translateX(-50%) translateY(-50%);
          background: url('https://jsfiddle.net/jbonnier/Lh4133ah/22/') no-repeat;
          background-size: cover; 
        }
        .grd-container {
          display: grid;
          grid-template-columns: auto max-content auto;
          grid-template-rows: auto max-content auto;
          position: absolute;
          top: 0;
          left: 0;
          bottom: 0;
          right: 0;
          overflow: hidden;
        }
        .grd-item-1,
        .grd-item-2,
        .grd-item-3,
        .grd-item-4,
        .grd-item-6,
        .grd-item-7,
        .grd-item-8,
        .grd-item-9 {
          background-color: #000000;
        }
        .grd-item-1 {
          grid-column-start: 1;
          grid-column-end: 2;
          grid-row-start: 1;
          grid-row-end: 2;
        }
        .grd-item-2 {
          grid-column-start: 2;
          grid-column-end: 3;
          grid-row-start: 1;
          grid-row-end: 2;
        }
        .grd-item-3 {
          grid-column-start: 3;
          grid-column-end: 4;
          grid-row-start: 1;
          grid-row-end: 2;
        }
        .grd-item-4 {
          grid-column-start: 1;
          grid-column-end: 2;
          grid-row-start: 2;
          grid-row-end: 3;
        }
        .grd-item-5 {
          /* main */
          grid-column-start: 2;
          grid-column-end: 3;
          grid-row-start: 2;
          grid-row-end: 3;
        }
        .grd-item-6 {
          grid-column-start: 3;
          grid-column-end: 4;
          grid-row-start: 2;
          grid-row-end: 3;
        }
        .grd-item-7 {
          grid-column-start: 1;
          grid-column-end: 2;
          grid-row-start: 3;
          grid-row-end: 4;
        }
        .grd-item-8 {
          grid-column-start: 2;
          grid-column-end: 3;
          grid-row-start: 3;
          grid-row-end: 4;
        }
        .grd-item-9 {
          grid-column-start: 3;
          grid-column-end: 4;
          grid-row-start: 3;
          grid-row-end: 4;
        }
        .grd-bg {
          z-index: -1;
          grid-column-start: 1;
          grid-column-end: 4;
          grid-row-start: 1;
          grid-row-end: 4;
        }
    </style>
</head>

<title>Title</title>

<body>
    <div class="grd-container">
        <div class="grd-bg">
            <video playsinline autoplay muted loop poster="http://via.placeholder.com/1600x900" id="bgvid">
                <source src="http://f.jblab.info/so_49420556/videobg.mp4" type="video/mp4">
            </video>
        </div>
        <div class="grd-item-1"></div>
        <div class="grd-item-2"></div>
        <div class="grd-item-3"></div>
        <div class="grd-item-4"></div>
        <div class="grd-item-5">
            <img src="http://f.jblab.info/so_49420556/mask.svg" class="cover-img">
        </div>
        <div class="grd-item-6"></div>
        <div class="grd-item-7"></div>
        <div class="grd-item-8"></div>
        <div class="grd-item-9"></div>
    </div>

    <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script> 
    <script>
        $(window).ready(function() { resizeCoverImages(); })
        $(window).resize(function() { resizeCoverImages(); });
        function resizeCoverImages() {
          $('.cover-img').each(function() {
            var dimensions = calculateAspectRatioFit($(this).width(), $(this).height(), $(window).width(), $(window).height());
            $(this).width(dimensions.width);
            $(this).height(dimensions.height);
          });
        }
        function calculateAspectRatioFit(srcWidth, srcHeight, maxWidth, maxHeight) {
          var ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight);
          return { width: srcWidth*ratio, height: srcHeight*ratio };
        }
    </script>
</body>
</html>

https://jsfiddle.net/jbonnier/Lh4133ah/26/

答案 1 :(得分:-1)

最简单的方法是为图片添加边框。像

这样的东西
.classOfYourImage {
border: 25px solid red;
}

请务必在此之后调整宽度。