PDA

View Full Version : 3 cột + table , xin hướng dẫn mình.



shpy
17-04-2008, 08:19
Mình tập tành CSS mấy hôm nay. Tự học nên nhờ các bạn hướng dẫn giúp trường hợp này:
http://b.imagehost.org/0515/3o.gif

Trong đó, phần trên cùng (header) do bị gọi ra riêng nên chưa sửa về CSS được mà phải để là 1 cái table riêng. Mình cần làm đến phần bên dưới (3 ô).

Code viết như thế nào cho nó ?! Có phải là (các giá trị bên trong hướng dẫn giúp mình với):

<table> ************ </table>
<div> ô 1 </div>
<div> ô 2 </div>
<div> ô 3 </div>

Ps: thật ra mình muốn sửa web mình về CSS cho nó nhẹ vì hầu hết các phần là giống nhau trong nhiều trang: www. sonnuoc .com Bạn nào xem giúp mình nhé (web cũng tự mò từ core opensource luôn)

2_lua_IT
18-04-2008, 16:48
Pác vào trang này tham khảo nhá, sẽ đúng ý pác thôi,
http://www.glish.com/css/7.asp

shpy
19-04-2008, 08:31
Ô, cảm ơn bạn. Web đó khá hay với mình. Nó hướng dẫn rất đơn giản và dễ hiểu cho người mới tập tành như mình.

Bạn hướng dẫn thêm cho mình ở phần này với nhé:

Mình có thêm 1 <div> ở dưới gọi là footer. Bây giờ nếu cột center mà nội dung dài nhất thì sẽ không thấy chuyện gì xảy ra. Nhưng nếu nó ngắn hơn 1 trong 2 cột left right thì cái dòng footer sẽ bị lấp bởi left / right (do left/right có thuộc tính absolute)

Mình muốn cho nó đi theo cột nào cao nhất thôi thì làm sao ?

Ngoài việc nhóm 3 cột kia vào 1 div thì có cách khác không ? Vì mình tập làm CSS vì ngoài việc dễ viết nó còn giúp hiển thị trang web nhanh hơn: đọc tới div nào là hiển thị div đó chứ không phải đọc hết toàn bộ table mới hiển thị. Nhưng nếu nhóm nhiều div vào trong 1 div(có thể nhóm nhiều tầng nữa!) thì nó có bị là đọc hết nguyên cái div ngoài cùng rồi mới hiển thị hay là cũng vẫn hiển thị từng các div ở trong ?!




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html><head><title>glish.com : CSS layout techniques : 3 columns, the holy grail</title>

<style type="text/css">
@import "all.css"; /* just some basic formatting, no layout stuff */

body {
margin:10px 10px 0px 10px;
padding:0px;
}

#leftcontent {
position: absolute;
left:10px;
top:50px;
width:200px;
background:#fff;
border:1px solid #000;
}

#centercontent {
background:#fff;
margin-left: 199px;
margin-right:199px;
border:1px solid #000;
/*
IE5x PC mis-implements the box model. Because of that we sometimes have
to perform a little CSS trickery to get pixel-perfect display across browsers.
The following bit of code was proposed by Tantek Celik, and it preys upon a CSS
parsing bug in IE5x PC that will prematurly close a style rule when it runs
into the string "\"}\"". After that string appears in a rule, then, we can override
previously set attribute values and only browsers without the parse bug will
recognize the new values. So any of the name-value pairs above this comment
that we need to override for browsers with correct box-model implementations
will be listed below.

We use the voice-family property because it is likely to be used very infrequently,
and where it is used it will be set on the body tag. So the second voice-family value
of "inherit" will override our bogus "\"}\"" value and allow the proper value to
cascade down from the body tag.

The style rule immediately following this rule offers another chance for CSS2
aware browsers to pick up the values meant for correct box-model implementations.
It uses a CSS2 selector that will be ignored by IE5x PC.

Read more at http://www.glish.com/css/hacks.asp
*/

voice-family: "\"}\"";
voice-family: inherit;
margin-left: 201px;
margin-right:201px;
}
html>body #centercontent {
margin-left: 201px;
margin-right:201px;
}

#rightcontent {
position: absolute;
right:10px;
top:50px;
width:200px;
background:#fff;
border:1px solid #000;
}

#banner {
background:#fff;
height:40px;
border-top:1px solid #000;
border-right:1px solid #000;
border-left:1px solid #000;
voice-family: "\"}\"";
voice-family: inherit;
height:39px;
}
html>body #banner {
height:39px;
}

p,h1,pre {
margin:0px 10px 10px 10px;
}

h1 {
font-size:14px;
padding-top:10px;
}

#banner h1 {
font-size:14px;
padding:10px 10px 0px 10px;
margin:0px;
}

