Как я могу динамически изменить макет таблицы html (количество элементов в строке) при изменении window.innerwidth? - PullRequest
0 голосов
/ 01 июля 2019

У меня есть несколько ссылок, которые я хочу отобразить в табличном формате. Я написал несколько JavaScript, чтобы иметь хорошее количество ссылок в каждой строке, в зависимости от ширины окна. Это хорошо работает, когда страница загружена, но если ширина настраивается после загрузки страницы, она не будет корректировать макет для новой ширины. Как я могу настроить таблицу заново, если страница изменит ширину?

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

В коде вы увидите, что я пытался просто обновить страницу, если ширина меняется, но, похоже, это не работает. OnResize = "window.location.reload ()"

    <html>
    
    <head>
    <title>Home</title>
    <style>
    table {
    	margin: auto;
    	table-layout: fixed;
        width: 100%;
    	margin-left: 0%;
    	text-align:center;
    }
    
    
    
    td {
    	vertical-align: top;
    }
    
    .thumbImg {
    	margin: auto;
    	width:100%;
    	width: 140px;
    	height: 140px;
    	background-position: center center;
    	background-repeat: no repeat;
    	background-size: cover;
    }
    
    .descript {
    	font-size: 20px;
    	font-weight: bold;
    }
    </style>
    </head>
    
    
    
    <body onResize="window.location.reload()">
    
    <div>
    
    <script>
    var i = 0 ;
    var vwidth = window.innerWidth;
    var resultsPerRow = Math.floor(vwidth / 170);
    </script>
    
    <br/>
    <table>
    <tr>
    
    <td><a href="Homepage_content/101.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">101</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) { 
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/102.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">102</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) { 
    document.write("</tr><td><br></td><tr>");
    }
    </script>

    <td><a href="Homepage_content/103.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">103</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) {
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/104.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">104</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) { 
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    
    <td><a href="Homepage_content/201.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">201</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) { 
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/202.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">202</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) { 
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/203.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">203</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) { 
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/204.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">204</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) { 
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/301.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">301</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) { 
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/302.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">302</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) {  
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/303.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">303</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) {
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/304.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">304</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) {  
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/401.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">401</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) { 
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/402.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">402</span>
    <br>
    </a>
    </td>
    
    <script>
    i++;
    if (i % resultsPerRow == 0) {  
    document.write("</tr><td><br></td><tr>");
    }
    </script>
    
    <td><a href="Homepage_content/403.html"><div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
    </div>
    <br>
    <span class="descript">403</span>
    <br>
    </a>
    </td>
    
    
    </tr>
    </table>
    
    
    </div>
    </body>
    </html>

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Избавьте себя от множества неприятностей и используйте для этого существующие методы CSS.

Я просто удалил таблицу и сделал каждую клетку <div>.Также я дал включающий <div> класс row со свойством css flexbox display: flex;.В сочетании с flex-flow: row wrap; это делает именно то, что вы хотите.

Обратитесь к этому сайту за полным руководством по flexbox: https://css -tricks.com / snippets / css / a-guide-to-flexbox /

ЭтоКод является лишь подтверждением концепции, возможно, вам придется исправить некоторые из макета.

<html>

<head>
  <title>Home</title>
  <style>
    .thumbImg {
      margin: auto;
      width: 100%;
      width: 140px;
      height: 140px;
      background-position: center center;
      background-repeat: no repeat;
      background-size: cover;
    }
    
    .descript {
      font-size: 20px;
      font-weight: bold;
    }
    
    .row {
      display: flex;
      flex-flow: row wrap;
    }
  </style>
</head>



<body>

  <div class="row">

    <div>
      <a href="Homepage_content/101.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">101</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/102.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">102</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/103.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">103</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/104.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">104</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/101.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">101</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/102.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">102</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/103.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">103</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/104.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">104</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/101.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">101</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/102.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">102</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/103.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">103</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/104.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">104</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/101.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">101</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/102.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">102</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/103.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">103</span>
        <br>
      </a>
    </div>

    <div>
      <a href="Homepage_content/104.html">
        <div class="thumbImg" style="background-image: url(https://images.vexels.com/media/users/3/140043/isolated/preview/0fe76858c0dd549590adafa901657c1b-delicious-metallic-button-by-vexels.png);">
        </div>
        <br>
        <span class="descript">104</span>
        <br>
      </a>
    </div>

  </div>
</body>

</html>
0 голосов
/ 03 июля 2019

Спасибо @theblackips за ваш вклад - это очень полезный метод. Я закончил с подходом jquery, чтобы получить макет, который я хотел. Я использовал jquery.load, чтобы вставить содержимое внешнего файла в тег таблицы. Каждый внешний файл имеет правильную компоновку с учетом ширины окна.

<html>

<head>
<title>Home</title>
<script type="text/javascript" src="Homepage_content/jquery.min.js"></script>
<style>
table {
    margin: auto;
    table-layout: fixed;
    width: 100%;
    margin-left: 0%;
    text-align:center;
}



td {
    vertical-align: top;
}

.thumbImg {
    margin: auto;
    width:100%;
    width: 140px;
    height: 140px;
    background-position: center center;
    background-repeat: no repeat;
    background-size: cover;
}

.descript {
    font-size: 20px;
    font-weight: bold;
}
</style>

<script>
function Reloader() {
    var vwidth = window.innerWidth;
    if (vwidth <= 340){
        $('#links').load('Homepage_content/table1.html');
    }
    else if (vwidth <= 510){
        $('#links').load('Homepage_content/table2.html');
    }
    else if (vwidth <= 680){
        $('#links').load('Homepage_content/table3.html');
    }
    else if (vwidth <= 850){
        $('#links').load('Homepage_content/table4.html');
    }
    else if (vwidth > 1020){
        $('#links').load('Homepage_content/table5.html');
    }
}
</script>
</head>

<body onLoad="Reloader()" onResize="Reloader()">
<img src="Homepage_content/bbg.jpg" id="fauxbg"/>
<div>
<br/>
<table id="links">
</table>


</div>
</body>
</html>
...