项目实战1:豆瓣首页-页头

经过对前端html和css的基础和进阶的学习,我对前端也有了更深的理解,在这里我就利用所学知识来进行一次豆瓣首页的项目实战吧!

以下就是豆瓣首页的内容:

我们先做好准备工作,首先css文件通常在创建项目时通常会创建三个,一个重置样式(reset.css),一个作者样式(XXX.css),一个通用样式(common.css)

首先是页头

如下: 

页头整体用header元素包含,页头里又包含logo,search,以及menu三个部分,每个都用有类名的div 表示,由于之后要整体给这三个元素设置居中,故要将这三个元素关联起来,即在这三个元素外面再包含一个类名为container的div,后续设置container即可

<body>
    <header class="header">
        <div class="container">
            <div class="logo">

            </div>
            <div class="search">
                
            </div>
            <div class="menu">
                
            </div>
        </div>
    </header>
</body>

接着就设置header高度,一般情况下header高度不变,所以在这里要给header设置高度

.header{
    height: 90px;
}

之后给container设置宽度,以及该区域居中 ,不难发现该区域与首页下方很多区域宽度相同,如果不加任何处理,就会写很多重复代码,故在此要给container设置公共样式,以后凡是遇到宽度相同并居中时,给该元素加个类名container即可

/* 首页通用样式 */
.container{
    width: 950px;
    margin: 0 auto;
}
/* 首页通用样式结束 */
/* 页头开始 */

.header{
    height: 90px;
}
/* 此举会使代码更加繁琐 */
/* .header .container{
    width: 950px;
    margin: 0 auto;
} */

/* 页头结束 */
<body>
    <header class="header">
        <div class="container">
            <div class="logo">

            </div>
            <div class="search">
                
            </div>
            <div class="menu">

            </div>
        </div>
    </header>
    <!-- 宽度与container相同的元素 -->
    <div class="container"></div>

注意:container不能设置高度,高度要自适应! 

 如果要单独设置header里的container的话,在下方写更详细的选择器微调样式


/* 首页通用样式 */
.container{
    width: 950px;
    margin: 0 auto;
}
/* 首页通用样式结束 */
/* 页头开始 */

.header{
    height: 90px;
}
/* 这里写有差异性的代码 */
.header .container{
    margin-top: 30px;
} 
/* 页头结束 */

排列三个div时,可将前两个设置为左浮动,最后一个设置为右浮动,由于页面中可能也会有很多元素左浮动,为了避免代码繁琐,可将左浮动设置为通用样式:

/* 首页通用样式 */
.container{
    width: 950px;
    margin: 0 auto;
}
.float-left{
    float: left;
}
/* 首页通用样式结束 */

如果以后有元素要设置成左浮动,给该元素加上float-left类名即可 ,右浮动同理。

出现浮动之后,要注意高度坍塌问题:

.clearfix::after{
    content: "";
    display: block;
    clear: both;
}

注意将其设置在通用样式里

接着设置三个元素整体高度(或边框),增强可视化效果 

.header .logo, .header .search, .header .menu{
    height: 30px;
    border: 2px solid;
}

接下来就是设置具体样式了,首先是logo,这部分通过设置背景图完成,背景图通过在网页检查源代码中获得,在logo里添加的内容里有超链接,在这里我们可以用h1包含a元素,通过在a里设置背景图,同时设置宽高(即背景图的宽高)即可

给行盒设置宽高的方法

在这里要注意,a元素是行盒,不能被改变高度,因此要将a元素改为块盒 

下面是未改之前的效果:

.header .logo a{
    width: 154px;
    height: 30px;
} 

.header .logo a{
    width: 154px;
    height: 30px;
    display: block;
} 

 

 接着就为a元素设置背景图

.header .logo a{
    width: 154px;
    height: 30px;
    display: block;
    background: url(../imgs/logo_豆瓣.png) no-repeat;
} 

效果如图:

此时我们就可以去掉边框,隐藏文字使背景图更好的展现出来

