尚品汇#
顶部导航条#
思路#
首先确定版心宽度,高度由内容撑开,因此不设高度。
所有展示内容都要在版心范围内,因此版心内嵌到各个页面区域中,此处嵌套在顶部导航条。
导航条可初步分为两个 div
,用左右浮动布局。
一开始的思路是内部再分为两个 div
,再用浮动布局,此方法麻烦。最终实现是通过设置右外边距(margin)。
注意点
- 垂直居中通过行高 = 字号实现,注意只对内联元素生效。
- 登录和免费注册之间的竖线其实是边框(border)。
- 竖线和文字等高,因此在
<a>
内设置 border 属性。 - 盒子模型中 margin 在 border 外面,因此调整 margin 对调整 border 和文字之间的距离无效,需要用 padding。
这个一开始的思路是正确的,用列表做导航栏。但列表是块级元素,如果使其内联的思路是改 display
属性。但是最终实现还是通过浮动。
注意点
- 由于是列表,直接对
<li>
设置左右外边距。 - 第一个列表项和最后一个列表项的左边距和右边距不需要。
- 最后一个列表项的左竖线同样不需要。
- 竖线的注意点同左
div
。
源码#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
|
头部#
思路#
两个 div 分别左浮动和右浮动。左 div 内嵌 img,右 div 包含一个输入框和一个按钮(button),均在表单 (form) 元素内。
这个比较简单。
这里一开始没什么思路,原来是个带边框的输入框 + 带背景图片的按钮。
注意点
- 输入框有 1px 的边框,因此从设计稿得到宽高时各要减去 2px。
- 输入框与父元素之间的上下边距一致,添加单向外边距可以让输入框居中。
- 输入框和按钮之间会有间距,可以通过在父元素
<form>
添加属性font-size: 0
实现。- 按钮本身有固有样式,所以如果在元素内添加文字,即使父元素设置字体大小为零,也不会生效(继承样式的优先级小于自身样式)。
- 垂直方向没对齐,90% 是基线(baseline)的问题,可以通过
vertical-align
解决。 - 按钮添加图标是通过
background-image
实现。- 背景图片重复,设置
background-repeat:no-repeat
- 背景图片居中,设置
background-position:center
- 背景图片重复,设置
源码#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
主导航#
思路#
这个一看就是两个左浮动的 div。其父元素加个下边框。
左 div 垂直 + 水平居中分别采用 line-height:$font-size
和text-align:center
(只对内联元素生效)。
右 div 为 <ul>
列表,其中<li>
也要左浮动,列表项才能从竖向排列转为横向排列。同样地使用line-height:$font-size
垂直居中。
这个没什么细节。
注意点
<li>
浮动后,其父元素<ul>
需要清除浮动,而<ul>
本身也是处于左浮动,二者可以同时存在。
源码#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
侧边导航#
思路#
左边无序列表,右边定义列表。子绝父相。
左边鼠标悬浮在列表项上,背景占满且左侧有间距,所以要用 padding。
右边鼠标悬浮出现,相对于 <ul>
绝对定位。<dt>, <dl>
分别左浮。
注意点
- 如果几个元素之间上下间距相等,那么行高可以设为:元素自身高度 +(上边距 + 下边距)➗ 2
- 如果选中一个
<li>
时背景色铺满,同时要调整间距,应该用 padding,否则背景色会铺不满
注意点
- 出现 border 属性时,如果要调整内容与边距之间的间距,则需要用 padding 而非 margin
源码#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
|
````css
.main-content .side-nav {
width: 190px;
height: 458px;
background-color: #f4f4f4;
position: relative;
}
.main-content .side-nav li {
font-size: 14px;
color:#333;
/* 除了使用 margin 控制边距,还可以计算行高 /
/ margin: 7px 0 7px 16px; /
/ height: 28px; /
line-height: 28px;
/ 悬浮出现背景色,所以不用 margin 用 padding */
padding-left: 16px;
}
.main-content .side-nav li:hover,
.main-content .side-nav li:hover>a {
background-color: #DD302D;
color: white;
}
/* 先定义好尺寸和位置隐藏起来 */
.main-content .side-nav .second-menu {
width: 680px;
height: 458px;
position: absolute;
top: 0;
left: 190px;
padding-left: 20px;
background-color: white;
display: none;
}
/* 当鼠标悬浮在
.main-content .side-nav li:hover .second-menu {
display: block;
}
.second-menu dl {
height: 36px;
line-height: 36px;
}
.second-menu dl:first-of-type {
margin-top: 10px;
}
/* 让定义列表横向排列 */
.second-menu dt {
float: left;
width: 70px;
height: 20px;
margin-right: 10px;
font-weight: bold;
}
.second-menu dd {
float: left;
}
.second-menu dd a {
border-left: 1px solid #666;
/* 小细节 */
padding: 0 10px;
}
```
轮播图#
思路#
由于当前只学了 HTML 和 CSS,因此轮播图这类需要用到 JavaScript 的功能,暂时直接用 <img>
替代。
源码#
1 2 3 4 5 6 7 |
|
1 |
|
右侧内容区#
思路#
整体可分为上下两个部分,两边各有一定 padding。
首先是上半部分。
上半部分又可分为两个区域,第一个区域是标题,第二个区域是列表。
-
标题
- 通过设计稿的边框量出距离顶端的高,减去 1 便是容器高度。
- 容器内分别两个左浮动和右浮动的
<span>
和<a>
,以及容器底部的边框。
-
列表
<ul>
套<li>
。因为上下间距相同,所以行高可以设为:元素自身高度 +(上边距 + 下边距)➗ 2
其次是下半部分。
还是老套路,无序列表加浮动,复制 3 份。
通过设计稿可以量出图标和文字的高度,二者相加即为父容器的高度,内含 <span>
和<div>
。
通过给 <div>
设置背景图像,加上更改<background-position>
的 X 坐标和 Y 坐标 来实现精灵图的功能。
注意点
坐标轴以左上角为原点,所以一般坐标值都是负值。
源码#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
|
2023-06-28 22:49 2024-07-09 00:06