Html 疯狂艰难的CSS困境

Html 疯狂艰难的CSS困境,html,ruby-on-rails,css,ruby,ajax,Html,Ruby On Rails,Css,Ruby,Ajax,我一直在努力使添加到我的应用程序布局中的此flash消息中的样式按预期工作: <div id= "notice"><% flash.each do |key, value| %> <%= value %> <% end %></div> 现在的问题是flash消息是用ajax呈现的,因此样式应该只在flash消息出现时出现。然而,情况并非如此。即使没有flash消息,也会出现一个绿色div,这看起来相当尴尬 现在我试过这样的方法

我一直在努力使添加到我的应用程序布局中的此flash消息中的样式按预期工作:

<div id= "notice"><% flash.each do |key, value| %>
   <%= value %>
<% end %></div>
现在的问题是flash消息是用ajax呈现的,因此样式应该只在flash消息出现时出现。然而,情况并非如此。即使没有flash消息,也会出现一个绿色div,这看起来相当尴尬

现在我试过这样的方法:

<div id= "notice"><% flash.each do |key, value| %>
  <div class="<%= key %>"><%= value %></div>
<% end %></div>

其中,我使用
类进行样式设置。我将
放在ajax渲染的外部,因为它似乎没有拾取ruby块中的div。但是,CSS样式不会使用
类呈现。所以我似乎被两个糟糕的选择所困扰:

  • 在我的应用程序中始终有一个笨拙的绿色div,只有在呈现或删除flash消息时才会显示
  • 没有笨拙的绿色div,但是没有flash消息的样式,所以它看起来就像一些笨拙的文本

  • 有什么办法可以让我两全其美吗?

    是的。当ajax请求传入时,您可以使用javascript应用这些样式,或者将请求的内容包装在一个容器中,该容器具有其特有的样式,而该样式在原始页面上不存在


    基本上,隐藏“绿框”直到它被填充,或者用ajax发送“绿框”。

    是。当ajax请求传入时,您可以使用javascript应用这些样式,或者将请求的内容包装在一个容器中,该容器具有其特有的样式,而该样式在原始页面上不存在


    基本上,隐藏“绿框”直到它被填充,或者将“绿框”与ajax一起发送。

    您能分享生成这个的ajax吗

    在您的情况下,我会尝试使用jQuery的方法在触发flash消息时将flash DIV添加到页面顶部,然后在某个计时器后将其删除

    --编辑--

    这里有一个“例如”的例子:

    假设您的ajax调用正在点击FoosController更新,并且是从ShowAction发送的

    在show view中,我会有如下内容:

    <div class="notices"></div>
    
    在jQuery+ERB中,我将在
    views/foos/

    $('div.notices').append('<%= render 'shared/flash' %>');
    
    这将使任何div.flash在5秒后淡出并消失。或者,您可以使用jQuery click()方法使其在单击后消失

    我希望这有帮助

    --重新编辑--

    根据,要使用RJS执行此操作:

    在您的视图中,创建:

    <div id="notices"></div>
    

    将您的flash消息放在一个部分中仍然是一个好主意。请确保按照第一次编辑中所述,将flash消息放入
    div.flash
    ,然后您就可以开始了。

    您可以共享生成此消息的AJAX吗

    在您的情况下,我会尝试使用jQuery的方法在触发flash消息时将flash DIV添加到页面顶部,然后在某个计时器后将其删除

    --编辑--

    这里有一个“例如”的例子:

    假设您的ajax调用正在点击FoosController更新,并且是从ShowAction发送的

    在show view中,我会有如下内容:

    <div class="notices"></div>
    
    在jQuery+ERB中,我将在
    views/foos/

    $('div.notices').append('<%= render 'shared/flash' %>');
    
    这将使任何div.flash在5秒后淡出并消失。或者,您可以使用jQuery click()方法使其在单击后消失

    我希望这有帮助

    --重新编辑--

    根据,要使用RJS执行此操作:

    在您的视图中,创建:

    <div id="notices"></div>
    

    将您的flash消息放在一个部分中仍然是一个好主意。确保按照第一次编辑中所述,将flash消息放入
    div.flash
    ,您就可以开始了。

    我将设置
    显示:无
    用于
    #注意
    框,并将其保存在jQuery代码中

    $('#notice').css('display','block')


    您可以在填写代码之后和执行fadeIn之前立即执行此操作,确保使用回调,这样不会到处跳转。

    我会设置
    显示:无
    用于
    #注意
    框,并将其保存在jQuery代码中

    $('#notice').css('display','block')


    您可以在填写代码后立即使用该文件,在执行fadeIn之前,确保使用回调,这样事情就不会到处乱跳。

    这是一个.rjs文件:
    page.replace\u html:notice,flash[:success]
    您能提供一个示例来说明您的确切意思吗?啊。。。不幸的是,我对RJS一无所知。是否有一种RJS方法可以将内容插入到特定的DOM元素中,而不是替换它?如果是这样的话,你可以插入你想要的div并在一段时间后删除它,这将解决你的问题。啊,谢谢你的编辑很有帮助。所以我将CSS样式应用到flash类中,对吗?好吧,也许打开一个新问题会很好。另外,这是一种阅读rails入门书可能会有很大帮助的东西--可能有一些基本的东西你不熟悉,但你不知道你没有意识到,所以我猜不出那是什么,你也不知道那是什么,所以没有办法告诉你:)为flash消息问题打开一个新问题,这样人们就可以在答案中发布代码而不是评论。它是一个.rjs文件:
    page.replace\u html:notice,flash[:success]
    你能提供一个你确切意思的例子吗?啊。。。不幸的是,我对RJS一无所知。是否有一种RJS方法可以将内容插入到特定的DOM元素中,而不是替换它?如果是这样的话,你可以插入你想要的div并在一段时间后删除它,这将解决你的问题。啊,谢谢你的编辑很有帮助。所以我将CSS样式应用到flash类中,对吗?好吧,也许打开一个新问题会很好。而且,这是一种
    page.insert_html :bottom, :partial=>'shared/flash'