网页实现

实现如下图所示的一个网页:网页的内容撑满整个网页。注意:撑满绝不能设定宽和高为一个具体的数字,应该用百分比即100%来设置。

 两种布局方式

两种布局方式:
方式一:div块布局
	可以不用放在一个大容器里:
	(1)分块布局&每块的内容:
		上(header):
			TESTSET字体(垂直居中)
			TESTSET图片(垂直居中)
			
		下(lower):
			左(menu):
				4个菜单栏(鼠标滑过背景颜色发生改变,同时字体变大,鼠标会变为小手状)
			右(lower-right):
				Container-fluid:
					上(homePage):
						首页
					下:
						项目模块(row)(包括图片和创建人)
				页码(pages)

实现

2.1 首先要通过div进行布局,确保网页在每个浏览器中显示正常,不会出错

			验证的方法:F12,选择每个模块,查看盒子模型是否显示正确。
			首行和首页设置具体的高度(30px),菜单栏设置具体的宽度(250px)。
			最外层下面div块的高度需要设置其父元素,即body和html的高度为100%,外边距为0。
			TESTSET行需要通过绝对定位使它浮在页面顶层,通过设置下面div块的上内边距为30px以及box-sizing:border-box和overflow:hidden来使不出现滚动条且撑满整个屏幕。
			
			菜单栏的设置同首行,设置具体的宽度和绝对定位使它浮在下面的最左边。同时设置右侧lower-right的左内边距为250px,以及box-sizing属性值为hidden和overflow属性值为hidden,使不出现滚动条。
			
			Container-fluid(包括首页行和项目图片块):设置宽度和高度均为父元素的100%,设置上内边距为30px(首行高度),左内边距为0,下内边距为100px(为页码块留出空间)box-sizing属性值为border-box。
			首页行:通过绝对定位使它漂在父元素的最上层(position和top)
			row项目块的高度是其父元素container-fluid块的高度减去首页行的具体高度30px、父元素为显示页码留出的具体高度100px剩余的空间高度。
			页码块:设置绝对定位和bottom、right使页码块漂在父级的右下方。

2.2  具体实现每个块

			首行:
				通过设置行高line-height属性值和行高height值一致30px,使文本垂直居中。
				通过设置img属性vertical-align值为middle,使图片垂直居中。
				通过将下拉框和“欢迎您,test”设置为行内元素span,然后设置span元素float属性值为right使它右靠齐,同时可设置适当的外边距使span元素看起来不太靠右。
			菜单页:
				通过设置无序列表ul,其中每个菜单行都是一个li。但要注意ul的默认样式
				ul,ol{
					Margin-left:40px;
					List-style-position:outside;
					}
					
					使用list-style-type:none;取消无序列表前的小圆点,设置margin和padding为0使文本完全左对齐。
				在li元素中,通过设置行高line-height和text-align属性值为center使菜单栏的文本水平居中。鼠标滑过出现小手的样式通过设置cursor属性值为pointer实现。
			首页行:
				对“首页”文本设置margin外边距使看起来不完全靠左。
			项目图片:
				通过给左侧菜单页设置id属性,一旦点击菜单,将在项目框中出现对应的项目图片、项目名称和创建人。

2.3 JS实现的两个功能

