即使为空也显示div

时间:2018-12-13 13:20:07

标签: html css vue.js

我使用Vuejs并具有一个带有div容器的组件,如果该容器为空,则该组件会折叠。

<template>
  <div>{{ content }}</div>
</template>

<script>
export default {
  name: "myComponent",
  props: {
    content: String
  }
};
</script>

使用该成分时,我可以寻求

<MyComponent content="text to show" />

但是如果我希望它为空怎么办?然后,div不占用空间并崩溃。我想阻止它。

<!-- This one takes no space -->
<div></div>
<div>This one takes space</div>

我考虑过要传递unicode

https://www.compart.com/de/unicode/U+2800

div {
  background: red;
  margin: 20px;
}
<div>&#10240;</div>
<div>This one takes space</div>

但是当接收字符串作为参数时,该组件不会将其转换为Unicode字符。

有没有使用CSS而不是Unicode字符的解决方案?

我创建了一个小例子来说明当前问题

https://codesandbox.io/s/o5l1kl290y

4 个答案:

答案 0 :(得分:5)

您可以为U+00A0 div添加一个不间断空格(Unicode符号:empty)作为伪元素的内容

div:empty::before {
  content: "\A0";
}

或者您可以将特定的height直接设置为div:empty

  

Codepen demo

答案 1 :(得分:2)

您可以使用after伪元素添加一个空格(然后它将占用字体的高度)

div {
  background: red;
  margin: 20px;
}

div:after {
  content:' ';
  display:inline-block;
}
<div></div>
<div>This one takes space</div>

或者,如果您希望vue组件显示html,则可以使用

<div v-html="content"></div>

代替您的

<div>{{ content }}</div>

Updated Sandbox

答案 2 :(得分:0)

对vue不太熟悉,但是也许吗?

{{ content }}可能是{{ content || "&nbsp;&nbsp;" }}

答案 3 :(得分:0)

您可以将最小高度设置为50px(或更小)

div {
  background: red;
  margin: 20px;

  min-height: 50px;
}