隐藏CSS元素而不更改显示属性

时间:2018-04-26 21:28:29

标签: javascript jquery html css

我想保留一个元素,保留初始显示,但隐藏(首先)。我知道还有其他方法可以使用CSS隐藏元素,但是我也不希望元素首先占用空间。作为一个例子

.target_element {
    display: table;
}

// event happens later...
$('.loader').hide()
$('.target_element').show()

有没有办法实现这个目标?我不想将显示设置为“没有”'然后回来把它设置为表#39;在某些JS中我想展示它。

6 个答案:

答案 0 :(得分:2)

有几种方法。你可以制作元素position: absoluteposition: fixed,这样它就不会占用任何空间,然后使用visibility: hiddenopacity: 0等任何一个,等等。 #39;需要注意的是,如果他们没有display: none,他们仍然可以收到点击事件,因此请pointer-events: none停止点击事件。

我的首选组合:

#myElement {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

然后当你想要展示它时:

$("#myElement").css({
  'position': 'static',
  'opacity': 1,
  'pointer-events': 'all'
})

此处的奖励是您可以转换不透明度,而不是visibilitydisplay

答案 1 :(得分:1)

display:none;绝对是要走的路,除非我误解了你的问题。如果您的问题是.show()将其切换为display:block;,那么只需使用jQuery将类添加到元素中。

setTimeout(function() {
  $('table').addClass('visible');
}, 2000);
table {
  display:none;
}
  table.visible {
    display:table;
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr><td>Test</td><td>Test</td></tr>
  <tr><td>Test</td><td>Test</td></tr>
  <tr><td>Test</td><td>Test</td></tr>
  <tr><td>Test</td><td>Test</td></tr>
</table>

答案 2 :(得分:0)

您想隐藏元素多长时间?

有多种方法可以执行此操作,您可以在浏览器中设置cookie,也可以使用Javascript函数(如 setTimeout )在固定的时间段后显示元素。

setTimeout( function() {
   $("#your_element").show();
   }, 5000); // Time in milliseconds

答案 3 :(得分:0)

使用包装器隐藏和显示您的表格。

<强> HTML

<div class="target_wrapper">
  <div class="target_element"></div>
</div>

<强> CSS

.target_element {
    display: table;
}


.target_wrapper {
    display: none;
}

<强> JS

$('.target_wrapper').show()

<强>解释

.show()设置display: block;。要避免对表的属性进行查询,请使用不依赖于该属性的包装器。只要您触发$('.target_wrapper').show()并正确显示您的表格,就会立即显示它。

答案 4 :(得分:0)

听起来最简单的解决方案是使用隐藏可见性

.target_element {
    visibility: hidden;
}

根据评论,您似乎不希望影响整体布局,因此这会使项目“隐身”,但仍然会占用。

答案 5 :(得分:0)

#include <iostream>

template <typename...>
struct lambda_overload;

template <typename L>
struct lambda_overload<L> : public L
 {
   lambda_overload (L l) : L{std::move(l)}
    { };

   using L::operator();
 };

template <typename L0, typename ... Ls>
struct lambda_overload<L0, Ls...> : public L0, public lambda_overload<Ls...>
 {
   lambda_overload (L0 l0, Ls ... ls)
      : L0{std::move(l0)}, lambda_overload<Ls...>{std::move(ls)...}
    { };

   // backup version (ever defined!)
   template <typename ... As>
   auto func (long, As && ... as)
    { return lambda_overload<Ls...>::operator()(std::forward<As>(as)...); }

   // preferred version (defined only if operator() defined for L0 type)
   template <typename ... As>
   auto func (int, As && ... as)
      -> decltype( std::declval<L0>()(std::forward<As>(as)...) )
    { return L0::operator()(std::forward<As>(as)...); }

   template <typename ... As>
   auto operator() (As && ... as)
    { return func(0, std::forward<As>(as)...); }
 };

template <typename ... Ls>
auto make_lambda_overload (Ls && ... ls)
 { return lambda_overload<Ls...>{ std::forward<Ls>(ls)... }; }

int main()
 {
   auto l1 = [&](auto const & t) -> decltype((void)t.size())
    { std::cout << "-- with size() version - " << t.size() << std::endl; };

   auto l2 = [&](auto const & t)
    { std::cout << "-- generic version (also no size())" << std::endl; };

   auto lo = make_lambda_overload(std::move(l1), std::move(l2));

   lo(std::string{"0"});  // print "with size() version - 1
   lo(1);                 // print "generic version (also no size()="
 }

这个怎么样?