CSS可扩展拼图超过图像



我一直在尝试完成一些事情。我需要的是一个Square Div 1000x1000px),当浏览器缩放,保持正方形并将其缩放的内容缩放时,它会缩放。Div具有不应重复的背景图像,而4个Divs则带有" uzzlerow"类,每个div s ofzlelow''upepiece'''

每个拼图都包含一个用于单击的SVG。以及旨在溢出的拼图图像,以便它们可以连接。这是我的html ....

<body>
        <div id="contentContainer"></div>
        <div id="column">
            <div id="container">
                <div class="puzzleRow">
                    <div class="puzzPiece">
                        <img src="topLeft.png"></img>
                        <div class="clickArea" linkto="puzzle01.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="topA.png"></img>
                        <div class="clickArea" linkto="puzzle02.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="topB.png"></img>
                        <div class="clickArea" linkto="puzzle03.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="topRight.png"></img>
                        <div class="clickArea" linkto="puzzle04.html"></div>
                    </div>
                </div>
                <div class="puzzleRow">
                    <div class="puzzPiece">
                        <img src="leftA.png"></img>
                        <div class="clickArea" linkto="puzzle05.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="midA.png"></img>
                        <div class="clickArea" linkto="puzzle06.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="midB.png"></img>
                        <div class="clickArea" linkto="puzzle07.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="rightA.png"></img>
                        <div class="clickArea" linkto="puzzle08.html"></div>
                    </div>
                </div>
                <div class="puzzleRow">
                    <div class="puzzPiece">
                        <img src="leftB.png"></img>
                        <div class="clickArea" linkto="puzzle09.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="midB.png"></img>
                        <div class="clickArea" linkto="puzzle10.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="midA.png"></img>
                        <div class="clickArea" linkto="puzzle11.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="rightB.png"></img>
                        <div class="clickArea" linkto="puzzle12.html"></div>
                    </div>
                </div>
                <div class="puzzleRow">
                    <div class="puzzPiece">
                        <img src="btmLeft.png"></img>
                        <div class="clickArea" linkto="puzzle13.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="btmA.png"></img>
                        <div class="clickArea" linkto="puzzle14.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="btmB.png"></img>
                        <div class="clickArea" linkto="puzzle15.html"></div>
                    </div>
                    <div class="puzzPiece">
                        <img src="btmRight.png"></img>
                        <div class="clickArea" linkto="puzzle16.html"></div>
                    </div>
                </div>
            </div>
        </div>
    </body>

就CSS而言,我有...

#column{
    max-width:1000px;
    max-height:1000px;
}
#container{
    width:100%;
    height:auto;
    background-image: url('bck.png');
    background-size: contain;
    background-repeat: no-repeat;
}
.puzzleRow {
    display: inline-block;
    width: 100%;
    height: 250px;
    text-align: center;
    vertical-align: middle;
}

.puzzPiece {
    position: relative;
    float: left;
    width: 25%;
    height: 25%;
    overflow: visible;
}

这几乎是完美的,除非我将拼图的250px高度更改为25%,那么就不会有任何尺寸的东西,而且所有这些都会降低到一个没有可见内容的小正方形。我想不出一种使它完全动态的方法,没有某些元素具有定义的大小。

很抱歉问一个广泛的问题,但我无法将其缩小到更具体的内容,所以我想知道是否有人对如何实现这一目标有更好的想法。本质上,我只需要一个带有拼图片的图像,可以隐藏以揭示图像。

我尝试了一段时间来修复您的内容,最终不得不编写JavaScript来处理"正方形"板尺寸。一旦我这样做,我最终意识到,整个过程更容易在JavaScript中写下16个拼图和16个点击区域的绝对位置Divs。结果,我最终得到了:

<head>
<style>
#container{
  background-image: url('http://www.mpaquette.com/wp-content/uploads/2017/03/bck.png');
  background-size: contain;
  background-repeat: no-repeat;
  position: relative;
  overflow:hidden;
}
.piece {
  position:absolute;
}
</style>
</head>
<body>
  <div id="container">
  </div>
</body>
<script>
var image_urls = [
"http://www.mpaquette.com/wp-content/uploads/2017/03/topLeft.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/topA.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/topB.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/topRight.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/leftA.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/midA.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/midB.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/rightA.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/leftB.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/midB.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/midA.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/rightB.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/btmLeft.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/btmA.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/btmB.png",
"http://www.mpaquette.com/wp-content/uploads/2017/03/btmRight.png" ];
function handleClick(element) {
  console.log(element.id);
  var image = document.getElementById("puzzle" + element.id);
  image.style.display = "none";
  // do any other click handling here
}
function build() {
  var div = document.getElementById("container");
  for(var i=0;i<16;i++) {
    var image = document.createElement("img");
    image.id = "puzzle" + i;
    image.className = "piece";
    image.src = image_urls[i];
    div.appendChild(image);
    var clickdiv = document.createElement("clickdiv");
    clickdiv.id = i;
    clickdiv.onclick = function() { handleClick(this); }
    clickdiv.className = "piece";
    div.appendChild(clickdiv);
  }
}
function resize() {
  var el = document.getElementById("container");
  var w = window.innerWidth;
  var h = window.innerHeight;
  var square;
  var size;
  console.log("("+w+","+h+")");
  if(w>h) size = h;
  else size = w;
  square = size + "px";
  el.style.minWidth = square;
  el.style.minHeight = square;
  el.style.maxWidth = square;
  el.style.maxHeight = square;
  var piece_size = (size/4) * 1.6;
  for(var i=0;i<4;i++) {
    var y = i*(size/4) + size/8;
    for(var j=0;j<4;j++) {
      var x = j*(size/4) + size/8;
      var clickdiv = document.getElementById((i*4+j));
      clickdiv.style.left = (x - size/8) + "px";
      clickdiv.style.top = (y - size/8) + "px";
      clickdiv.style.width = (size/4) + "px";
      clickdiv.style.height = (size/4) + "px";
      var image = document.getElementById("puzzle" + (i*4+j));
      image.style.left = (x - piece_size / 2) + "px";
      image.style.top = (y - piece_size / 2) + "px";
      image.style.width = piece_size + "px";
    }
  }
}
window.onresize = function(e) { resize(); }
window.onload = function(e) { build(); resize(); } 
</script>
</body>

您可以在这里尝试:https://jsfiddle.net/francismacdougall/5v3clh15/

请注意,JSFIDDLE仅调用Resize()一次 - 每当浏览器调整上述代码中的大小时,您都需要调用它。编辑::刚修改了JSFIDDLE以包括连续调整。...

最新更新