关于本章节案例问题总结

关于本章节案例问题总结

1.我设置position: fixed;right: 20px;bottom: 20px;是为了让在刚打开的时候方块就显示在右下角,而老师的修改并没有这个效果,请问如何修改?

https://class.imooc.com/course/qadetail/200501

2.关于父容器100%宽度的问题,我又思考了,发现一个问题

如下两种写法效果是等价的,唯一的区别是盒子box的宽度不一样,请问老师将box宽度设置为100%,在这里是96px装下所有子容器,目的是什么?(原理是一样的)

http://img1.sycdn.imooc.com//climg/5e645b6909afb9ab06720792.jpg

http://img1.sycdn.imooc.com//climg/5e645b880913b53f06820823.jpg

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
	*{margin: 0;padding: 0;box-sizing: border-box;}
	.container{width: 100px;height: 100px;border: 2px solid black;margin: -2px;}	
	.box{width: 300%;height: 100%;display: flex;}
	.item{flex: 1;}
</style>
</head>

<body>
	<div class="container">
		<div class="box">
			<div class="item" style="background-color: red">1</div>
			<div class="item" style="background-color: yellow">2</div>
			<div class="item" style="background-color: blue">3</div>
		</div>
	</div>
</body>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
	*{margin: 0;padding: 0;box-sizing: border-box;}
	.container{width: 100px;height: 100px;border: 2px solid black;margin: -2px;}	
	.box{width: 100%;height: 100%;display: flex;}
	.item{flex-shrink: 0;width: 100%;}
</style>
</head>

<body>
	<div class="container">
		<div class="box">
			<div class="item" style="background-color: red">1</div>
			<div class="item" style="background-color: yellow">2</div>
			<div class="item" style="background-color: blue">3</div>
		</div>
	</div>
</body>
</html>

3.第二个问题由于使用了box-sizing: border-box;为了看到黑色边框,明显看到效果,我设置了margin: -2px;但是对这里的负值有点晕,老师能不能详细讲解下margin负值的用法及原理?

(之前老师上课时用过)

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕言 2020-03-09 16:18:12

同学你好,关于同学的疑问,解答如下:

1、不要想的太复杂了,可以简单理解为宽度设置为100%,是水平铺满屏幕。

2、在3-1 实现栅格系统--基础部分这节中,21分45秒处,内容有间距,如下图:

http://img1.sycdn.imooc.com//climg/5e65f96409ab6acb01410107.jpg

设置margin为负值之后,会往两边扩展,效果如下:

http://img1.sycdn.imooc.com//climg/5e65fae0096180bc01120089.jpg

如果还有其他疑问,建议在问答区重新提问,便于后期查找总结

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

好帮手慕言 2020-03-08 19:55:24

同学你好,关于同学的疑问,解答如下:

1、老师讲解的已经很详细了,同学可以反复琢磨一下老师的每一句话,再理解下

https://class.imooc.com/course/qadetail/200449

如果对flex布局不太了解,可以去看下视频,复习下知识。

2、关于margin负值,可以把视频的那一节几分几秒说明一下,老师根据实际情况帮助解答。

3、底部边界限制实现没有问题的,因为页面设置了固定高度2000px,存在滚动条,所以同学测试起来感觉是边界限制有问题。可以调整下body的高度,如下:
http://img1.sycdn.imooc.com//climg/5e64dc8c092d92b304510377.jpg

4、使用老师提供的代码测试,点击下方红框的手机图标之后,要刷新一下页面

http://img1.sycdn.imooc.com//climg/5e64dcbd093e884808920059.jpg

因为同学一次提问很多问题,同学后期总结的时候不是很方便,建议:如果还有其他疑问,可以新建问题呦。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 迷失的小麦 #1
    1.所以我想知道的是老师将box宽度设置为100%,装下所有子容器,目的是什么? 2.margin负值的视频:响应式布局-3-1 实现栅格系统--基础部分-23:05
    2020-03-09 09:40:55
好帮手慕言 2020-03-08 16:46:30

同学你好,关于同学的疑问,解答如下:
1、可以参考下方:

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport"
        content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1, minimum-scale=1">
    <title>无标题文档</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            width: 100%;
            height: 2000px;
            background-color: pink;
        }

        #div {
            width: 50px;
            height: 50px;
            background-color: red;
            line-height: 50px;
            text-align: center;
            color: white;
            position: fixed;
            right: 20px;
            bottom: 20px;
        }
    </style>
</head>