#rightcontent p {
font-size:10px
}

#footer { clear:none;
}

</style>
</head><body>
<div id="banner"><h1><a href="home.asp">LAYOUT TECHNIQUES</a>: 3 columns, the holy grail</h1></div>
<div id="leftcontent">
<h1>leftcontent</h1>
<pre>#leftcontent {
position: absolute;
left:10px;
top:50px;
width:200px;
background:#fff;
border:1px solid #000;
}</pre>
<p class="greek">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exercitation ulliam corper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem veleum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel willum lunombro dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
</p>
</div>

<div id="centercontent">
<h1>centercontent</h1>
<pre>#centercontent {
background:#fff;
margin-left: 199px;
margin-right:199px;
border:1px solid #000;
voice-family: "\"}\"";
voice-family: inherit;
margin-left: 201px;
margin-right:201px;
}
html>body #centercontent {
margin-left: 201px;
margin-right:201px;
}</pre>
<p>This is the most elegant technique and perhaps the most sought after layout: a 3 column page with a fluid center column. Easy to understand, easy to implement. I first saw this layout at <a href="http://www.wrongwaygoback.com">dynamic ribbon device</a> and have since learned that the sweet CSS came from Rob Chandanais of <a href="http://www.bluerobot.com">BlueRobot</a>. Owen also made a very nice <a href="http://members.home.net/bigstripes/tutorial/css_3box_plus_topbox.html">tutorial</a> using this layout technique.</p>
<p>Read about the IE5x PC workaround in use on this page <a href="hacks.asp">here</a>.</p>

<br />
</div>

<div id="rightcontent">
<h1>rightcontent</h1>
<pre>#rightcontent {
position: absolute;
right:10px;
top:50px;
width:200px;
background:#fff;
border:1px solid #000;
}</pre>
<p>
This page is part of <a href="home.asp">CSS Layout Techniques</a>, a resource for web developers and designers.
</p>
<p>
Other Layout Techniques:<br/>
<a href="7.asp">3 columns, the holy grail</a><br/>
<a href="9.asp">2 columns, ALA style</a><br/>
<a href="8.asp">4 columns, all fluid</a><br/>
<a href="2.asp">3 columns, all fluid </a><br/>
<a href="3.asp">static width and centered</a><br/>
<a href="1.asp">nested float</a><br/>
</p>
<p>
Does it <a href="http://validator.w3.org/check?uri=http://www.glish.com/css/7.asp?noSRC=true">validate</a>?
</p>
</div>

<div id="footer">
<p>baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>
</div>
</body>
</html>

Bop
19-04-2008, 16:21
cái này bạn lộn rồi nếu là CSS thì bạn phải để riêng ra, chứ để chung như thế này trình duyệt đọc sai là phải.
vd: với CSS của bạn trên thì phải lưu ở dạng .CSS rồi sau đó ở code web mới dẩn đến link .CSS này
- với lại canh = Table dễ hơn và phần CSS thì cho nó uốn cong các góc của website sẽ đẹp hơn.

Spirit
19-04-2008, 21:18
cái này bạn lộn rồi nếu là CSS thì bạn phải để riêng ra, chứ để chung như thế này trình duyệt đọc sai là phải.
vd: với CSS của bạn trên thì phải lưu ở dạng .CSS rồi sau đó ở code web mới dẩn đến link .CSS này
- với lại canh = Table dễ hơn và phần CSS thì cho nó uốn cong các góc của website sẽ đẹp hơn.

Cong thì cái gì chả cong dc, ai bảo phải table thế :emlaugh:

shpy
19-04-2008, 23:29
cái này bạn lộn rồi nếu là CSS thì bạn phải để riêng ra, chứ để chung như thế này trình duyệt đọc sai là phải.
vd: với CSS của bạn trên thì phải lưu ở dạng .CSS rồi sau đó ở code web mới dẩn đến link .CSS này
- với lại canh = Table dễ hơn và phần CSS thì cho nó uốn cong các góc của website sẽ đẹp hơn.

Cảm ơn bạn đã hướng dẫn nha. Nhưng mà CSS để chung trong file hay file riêng gì cũng được mà. Nếu để file riêng thì có thể dùng chung cho nhiều trang. Còn mình đang tập làm nên chỉ có 1 trang thôi, để chung cho nó dễ chỉnh.

Mình chưa hiểu cái vụ cong gì đó. Mình đang tập đến phần sắp xếp các vị trí của các ô. Nếu dùng table thì công nhận dễ suy nghĩ trong trường hôp này thật. Nhưng mà nó có nhiều điểm yếu hơn css nên mình mới tập dùng nó.

