1. 程式人生 > >使用css和jquery建立模態彈窗

使用css和jquery建立模態彈窗

今天自己嘗試做了一下模態彈窗的樣式,把程式碼貼在這裡供以後複習。 1、佈局主要使用flex佈局。 2、毛玻璃效果和條紋背景的程式碼參考《css揭祕》。 3、彈窗的樣式參考jquery-ui的彈窗樣式。

一、模態彈窗

1、html部分

<!-- 這是一個普通的按鈕,用來觸發彈窗顯示。 -->
<button id="alert-window" class="btn" type="button">彈窗</button>
<!-- 這是一個普通的文字框,用來驗證模態效果。 -->
<input>
<!-- **************
下面是彈窗的主體程式碼************* --> <!-- dialog-1: 在按鈕觸發時通過id指定觸發哪個彈窗。overlay: 指示遮罩層元素 --> <div id="dialog-1" class="overlay"> <!-- dialog:指示彈窗窗體。 --> <div class="dialog"> <!-- dialog-header:指示彈窗頭部。 --> <div class="dialog-header"> <!-- dialog-
title:指示彈窗標題。 --> <div class="dialog-title">這是彈框標題</div> <!-- dialog-close-icon:指示關閉按鈕樣式。dialog-close:指示關閉彈窗觸發器 --> <div class="dialog-close-icon dialog-close"></div> </div> <!-- dialog-content:指示彈窗內容。 --> <div class="dialog-content"
> 這是彈框內容 </div> <!-- dialog-footer:指示彈窗底部。 --> <div class="dialog-footer"> <!-- btn:指示普通按鈕樣式。dialog-close:指示關閉彈窗觸發器。 --> <button class="btn dialog-close">OK</button> <button class="btn">cancel</button> </div> </div> </div>

2、css部分

	<style type="text/css">
		/* 遮罩層 */
		.overlay {
			position: fixed; /* 將遮罩層鋪滿整個螢幕 */
			top: 0;
			right: 0;
			bottom: 0;
			left: 0;
			background: #abababcc; /* 設定遮罩層背景色為有點透明的淺灰色 */
			display: none; /* 設定遮罩層預設不顯示 */
			justify-content: center; /* 設定彈窗左右居中 */
		}
		/* 彈出窗 */
		.dialog {
			z-index: 1; /* 為彈窗指定更高的z-index,以便繪製在遮罩層的上層 */
			width: 400px; /* 設定彈窗寬度 */
			height: 350px; /* 設定彈窗高度 */
			background: #fff; /* 設定彈窗背景色為白色 */
			align-self: center; /* 設定彈窗上下居中 */
			display: flex; /* 設定彈窗內佈局為flex佈局 */
			flex-direction: column; /* 設定彈窗內flex佈局方向為垂直方向 */
			border-radius: 4px; /* 設定彈窗有4px的圓角 */
		}
		.dialog-header {
			background: #ccc; /* 設定彈窗頭部的背景色為灰色 */
			display: flex; /* 設定彈窗頭部的佈局為flex佈局 */
			margin: .2em; /* 設定彈窗頭部的外邊距 */
			padding: .2em .2em .2em .5em; /* 設定彈窗頭部的內邊距 */
			height: 2.5em; /* 設定彈窗頭部的高度 */
			border-radius: 3px; /* 設定彈窗頭部的圓角 */
			align-items: center; /* 設定彈窗頭部的內容上下居中 */
		}
		.dialog-header .dialog-title {
			flex-grow: 1; /* 設定彈窗頭部的標題部分充滿剩餘空間 */
		}
		.dialog-header .dialog-close-icon {
			background: #e6e6e6; /* 設定彈窗頭部的關閉按鈕背景色 */
			padding: .1em .35em; /* 設定彈窗頭部的關閉按鈕內邊距 */
			margin-right: .2em; /* 設定彈窗頭部的外邊距 */
			cursor: pointer; /* 設定彈窗頭部的關閉按鈕的滑鼠樣式 */
			border-radius: 3px; /* 設定彈窗頭部的關閉按鈕的圓角 */
		}
		.dialog-header .dialog-close-icon:hover {
			background: #666; /* 設定彈窗頭部的關閉按鈕滑鼠懸浮背景色 */
		}
		.dialog-header .dialog-close-icon:after { /* 設定彈窗頭部的關閉按鈕的內容(x) */
			content: "\d7";
			font-size: 1.2em;
			color: #666;
		}
		.dialog-header .dialog-close-icon:hover:after {
			color: #fff;
		}
		.dialog-content {
			flex-grow: 1; /* 設定彈窗內容部分充滿剩餘空間 */
			margin: 0 .2em; /* 設定彈窗內容部分的外邊距 */
		}
		.dialog-footer {
			border-style: solid; /* 設定彈窗底部的邊框樣式為實線 */
			border-width: 1px 0 0; /* 設定彈窗底部只有上邊框 */
			padding: .5em; /* 設定彈窗底部的內邊距 */
			margin: 0 .2em; /* 設定彈窗底部的外邊距 */
			display: flex; /* 設定彈窗底部的佈局為flex佈局 */
			justify-content: flex-end; /* 設定彈窗底部的內容右對齊 */
		}
		.dialog-footer .btn{ /* 設定彈窗底部的按鈕樣式 */
			font-size: medium;
			width: 5em;
			margin: .2em .5em;
			padding: .5em;
		}
		.btn { /* 設定按鈕樣式 */
			border: 0;
			border-radius: 3px;
			padding: 1em;
			font-size: large;
			background: #ccc;
			width: 8em;
		}
		.btn:hover { /* 設定按鈕的懸浮樣式 */
			background: #666;
			color: #fff;
			cursor: pointer;
		}
	</style>

