Vanilla js bootstrap 布局问题

Vanilla js bootstrap layout issue

提问人:Himansu Kumar Nayak 提问时间:11/16/2023 最后编辑:Mr. PolywhirlHimansu Kumar Nayak 更新时间:11/16/2023 访问量:39

问:

我正在尝试从Pixabay api获取图像数据,我想显示编辑选择的图像。 问题出在布局上。我试图在每行中显示 3 或 4 张图像,但布局正在崩溃。我不想在响应能力上妥协。请帮帮我。

let editorChoice = document.querySelector('.editorchoice')
async function getImg() {
  let imgData = await fetch('https://pixabay.com/api/?key=12334&editors_choice')
  let imgRaw = await imgData.json()
  console.log(imgRaw)
  let itemData = imgRaw.hits
  itemData.map((item) => {
    let imgId = item.id
    let imgType = item.type
    let imgPreview = item.previewURL
    let imgTag = item.tags
    editorChoice.innerHTML += `<div class="col-lg-4 card">
    <img src="${imgPreview}" class="img-responsive center-block" alt="${imgTag}"
    </div>
    <p class="text-center">${imgTag}</p>`
  })
}
getImg()
<link href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet"/>
<div class="container-fluid bg-3 text-center">
  <h3>Editor's Choice</h3><br>
  <div class="editorchoice"></div>
</div>

javascript 推特引导 特引导 twitter-bootstrap-3

评论

0赞 Krokodil 11/16/2023
它究竟是如何分解的?
1赞 Himansu Kumar Nayak 11/16/2023
理想情况下,每行应显示 3 列。问题是在前 3 列之后,在第二行中,列没有正确对齐。事实上,<div class=“row”>甚至没有在每一行中动态添加。我尝试添加 html 和模板文字。但没有任何效果。
0赞 isherwood 11/24/2023
为什么您的“Bootstrap”演示包含 Tailwind 资产?

答:

0赞 aarvinr 11/16/2023 #1

首先,您当前使用的是 Tailwind CSS,而不是 Bootstrap。确保使用最新版本的 Tailwind,将 替换为:<link />

<script src="https://cdn.tailwindcss.com"></script>

接下来,要将它们显示在网格中,请使用 Tailwind 中内置的 和 类:.grid.grid-cols

<div id="editorChoice" class="grid grid-cols-4">
  <!-- Images go in here -->
</div>

要添加图像本身,而不是使用 ,理想情况下应该使用 document.createElement() document.appendChild():.innerHTML

async function fetchImage() {
  let img = await fetch(
    "https://pixabay.com/api/?key=12334&editors_choice",
  ).json().hits;

  img.map((item) => {
    let container = document.createElement("div");
  
    let element = document.createElement("img");
    element.src = item.previewURL;
    element.alt = item.tags;

    container.appendChild(element);

    let label = document.createElement("p");
    let labelText = document.createTextNode(item.tags);
    label.appendChild(labelText);    
    
    container.appendChild(label);
    
    document.getElementById("editorChoice").appendChild(container)
  });
}

fetchImage();

在这里,我们将遍历返回的结果并创建各种元素,使它们全部显示在 4 列网格中。

下面是一个使用 Lorem Picsum 而不是 Pixabay 的可运行代码片段:

async function fetchImage() {
  let img = [
    {
      previewURL: `https://picsum.photos/1920/1080?random=1`,
      tags: "A Picture",
    },
    {
      previewURL: `https://picsum.photos/1920/1080?random=2`,
      tags: "A Picture",
    },
    {
      previewURL: `https://picsum.photos/1920/1080?random=3`,
      tags: "A Picture",
    },
    {
      previewURL: `https://picsum.photos/1920/1080?random=4`,
      tags: "A Picture",
    },
    {
      previewURL: `https://picsum.photos/1920/1080?random=5`,
      tags: "A Picture",
    },
    {
      previewURL: `https://picsum.photos/1920/1080?random=6`,
      tags: "A Picture",
    },
  ];

  img.map((item) => {
    let container = document.createElement("div");

    let element = document.createElement("img");
    element.src = item.previewURL;
    element.alt = item.tags;

    container.appendChild(element);

    let label = document.createElement("p");
    let labelText = document.createTextNode(item.tags);
    label.appendChild(labelText);

    container.appendChild(label);

    document.getElementById("editorChoice").appendChild(container);
  });
}

fetchImage();
<script src="https://cdn.tailwindcss.com"></script>
<h3>Editor's Choice</h3>
<div id="editorChoice" class="grid grid-cols-4">
  <!-- Images go in here -->
</div>