zoejoe
20-04-2008, 10:13
cái này bạn lộn rồi nếu là CSS thì bạn phải để riêng ra, chứ để chung như thế này trình duyệt đọc sai là phải.
vd: với CSS của bạn trên thì phải lưu ở dạng .CSS rồi sau đó ở code web mới dẩn đến link .CSS này
- với lại canh = Table dễ hơn và phần CSS thì cho nó uốn cong các góc của website sẽ đẹp hơn.

CSS thì để ở đâu cũng dzậy, khác gì đâu nhỉ !! :emlaugh: Còn việc uốn cong góc thì thiếu gì cách (tui đã thử cả table và kĩ thuật 4 div, okie cả thôi, không khác nhau gì) => mất căn bản

Bop
21-04-2008, 14:19
nói là giống nhau mà cũng là mất CB,,,,,.......à ....bó tay.com

michaelphan
22-04-2008, 00:04
Ô, cảm ơn bạn. Web đó khá hay với mình. Nó hướng dẫn rất đơn giản và dễ hiểu cho người mới tập tành như mình.

Bạn hướng dẫn thêm cho mình ở phần này với nhé:

Mình có thêm 1 <div> ở dưới gọi là footer. Bây giờ nếu cột center mà nội dung dài nhất thì sẽ không thấy chuyện gì xảy ra. Nhưng nếu nó ngắn hơn 1 trong 2 cột left right thì cái dòng footer sẽ bị lấp bởi left / right (do left/right có thuộc tính absolute)

Mình muốn cho nó đi theo cột nào cao nhất thôi thì làm sao ?

Ngoài việc nhóm 3 cột kia vào 1 div thì có cách khác không ? Vì mình tập làm CSS vì ngoài việc dễ viết nó còn giúp hiển thị trang web nhanh hơn: đọc tới div nào là hiển thị div đó chứ không phải đọc hết toàn bộ table mới hiển thị. Nhưng nếu nhóm nhiều div vào trong 1 div(có thể nhóm nhiều tầng nữa!) thì nó có bị là đọc hết nguyên cái div ngoài cùng rồi mới hiển thị hay là cũng vẫn hiển thị từng các div ở trong ?!