3、js部分

下面是需要在初始時新增的js程式碼:

  <script type="text/javascript">
    // 彈出彈窗的方法,引數為class為overlay的元素id。
  	function openDialog(dialogId){
  	    //設定遮罩層為flex佈局,顯示遮罩層和彈窗。
  		$("#"+dialogId+"").css("display", "flex"); 
  	}
  	// 關閉彈窗的事件處理。為想要關閉彈窗的按鈕新增'dialog'類即可。
  	$(".dialog-close").click(function(){
  		//找到當前關閉彈窗按鈕所在的遮罩層,並隱藏。
  		$(this).parents(".overlay").hide(); 
  	});
  </script>

下面是需要在指定彈窗按鈕時新增的js程式碼:

  <script type="text/javascript">
    // alert-window:點選後顯示彈框的元素id。
    // dialog-1:彈框遮罩層元素的id。
  	$("#alert-window").click(function(){
  		openDialog("dialog-1");
  	});
  </script>

4、最終效果:

Alt

二、毛玻璃背景效果

1、html部分

  /* 注意要使用dialog-background元素把除了彈框部分的內容包裹起來。 */
  <div class="dialog-background">
  	<button id="alert-window" class="btn" type="button">彈窗</button>
  	<input>
  	/* 引入色彩豐富的圖片來展示毛玻璃效果。 */
  	<img src="./bg.PNG">
  </div>
  
  	<div id="dialog-1" class="dialog">
	  	<div class="dialog-header">
	  		<div class="dialog-title">
	  			這是彈框標題
	  		</div>
	  		<div class="dialog-close-icon dialog-close"></div>
	  	</div>
	  	<div class="dialog-content">
	  		這是彈框內容
	  	</div>
	  	<div class="dialog-footer">
	  		<button class="btn dialog-close">OK</button>
	  		<button class="btn">cancel</button>
	  	</div>
	</div>

2、css部分

	<style type="text/css">
		* {
			margin: 0;
			padding: 0;
			box-sizing: border-box;
		}
		/* 毛玻璃效果的背景 */
		.dialog-background {
			transition: .1s filter; /* 毛玻璃效果的漸變時間 */
		}
		.dialog-background.de-emphasized {
			filter: blur(3px) contrast(.8) brightness(.8);/* 毛玻璃效果的濾鏡 */
		}
		/* 彈出窗 */
		.dialog {
			z-index: 1;
			position: absolute;
			top: 80px;
			left: 35%;
			width: 400px;
			height: 350px;
			background: #fff;
			display: none;
			flex-direction: column;
			border-radius: 4px;
		}
		.dialog-header {
			background: #ccc;
			display: flex;
			margin: .2em;
			padding: .2em .2em .2em .5em;
			height: 2.5em;
			border-radius: 3px;
			align-items: center;
		}
		.dialog-header .dialog-title {
			flex-grow: 1;
		}
		.dialog-header .dialog-close-icon {
			background: #e6e6e6;
			padding: .1em .35em;
			margin-right: .2em;
			cursor: pointer;
			border-radius: 3px;
		}
		.dialog-header .dialog-close-icon:hover {
			background: #666;
		}
		.dialog-header .dialog-close-icon:after {
			content: "\d7";
			font-size: 1.2em;
			color: #666;
		}
		.dialog-header .dialog-close-icon:hover:after {
			color: #fff;
		}
		.dialog-content {
			flex-grow: 1;
			margin: 0 .2em;
		}
		.dialog-footer {
			border-style: solid;
			border-width: 1px 0 0;
			padding: .5em;
			margin: 0 .2em;
			display: flex;
			justify-content: flex-end;
		}
		.dialog-footer .btn{
			font-size: medium;
			width: 5em;
			margin: .2em .5em;
			padding: .5em;
		}
		.btn {
			border: 0;
			border-radius: 3px;
			padding: 1em;
			font-size: large;
			background: #ccc;
			width: 8em;
		}
		.btn:hover {
			background: #666;
			color: #fff;
			cursor: pointer;
		}
	</style>

3、js部分

  <script type="text/javascript">
    // 點選id為alert-window的按鈕後顯示彈窗。
  	$("#alert-window").click(function(){
  		openDialog("dialog-1");
  		$(".dialog-background").addClass("de-emphasized");
  	});
  	// 顯示彈窗的方法。
  	function openDialog(dialogId){
  		$("#"+dialogId+"").css("display", "flex");
  	}
  	// 為所有dialog-close的元素新增關閉彈窗的事件。
  	$(".dialog-close").click(function(){
  		$(this).parents(".dialog").hide();
  		$(".dialog-background").removeClass("de-emphasized");
  	});
  </script>

4、實際效果

在這裡插入圖片描述

三、斜條紋效果

斜條紋效果的彈窗只是改變了一下模態框的背景色而已,所以把模態框的背景改成下面的程式碼就可以啦。(《css揭祕》提供的這個生成斜條紋的方法真是好用。)

			/* 設定斜條紋顏色 */
			background: #aab;
			/* 設定斜條紋樣式 */
			background-image: repeating-linear-gradient(30deg,
							  	hsla(0, 0%, 100%, .1),
							  	hsla(0, 0%, 100%, .1) 15px,
							  	transparent 0, transparent 30px);

最終效果:

在這裡插入圖片描述