javascript - 内联 block 网格系统 - CSS 不适用于动态创建的元素

标签 javascript html css

我有一个内联 block 网格系统,我想做一些事情,比如添加重新排序元素并将其添加回网格。 js部分没问题,但是当元素添加回来时,它不会应用css。我做了一个简单的案例来告诉你错误

打开链接并尝试点击显示错误按钮你会看到元素乱七八糟

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>
<body>
<style>
#grid{
  text-align: justify;
  font-size: 0.1px;
}

#grid .item{
  display: inline-block;
  background: #eee;
  width: 23%;
  height: 100px;
  margin-bottom: 2.5%;
}

#grid:after{
  content: '';
  display: inline-block;
  width: 100%;
}

#grid .placeholder{
  display: inline-block;
  width: 23%;
}
</style>

<script>
$(function(){
    $('button').click(function(){
        var item = $('#grid').children('.item');
            item.prependTo('#grid');
    });

});
</script>

<div id="grid">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="placeholder"></div>
  <div class="placeholder"></div>
</div>
<button>show the error</button>
</body>
</html>

https://jsfiddle.net/6ap0ksy8/2/

屏幕截图

enter image description here

enter image description here

最佳答案

你有一个空格问题!

当您运行脚本时,它会“刷新”没有空格的 HTML。

您应该删除所有 空格,这样它看起来就像错误的版本。之后,你必须在左边和右边设置一个边距,这样它总是看起来不错。

您的代码(使用 Javascript):

#grid{
  text-align: justify;
  font-size: 0.1px;
}

#grid .item{
  display: inline-block;
  background: #eee;
  width: 23%;
  height: 100px;
  margin-bottom: 2.5%;
}

#grid:after{
  content: '';
  display: inline-block;
  width: 100%;
}

#grid .placeholder{
  display: inline-block;
  width: 23%;
}
<div id="grid">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="placeholder"></div>
  <div class="placeholder"></div>
</div>

没有空格,使用边距 + Javascript:

$(function(){
	$('button').click(function(){
		var item = $('#grid').children('.item');
			item.prependTo('#grid');
	});
	
});
#grid{
  text-align: justify;
  font-size: 0.1px;
}

#grid .item{
  display: inline-block;
  background: #eee;
  width: 23%;
  height: 100px;
  margin-bottom: 2.5%;
  /*added margin*/
  margin-left: 5px;
  margin-right: 5px;
}

#grid:after{
  content: '';
  display: inline-block;
  width: 100%;
}

#grid .placeholder{
  display: inline-block;
  width: 23%;
  /*added margin*/
  margin-left: 5px;
  margin-right: 5px;
}
<div id="grid">
  <div class="item"></div><--
  --><div class="item"></div><--
  --><div class="item"></div><--
  --><div class="item"></div><--
  --><div class="item"></div><--
  --><div class="item"></div><--
  --><div class="placeholder"></div><--
  --><div class="placeholder"></div>
</div>
<button>show the error</button>

显然,最好的解决方案是实际修复您的 CSS 以避免这种丑陋的“hack”。

关于javascript - 内联 block 网格系统 - CSS 不适用于动态创建的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635806/

相关文章:

javascript - 如何使用 css3 rotate 和 setinterval 旋转图像?

css - 设置正文 { 字体大小 : 100% } results in font-size: 12px; and not font-size: 16px; Why?

javascript - 使用 Javascript 将文本 chop 为 2 行

html - 如何在不使用表格、Flexbox 或网格系统的情况下制作网格

html - 下拉菜单位于标签后面

css - 是否可以向 Razor 元素添加类和样式

javascript - Modernizr 位置固定测试未完成

javascript - 将页面的整个 html 内容向下移动?

javascript - Facebook react : Invariant Violation and elements than didn't mount automatically

javascript - Ionic Angular 元素中未加载样式表