trường hợp này đáng để nghiên cứu nhưng theo hiểu biết hạn hẹp của tôi thì nếu để độc lập thì khó mà chạy như ý bạn. hiện tại mình chỉ nghĩ ra 3 cách:
+ 1: Nếu html,css của bạn chỉ mang ý nghĩa layout (không code theo kiểu cần phải phân cấu trúc rõ ràng thì bãn có thể dưa div id=footer đó vào trong dĩv mà nội dung dài thay vì để bên ngoài độc lập. Hiện tại mình chưa config ra cách tự động clear khi 1 trong 3 div trên quá dài.
+ 2: cố gắng đưa footer nội dụng váo phần giữa centercontent.
+ 3: do width 2 cột left va center có width fixed nên có thể set minheight cho cả 3 div với các thông số phù hợp theo yêu cầu của layout.
Các bác khác có cao kiến gì thì đem ra trao đổi để em nâng tầm hiểu biết nhé.

2_lua_IT
22-04-2008, 16:47
Lỗi này là do cái position:absolute; gây ra. Và cách làm này tui thấy người ta cũng "mẹo" wa, do vậy có lẽ sẽ nghiên cứu thêm và hi vọng sẽ có câu trả lời cho bạn. Thanks vì đã post yêu cầu hay.

shpy
25-04-2008, 22:30
Lỗi này là do cái position:absolute; gây ra. Và cách làm này tui thấy người ta cũng "mẹo" wa, do vậy có lẽ sẽ nghiên cứu thêm và hi vọng sẽ có câu trả lời cho bạn. Thanks vì đã post yêu cầu hay.

Đã tìm ra cách giúp mình chưa bạn?! Mà không nhất thiết phải theo đoạn code ở trên ! Miễn sao đạt cái yêu cầu là okie rồi !

trouble_maker
14-05-2008, 00:48
mình hay dùng kiểu này cho loại 3 cột:

#leftcol: floatleft,width ví dụ 200px

#maincontent: margin: 0 205px;

#rightcol: floatright, width ví dụ 200px;

--------------------------------------
hoặc kiểu khác khi #leftcol và #rightcol khác nhau về chiều rộng:

#leftcol: floatleft, width 200px;

#maincontent: margin: 0 155px 0 205px;

#rightcol: floatright, width 150px;

nói chung là học từ cái mẫu có sẵn trong dreamweaver CS3

darkera13
14-05-2008, 17:11
không biết chủ nhân của cái topic này đã tìm được giải pháp chưa nữa.



<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Title</title>

</head>

<body style="background:#000">
<div style="background:#f0f; height: 100px; clear:both;"></div>
<div style="background:#f00; height: 300px; width:200px; float:left;"></div>
<div style="background:#0ff; height: 300px; width:200px; float:right;"></div>
<div style="background:#ff0; height: 300px; margin:0 200px;"></div>
<div style="background:#f0f; height: 100px; clear:both;"></div>
</body>

</html>

superthin
14-05-2008, 18:17
Thiết kế web 3 cột thì tuy dùng table là hạ sách nhưng với những người chưa vững vàng về DIV và CSS thì nên chọn cách ấy cho dễ. Dùng DIV và CSS để làm trang web có ba cột là việc khó, tốn nhiều công sức nếu muốn nó hiển thị tốt trên cả FireFox lẫn IE và ở các độ phân giải khác nhau. Có lẽ nên tìm trên mạng mẫu người ta làm sẵn rồi mang về thay hình ảnh, màu sắc thì tiện hơn ngồi tự làm lấy vì gặp nhiều vấn đề lôi thôi với thiết kế 3 cột dùng DIV.

shpy
25-05-2008, 00:30
không biết chủ nhân của cái topic này đã tìm được giải pháp chưa nữa.



<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Title</title>

</head>

<body style="background:#000">
<div style="background:#f0f; height: 100px; clear:both;"></div>
<div style="background:#f00; height: 300px; width:200px; float:left;"></div>
<div style="background:#0ff; height: 300px; width:200px; float:right;"></div>
<div style="background:#ff0; height: 300px; margin:0 200px;"></div>
<div style="background:#f0f; height: 100px; clear:both;"></div>
</body>

</html>


Cảm ơn bạn rất nhiều. dạo này bận quá nên quên mất. Lúc trước mình cũng làm như vậy nhưng lại để phần code của center content nằm giữa 2 phần left và right nên phần righ khi lên web cứ bị nhảy xuống dòng. Bạn có thể diễn giải giúp mình tại sao phần center để sau cùng thì không bĩ không ?! Mà như vậy nội dung chính cần chú ý lại bị đẩy xuống cuối , có phải là không tốt cho SEO không ?!

darkera13
25-05-2008, 08:17
Bạn muốn hiểu rõ hơn thì có thể tham khảo quyển sách này

OReilly.CSS.The.Missing.Manual (http://www.btebook.com/%7B2633EBC3-6478-4C3C-97D5-1D9E36ABCAD2%7D.htm)

Mình không nghĩ là cấu trúc như vậy có ảnh hưởng đến SEO. Vì mình nghĩ rằng bot sẽ quét cả bài viết của bạn.

trouble_maker
27-05-2008, 16:13
chẳng ảnh hưởng gì đến SEO cả, bạn muốn rõ hơn thì cứ dùng Dreamweaver CS3 nó có sẵn các loại mẫu template CSS dấy từ one column cho đến 3 columns, rồi thì từ elastic cho đến fixed. chuẩn đấy. cứ xài nó và hiểu. đằng nào viết lại thì cũng dùng như thế thôi

shpy
27-05-2008, 17:35
Mình lại gặp vấn đề sau:
- Nếu nội dung của cột center (ở đây mình lấy tạm là 1 image) khi mà window resize nhỏ đi thì toàn bộ nội dung sẽ bị dồn hết xuống dưới. Mình muốn làm sao cho nó vẫn nằm đó (window sẽ xuất hiện thanh trược ngang phía dưới).



http://www.sonnuoc.com/contact_us.php




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style type="text/css">
.leftcolum { float:left; width:163px; height:600px; background-color:#990000}
.rightcolum {float:right; width:163px; height:400px; background-color:#3333CC}
.centercolum {margin:0 163px; background-color:#CC33CC}
.headerpart {
clear:both;
background-color:#e2fFff;
}
.footerpart {clear:both;
width:100%;
background-color:#CC3300;
font-family: Verdana, Arial, sans-serif;
font-weight: bold;
color: #ffffff;
font-size:10px;}
</style>
</head>

<body style="margin:0">
<div class="headerpart"><table bgcolor="#33ed00"><tr><td>bbbbbbbbbbbbb</td></tr></table></div>
<div class="leftcolum"><table bgcolor="#33aF00" width="163"><tr><td>bbbbbbbbbbbbb</td></tr></table></div>
<div class="rightcolum"><table bgcolor="#33FF00" width="163"><tr><td>bbbbbbbbbbbbb</td></tr></table></div>
<div class="centercolum">
<table bgcolor="#66FFFF" cellpadding="0" width="100%"><tr><td>
fffff</td></tr>
<tr><td>
<img src="http://www.sonnuoc.com/images/HPMap.jpg" border="1" /></td></tr>
</table></div>
<div class="footerpart">ddddddddddd</div>
</body>
</html>