【手把手】JavaWeb 入門級項目實戰 -- 文章發布系統 (第十節)


本節主要講解詳情頁的頁面布局和css樣式,以及從主頁面到詳情頁面的跳轉問題。

1. 詳情頁面的布局

頁面布局的話,我還是習慣先把靜態頁面做出來,確保沒問題了,然后再跟后台對接。

在實際的開發過程中,靜態頁面一般是美工或者前端工程師負責,后台工程師主要關心如何把Java層的數據貼到靜態頁面。(雖然我經歷的幾個公司都是自己一個人全包了。。。)

之前我已經把我個人繪制靜態頁面的過程,還有自己的思路寫出來了,所以從本節開始,我不會再寫得那么詳細,而是根據頁面效果來簡明扼要地介紹一下。

我繪制頁面的一般流程,就是先在腦子里形成一個大概的模樣,就是搞清楚到底要畫一個怎樣的頁面?甚至還可以弄個草圖,然后根據草圖來逐步寫html和css代碼。

首先是搭骨架,骨架就是html代碼。

搭好了骨架,才是添加css代碼的時候。

我個人繪制頁面,都是遵循這樣一個流程。

好了,先看看效果:

1.gif

頁面布局簡圖:

Paste_Image.png

第一部分,是文章的展示區域。

html骨架

<!-- 內容區 -->
<div class='article'>
	<div class='title'>文章標題</div>
	<div class='category'><span class='light-font'>分類:</span><span class='info'>編程代碼類</span></div>
	<div class='publicDate'><span class='light-font'>發布時間:</span><span class='info'>2016-10-27</span></div>
	<hr/>
	<div class='content'>
		<p>初學javascript的人,都會接觸到一個東西叫做閉包,聽起來感覺很高大上的。網上也有各種五花八門的解釋,其實我個人感覺,沒必要用太理論化的觀念來看待閉包。

		<p>事實上,你每天都在用閉包,只是你不知道罷了。
		
		<p>比如:
		
		var cheese = '奶酪';
		
		var test = function(){
		    alert(cheese);
		}
		OK,你已經寫了一個閉包。
		
		<p>函數也是一個數據類型</p>
		<p>變量 cheese 是在全局作用域中的一個變量,當你創建了一個 test 函數,那么,test 和 cheese 就共享一個全局作用域。</p>
		
		<p>你要額外明白的一點是,在js中,函數和變量本質上是一個東西。函數也是一個數據類型。</p>
		
		<p>從上面的定義中也能看出來這一點。你要是不相信的話,我們來看一下咯。</p>
		
		<p>alert(cheese);</p>
		<p>alert(test);</p>
		
		<p>Paste_Image.png</p>
		
		<p>Paste_Image.png</p>
		<p>讓我們再來看看 test 和 cheese各是什么類型:</p>

	</div>
</div>

文章內容都是一些測試數據

展示一篇文章,包含這篇文章的標題,分類和發布時間,當然還有作者信息。

首先是文章標題,它就是一個div,沒什么大不了的。不要把它想得太復雜了。

<div class='title'>文章標題</div>

標題的css:

.article .title {
	text-align: center;
    font-size: 28px;
    color: #565353;
    letter-spacing: 2px;
    margin-top:20px;
}

文字居中:

text-align: center;

這句話能讓這個div里面的文字居中顯示,所以你才能看到這個居中效果:

Paste_Image.png

標題的字體肯定不能太小了,所以我先給它一個28px。

font-size: 28px;

我覺得字體太黑了不好看,就把顏色稍微調淡了一些。

color: #565353;

接着是字間距,我們不希望每個字都緊湊得擠在一起,所以讓字與字之間稍微空開一點。

letter-spacing: 2px;

這表示空開2個px。

letter-spacing真的可以做到,有圖為證。

1.gif

向上的間距也要調大一點,不然緊緊貼着標題欄肯定不好看。

margin-top:20px;

就20個px吧。

Paste_Image.png

這樣就差不多了。

接下來是這一塊。

Paste_Image.png

可以看到,兩邊的顏色是不一樣的。很顯然,我肯定是給他們分別加了樣式。

<div class='category'><span class='light-font'>分類:</span><span class='info'>編程代碼類</span></div>
<div class='publicDate'><span class='light-font'>發布時間:</span><span class='info'>2016-10-27</span></div>

結構如圖:

Paste_Image.png

為了分別控制左右兩邊的字體樣式,我在外層div中嵌套了兩個span,給他們分別加上不同的樣式。

對應的css樣式

.article .light-font{
	font-size:14px;
	color:#666;
}

.article .info{
	font-size:14px;
	color:#3c3a3a;
}

文章區域,我主要給里面的 P 標簽加了樣式:

.article .content p{
	text-indent:2em;
	margin-bottom:20px;
	font-family: 微軟雅黑;
}

接下來演示一下層級關系:

Paste_Image.png

Paste_Image.png

Paste_Image.png

文章中的每一個段落,對應一個P標簽,我給這些P標簽加上特定的樣式,包括首行縮進,底外邊距,還有字體。

先這么簡單弄一下吧,有個樣子就行了。

至於作者信息的展示區,也是比較簡單的,我就放了一個頭像和作者名稱。

Paste_Image.png

html

<div class='right mt32'>
	<div class='author'>
	<img src='${basePath}/static/img/1.jpg' class='header_pic' width='90' height='90'></img>
	作者:張三
	</div>
</div>

可見,頭像和作者名稱都是放在一個div里面的,這個div有一個叫做 right 的css屬性。

Paste_Image.png

頭像部分我用了一個相對定位
Paste_Image.png

最后是評論區:

Paste_Image.png

Paste_Image.png

剩下的具體評論是一個個p標簽,就不一一細說了。

評論區html代碼:

<!-- 評論區 -->
<div class='commentBox'>
	<textarea class="comment_input" id="commenttxt" placeholder="請輸入評論信息(600)..." maxlength="600"></textarea>
          <input type="button" value="保存評論" class="button">
</div>
<div class='clearfix'></div>
<br/><hr/>
<div class='mb64' class="comment_list">
	<div class="comment_infor clearfix">
    	<div style='border-bottom:1px solid #ccc' class="comment_word">
             <p style='border-bottom:20px solid #fff'>${comment.username}dwedewffrg 說:</p>
             <p class='mb32'>內容不錯,感謝分享!</p>
    	 </div>
    </div>
</div>

2. 從主頁面到詳情頁面的跳轉問題

我們的首頁會展示出不同分類的文章列表,每一篇文章都有一個封面,我們通過點擊封面進入文章的詳情頁。

Paste_Image.png

這個時候,我們先來看看,當初是怎么把數據庫里面的文章展示在首頁的?

Paste_Image.png

原來,我們在index.jsp中,寫過如下代碼:

<% ArticleService articleService = new ArticleService(); %>

然后調用了 articleServicegetArticlesByCategoryId 方法。

<%
	//查詢出編程代碼類的相關文章
	List<Map<String,Object>>  articles2 = articleService.getArticlesByCategoryId(2, 0, 6);
	pageContext.setAttribute("articles2", articles2);
%>

默認查出來前六條數據。

如果沒看明白的話,可以去回顧之前的章節,這里就不再贅述了。

好的,繼續。

articles2 是一個list,拿到這個list之后,我們立即把它放在了pageContext里面,這樣的話,我們在當前頁面就能夠訪問到這個list了。

像這樣:

<div class='category'>
	<div class='title'>編程代碼類</div>
	<ul class='items'>
		<c:forEach items="${articles2}" var="item">
			<li class='item' onclick="detail('${item.id}');">
				<div class='item-banner'>
					<div class='item-header'>${item.header}</div>
					<div class='item-name' title = "${item.name}">${item.name}</div>
					<div class='item-author'>@${item.author} 著</div>
				</div>
				<div class='item-description'>${item.description}</div>
			</li>
		</c:forEach>
		<div style='clear:both'></div>
	</ul>
</div>

我們要通過這個封面打開詳情頁,是不是需要一個點擊事件呢?

因為我這邊使用了onclick屬性,所以我單獨寫了一個 detail 方法:

//打開詳情頁
function detail(id){
	var a = document.createElement("a");
	a.href = "detail.jsp?id=" + id; 
	console.log(a);
	a.target = '_new'; //指定在新窗口打開
	a.click();//觸發打開事件
}

在detail方法里,我直接創造了一個a標簽,目標地址指向了detail.jsp,並且使用get方式傳遞了一個參數,也就是文章的id。最后,手動觸發了點擊事件。

因為需要在detail.jsp中,從后台查出文章的具體內容,我們必然通過id去查。所以,我們需要給詳情頁傳遞一個id。

Paste_Image.png

我們這一章先不管怎么去后台查,先確保能把文章id傳遞到詳情頁再說。

當我們點擊文章列表中的某一條數據,進入詳情頁的時候,會發現url地址欄就帶了id。

比如:
http://localhost:8080/Article/detail.jsp?id=ddc0136f-7bf5-41ed-ba6f-462d370afbe4

點擊不同的文章,后面跟的id是不同的。這樣就說明id的傳遞已經沒問題了。

好的,這一章先到這里,下一節開始寫詳情頁的業務代碼。

額,家里渣網速,怎么也打不開 FTP ,過幾天我再上傳本章的源碼吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM