我一直在为我的网站设计一个模式窗口。我无法让 ajax 以我想要的方式工作,所以我这样创建它:
模态窗口和背景只是我在页面加载时隐藏的 asp 面板控件(执行此操作的代码,我同意是 arb,但我还没有设法改进它)
以下是模态的 html(预渲染):
<asp:Panel runat="server" ID="pnlModalbg" CssClass="modalbg"> </asp:Panel>
<asp:Panel runat="server" ID="pnlModal" CssClass="modal">
<!-- Modal content goes here -->
<p>Lorem ipsum dolor sit amet...</p>
<!-- End Modal content -->
<!-- Close button -->
<div class="centeralign"><asp:Button runat="server" ID="btnCloseModal" Text="Close" CssClass="button" /></div>
<!-- End close button -->
</asp:Panel>
非常简单。现在这是我用来显示/隐藏它的代码。上面的面板应在页面加载时隐藏,然后应显示在 GridView.RowCommand 事件上。这很好用,但我怀疑这是最好的方法:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
pnlModal.Style(HtmlTextWriterStyle.Display) = "none"
pnlModalbg.Style(HtmlTextWriterStyle.Display) = "none"
End If
End Sub
Protected Sub gvAppointments_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvAppointments.RowCommand
If e.CommandName = "ViewAppt" Then
lblAppointmentId.Text = e.CommandArgument
GetDetails()
pnlModal.Style(HtmlTextWriterStyle.Display) = "block"
pnlModalbg.Style(HtmlTextWriterStyle.Display) = "block"
End If
End Sub
Protected Sub btnCloseModal_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCloseModal.Click
pnlModalbg.Style(HtmlTextWriterStyle.Display) = "none"
pnlModal.Style(HtmlTextWriterStyle.Display) = "none"
End Sub
现在这是真正的问题。的CSS。无论屏幕分辨率如何,这应该将模态窗口定位在距浏览器窗口顶部边缘 150px 和距浏览器窗口边缘左侧 450px 的位置。它没有。我测试过的每个屏幕上的水平定位都是不同的。
理想情况下,我想在类中使用边距(最好margin: 150px auto;
是 ).modal
进行定位,但如果没有绝对定位,它总是与页面内容的其余部分一起显示。此外,.modalbg
面板出现在模式窗口本身的上方。应用.modal {z-index: 9999;}
和.modalbg {z-index: -1;}
帮助,但是 modalbg 似乎仍然位于页面上的其他元素之后,并且更改它们的 z-index 值并不能纠正这一点。
.modal
{
border: 2px solid #014073;
border-radius: 5px;
left: 450px;
top: 150px;
display: none;
position: absolute;
background: #fff;
padding: 10px;
}
.modalbg
{
height: 100%;
width: 100%;
position: absolute;
top: 0;
left: 0;
background: #000;
-moz-opacity:.30;
filter:alpha(opacity=30);
opacity:.30;
display: none;
}
我不介意必须更改服务器代码中的显示 css,但是对于 css 问题的任何帮助将不胜感激!