<body>
    <div id="div">&uarr;</div>
    <script>
        var box = document.getElementById('div');
        drag(box, {
            x: true,
            y: true
        });

        function drag(ele, options) {
            options.x = typeof options.x !== 'undefined' ? options.x : true;
            options.y = typeof options.y !== 'undefined' ? options.y : false;
            if (!options.x && !options.y) return;

            const elemWidth = ele.offsetWidth; // 元素的宽度
            const elemHeight = ele.offsetHeight; // 元素的高度

            const screenWidth = document.documentElement.clientWidth || window.innerWidth; // 可视区域宽度
            const screenHeight = document.documentElement.clientHeight || window.innerHeight; // 可视区域高度

            const elemLeft = ele.offsetLeft; // 元素左边距离屏幕左边的距离
            const elemRight = screenWidth - elemWidth - elemLeft; // 元素右边距离屏幕右边的距离
            const elemTop = ele.offsetTop; // 元素顶边距离屏幕顶边的距离
            const elemBottom = screenHeight - elemHeight - elemTop; // 元素底边距离屏幕底边的距离

            var curPoint = {
                x: 0,
                y: 0
            };
            var startPoint = {};
            var movePoint = {

            };
            var diffPoint = {};
            var isTouchMove = false; //当手指没有移动的时候,不执行handleMove函数


            ele.addEventListener('touchstart', handleTouch, false);
            ele.addEventListener('touchmove', handleMove, false);
            ele.addEventListener('touchend', handleEnd, false);



            function handleTouch(event) {
                var touch = event.changedTouches[0];
                startPoint.x = touch.pageX;
                startPoint.y = touch.pageY;
            }

            function handleMove(event) {
                event.preventDefault(); //防止触发默认事件,即在Y轴移动的时候并没有移动目标的位置,而是滚动条发生了变化

                isTouchMove = true;

                var touch = event.changedTouches[0];
                diffPoint.x = touch.pageX - startPoint.x; 
                diffPoint.y = touch.pageY - startPoint.y;

                let moveX = diffPoint.x + curPoint.x;
                let moveY = diffPoint.y + curPoint.y;
                let elemLeftDis = elemLeft + moveX;
                let elemRightDis = elemRight - moveX;
                let elemTopDis = elemTop + moveY;
                let elemBottomDis = elemBottom - moveY;

               
                if (options.x) {

                    if (elemLeftDis <= 0) {
                        movePoint.x = -elemLeft;
                    } else if (elemRightDis <= 0) {
                        movePoint.x = elemRight;
                    } else {
                        movePoint.x = moveX;
                    }

                }
                if (options.y) {
                    if (elemTopDis <= 0) {
                        movePoint.y = -elemTop;
                    } else if (elemBottomDis <= 0) {
                        movePoint.y = elemBottom;
                    } else {
                        movePoint.y = moveY;
                    }
                }

                move(ele, movePoint.x, movePoint.y);
            }

            function handleEnd(event) {
                if (!isTouchMove) return;

                var touch = event.changedTouches[0];

                curPoint.x = movePoint.x
                curPoint.y = movePoint.y

                isTouchMove = false;
            }

            function move(ele, x, y) {
                x = x || 0;
                y = y || 0;
                ele.style.transform = 'translate3d(' + x + 'px,' + y + 'px, 0)'
            }
        }
    </script>
</body>

</html>

使用上方的方式,代码中会有很多计算,如果不懂的,可以打印下看结果,建议:为了考虑代码量,建议同学可以参考另一种写法:https://class.imooc.com/course/qadetail/200501

2、代码具有灵活性,实现效果的方式有很多种。同学是在哪里看到的这段代码呢?老师根据具体需求分析

3、给元素设置margin-top或者margin-left为负值,元素会往上和往左移动,如下:

http://img1.sycdn.imooc.com//climg/5e64af4a094d14c404610619.jpg

效果:

http://img1.sycdn.imooc.com//climg/5e64af5309ea343402640265.jpg

设置边距之后:
http://img1.sycdn.imooc.com//climg/5e64af67097c2d8704110241.jpg

效果:

http://img1.sycdn.imooc.com//climg/5e64af72092a56e002330186.jpg

为了印象更深刻,同学可以测试下

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 迷失的小麦 #1
    第二个问题老师上课用的是盒子宽度100%,可是我自己想法是3张图片就是300%,曾经提问过,没弄明白为什么老师用的是100%? https://class.imooc.com/course/qadetail/200449 第三个问题老师在上课时讲解栅格系统用到了margin负值,不太理解,好像是起到了增加元素宽度的作用,不知什么原因
    2020-03-08 17:18:11
  • 提问者 迷失的小麦 #2
    第一个问题我自己写的代码我又测试了,下边界,也就是我希望不超出可视区域的下边界,可是我的代码超出去了,还请老师指点下。 https://class.imooc.com/course/qadetail/200501 而老师的代码我还没细看,但是效果不对,左边界和上边界超出去了
    2020-03-08 17:21:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师