隐藏文字

1. 用span元素把文字包裹起来,设置span为display:none即可 

.header .logo a span{
    display: none;
}

2. 在这里,还有另一种巧妙的方法:不用设置span元素,设置a元素高度为0,接着设置其padding-top为30px,此时文字会被挤下去,这是只要设置overflow为hidden即可。 

图标与上方有一定距离,如果设置container margin-top,此时会产生外边距合并的问题

外边距合并

1. 设置BFC盒子

2. 设置header内边距

.header{
    height: 90px;
    padding-top: 30px;
    box-sizing: border-box;
}

header内容本身就有一个高度,注意这里要加上box-sizing:border-box

接下来是搜索框

搜索框一般都有以下效果,输入文字后按回车页面会加载到另一个另一个页面

做法有两种

  1. 通过JS代码实现
  2. 在input元素外面套一个form(表单元素),form里再加一个子元素button,button里又有i元素(图标)

这里的input元素记得按照要求定宽高

/* text为input的类名 */
.header .search .text{
    width: 240px;
    height: 20px;
    padding: 5px;
    font-size: 13px;
}
<form
    <input type="text">
    <button>
          <i class="iconfont icon-sousuoxiao"></i>
     </button>
 </form>

按回车键时,就相当于触发了按钮,提交数据

接下来是设置文本框样式,placeholder:“文字”

设置placeholder文字颜色

/* 伪元素选择器,选中该属性里的内容 */
.header .search .text::placeholder{
    color: #ccc;
}

接下来为文本框设置边框,注意这里的边框不只是文本框的边框,边框里包含了input和button,所以我们就为search设置宽高以及边框。同时该区域和左边的图标也有一定距离,设置search的margin-left即可

重置input,button样式:

input,button{
    border:none;
    outline:none;
    outline-offset:0;
}
button{
    background:initial;
}

接下来设置按钮的位置,这里按钮的位置就可用定位来解决

button设置绝对定位,其父元素(类名为search)设置相对定位,设置其相对位置,top为0,right为0,可以给button设置宽高(与input高度相同)和文字颜色

.header .search button{
    position: absolute;
    width: 30px;
    height: 30px;
    top: 5px;
    right: 0px;
    background: url(../imgs/搜索小.png) no-repeat left top/25px 25px;
}

给背景图设置宽高的方法:

 background: url(../imgs/搜索小.png) no-repeat left top/25px(宽) 25px(高);

接下来就是最右边的菜单超链接,先设置整体框架为八个a元素,后面的文字都可以用背景图填充

每个a元素共用一个背景图,只是背景图的位置不一样,每个a元素宽高相同,这里就需要给a元素顶宽,但a元素是行盒,无法定宽,所以要将a元素变为行盒

.header .container .menu a{
    display: block;
    width: 40px;
    height: 20px;
    background: url(../imgs/读书~~.png) no-repeat;
}

此时我们会得到以下效果 

 此时的a元素垂直排列,将a元素横向排列的方法:1.浮动 2. 将a元素变为行块盒

在这里我们用浮动解决这个问题吧,如果将a元素浮动起来,就可以不用写将a元素变为块盒的代码了,因为浮动元素会自动将其设置为块盒,记得清除浮动(高度坍塌)

每个a元素之间都有距离,在这里我就设置margin-left吧

此时发现menu整体靠上,为了和左边search对齐,就要设置menu的margin-top。

接下来就是调整每个a元素背景图的位置了 ,在这里使用属性background-position,要给每个a元素去一个类名分别设置背景图的位置

<div class="menu float-right">
                <a href="" class="menu-read"></a>
                <a href="" class="menu-movie"></a>
                <a href="" class="menu-music"></a>
                <a href="" class="menu-group"></a>
                <a href="" class="menu-city"></a>
                <a href="" class="menu-fm"></a>
                <a href="" class="menu-time"></a>
                <a href="" class="menu-doupin"></a>
            </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值