1.鼠标点击菜单1 变色;点击菜单2 变色且菜单1恢复原色
2.点击菜单1 右侧container-fluid出现1个图片  点击2 出现2个图片
给每个菜单栏设置一个id号,一旦点击则:
通过document.getElementById(id)获取当前的li元素,然后通过li元素的className属性(给它添加一个className属性代表的样式),即可实现功能1。当然,每次点击仍然需要判断上次点击的lastid是否是此次点击的id,如果是,则直接返回;反之,首先清除上个菜单栏的样式(通过document.getElementById(lastid).classList.remove("class名")),然后再次给当前的id元素所在标签添加样式(document.getElementById(id).className+="class类名":
        .liColor a {
            color: white;
            font-size: large;
        }

        .liColor {
            background-color: cyan;

        }


同理,动态加载图片的实现首先获取class属性值为row的div块,在这个块中分别创建div块(添加program-imgclass属性值,在这个class中设置背景图片以及图片的background-repeat属性、background-size属性、高度)、p元素(放置项目名称)、h5元素(放置创建者、通过绝对定位使它漂在背景图片的右下角):
        .col-sm-3 {
            border-radius: 25px;
            padding: 0 1%;
        }

        .col-sm-3 .program-img {
            background-image: url(./1.jpg);
            background-repeat: no-repeat;
            background-size: cover;
            border-radius: 25px;
            height: 150px;
            margin: 10%;
        }

        .program-img {
            position: relative;
        }

        .h5-creator {
            position: absolute;
            right: 5%;
            bottom: 5%;
        }

完整代码:

<!DOCTYPE html>
<html>

<head>
    <title></title>
    <meta charset="utf-8">
    <!-- 页面的高度和设备屏幕的宽度一致  初始缩放比为1:1    浏览器字体内容的缩放 minimum-scale=0.24-->
    <!-- <meta name="viewport" content="width=device-width,initial-scale=1.0"> -->

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- // jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
    <!-- 要实现的两个功能:1.鼠标点击菜单1 变色;点击菜单2 变色且菜单1恢复原色
        2.点击菜单1 右侧container-fluid出现1个图片  点击2 出现2个图片 -->
    <!-- 改进:
        颜色的变化:a.通过querySelector[All]获取   b.通过在样式中定义class样式(active),以及添加class属性来改变 
        图片显示的变化: a.通过添加class属性设置背景图片  b.通过点击菜单——造数据——渲染到前端(添加class属性,设置样式)-->

</head>

<body>
    <div class="header">
        TESTSET
        <img src="./2.png">
        <span>
            <select>
                <option selected="selected">中文</option>
                <option>English</option>
            </select>
            欢迎您,test
        </span>
    </div>
    <div class="lower">
        <div class="menu" id="menu">
            <ul>
                <li id="1" onclick="menuControlImgs('1')">
                    <a href="javascript:;" onclick="menuControlImgs('1')">菜单1</a>
                </li>
                <li id="2" onclick="menuControlImgs('2')">
                    <a href="javascript:;" onclick="menuControlImgs('2')">菜单2</a>
                </li>
                <li id="3" onclick="menuControlImgs('3')">
                    <a href="javascript:;" onclick="menuControlImgs('2')">菜单3</a>
                </li>
                <li id="4" onclick="menuControlImgs('4')">
                    <a href="javascript:;" onclick="menuControlImgs('2')">菜单4</a>
                </li>
                <li id="20" onclick="menuControlImgs('20')">
                    <a href="javascript:;" onclick="menuControlImgs('2')">菜单20</a>
                </li>
            </ul>
        </div>
        <div class="lower-right">
            
            <div class="container-fluid">
                <div class="homePage">
                    <p>首页</p>
                </div>
                <!-- 放置项目图片 -->
                <div class="row" id="row">
                </div>

            </div>
            <div class="pages">
                <ul>
                    <li>
                        <button type="button">1</button>
                    </li>
                    <li>
                        <button type="button">2</button>
                    </li>
                    <li>
                        <button type="button">3</button>
                    </li>
                    <li>
                        <button type="button">4</button>
                    </li>
                </ul>
            </div>
        </div>
    </div>
    </div>
    <script type="text/javascript">
        var lastId = null;//保存上一个id
        var flag = true;//标记第一次是否已添加
        //造数据
        function createData(index) {
            var array = new Array(index);
            for (var i = 0; i < index; i++) {
                var projectName = "项目" + i;
                var creator = "张" + i;
                console.log("creator=" + creator);
                var jsonObj = {
                    "projectName": projectName,
                    "creator": creator
                }
                array[i] = jsonObj;
            }
            return array;
        }

        //渲染图片
        function loadImg(array, num, row) {
            for (var i = 0; i < num; i++) {
                var divInner = document.createElement("div");
                divInner.className += "program-img";
                var p = document.createElement("p");
                p.innerText = array[i].projectName;
                var h = document.createElement("h5");
                h.innerText = array[i].creator;
                h.className += "h5-creator";
                var divOut = document.createElement("div");
                divOut.append(divInner);
                divInner.append(p);
                divInner.append(h);
                divOut.className += "col-sm-3";
                row.append(divOut);
            }
        }

        function menuControlImgs(id) {
            if (lastId == id) {
                return;
            }
            var num = parseInt(id);
            console.log("num=" + num);
            var array = createData(num);
            var li = document.getElementById(id);
            if (!flag) {
                //清除上一个菜单的样式
                document.getElementById(lastId).classList.remove("liColor");
                // document.getElementById(lastId).classList.remove("active");
            } else {
                lastId = id;
                flag = false;
            }
            //添加新的样式
            li.className += 'liColor';

            var row = document.getElementById("row");
            row.innerHTML = null;

            loadImg(array, num, row);
            lastId = id;//修改当前元素id
        }
    </script>
    <style>
        .liColor a {
            color: white;
            font-size: large;
        }

        .liColor {
            background-color: cyan;

        }

        .pinter {
            cursor: pointer;
        }

        .col-sm-3 {
            border-radius: 25px;
            padding: 0 1%;
        }

        .col-sm-3 .program-img {
            background-image: url(./1.jpg);
            background-repeat: no-repeat;
            background-size: cover;
            border-radius: 25px;
            height: 150px;
            margin: 10%;
        }

        .program-img {
            position: relative;
        }

        .h5-creator {
            position: absolute;
            right: 5%;
            bottom: 5%;
        }

        body {
            height: 100%;
            margin: 0;
        }

        html {
            height: 100%;
            margin: 0;
        }

        .header {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            line-height: 30px;
            height: 30px;
            border: 1px solid black;
            /* background-color: blanchedalmond;*/
            overflow: hidden;
            box-sizing: border-box;
            Z-index: 1;
        }

        div img {
            vertical-align: middle;
        }

        span {
            float: right;
            margin: 0 10px;
        }

        select {
            margin: 0 20px;
        }

        .lower {
            position: relative;
            width: 100%;
            box-sizing: border-box;
            height: 100%;
            overflow: hidden;
            padding-top: 30px;
        }

        .menu {
            width: 250px;
            height: 100%;
            position: absolute;
            left: 0;
            top: 30px;
            /* background-color: black; */
            border-right: 1px solid black;
            Z-index: 1;
        }

        .lower-right {
            position: relative;
            width: 100%;
            height: 100%;
            /* background-color: cadetblue; */
            padding-left: 250px;
            box-sizing: border-box;
            /* border-left:1px solid black; */
            overflow: hidden;
        }

        .row {
            height:100%;
            overflow-x: hidden;
            overflow-x: hidden;
        }

        .menu ul {
            width: 100%;
            list-style-type: none;
            margin: 0;
            padding: 0;
        }

        .menu ul li {
            text-align: center;
            line-height: 45px;
            /* border:1px solid white; */
            border-bottom: 1px solid black;
            cursor: pointer;
        }

        .menu ul li a {
            text-decoration: none;
        }

        .menu ul li:hover {
            background-color: cyan;
            color: white;
        }

        .menu ul li:hover a {
            color: white;
        }

        div .homePage {
            line-height: 30px;
            height: 30px;
            width: 100%;
            border-bottom: 1px solid black;
            position: absolute;
            top: 0;
            /* left:250px; */
            overflow: hidden;
        }

        div p {
            margin: 0 20px;
        }

        div .container-fluid {
            position: relative;
            width: 100%;
            height: 100%;
            padding-top: 30px;
            padding-bottom: 100px;
            box-sizing: border-box;
            padding-left:0;
        }

        .creator {
            position: absolute;
            bottom: 10%;
            right: 5%;
        }

        .lower-right .pages {
            position: absolute;
            right: 3%;
            height: 50px;
            bottom: 3%;
        }

        .pages ul {
            /* float: right; */
            list-style-type: none;
            /* margin-right: 100px; */
        }

        .pages ul li {
            float: left;
            margin: 10px;
        }
    </style>

</body>

</html>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值