关于本章节案例问题总结
1.我设置position: fixed;right: 20px;bottom: 20px;是为了让在刚打开的时候方块就显示在右下角,而老师的修改并没有这个效果,请问如何修改?
https://class.imooc.com/course/qadetail/200501
2.关于父容器100%宽度的问题,我又思考了,发现一个问题
如下两种写法效果是等价的,唯一的区别是盒子box的宽度不一样,请问老师将box宽度设置为100%,在这里是96px装下所有子容器,目的是什么?(原理是一样的)


<!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
同学你好,关于同学的疑问,解答如下:
1、老师讲解的已经很详细了,同学可以反复琢磨一下老师的每一句话,再理解下
https://class.imooc.com/course/qadetail/200449
如果对flex布局不太了解,可以去看下视频,复习下知识。
2、关于margin负值,可以把视频的那一节几分几秒说明一下,老师根据实际情况帮助解答。
3、底部边界限制实现没有问题的,因为页面设置了固定高度2000px,存在滚动条,所以同学测试起来感觉是边界限制有问题。可以调整下body的高度,如下:
4、使用老师提供的代码测试,点击下方红框的手机图标之后,要刷新一下页面

因为同学一次提问很多问题,同学后期总结的时候不是很方便,建议:如果还有其他疑问,可以新建问题呦。
如果我的回答帮到了你,欢迎采纳,祝学习愉快~
同学你好,关于同学的疑问,解答如下:
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">↑</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为负值,元素会往上和往左移动,如下:

效果:

设置边距之后:
效果:

为了印象更深刻,同学可以测试下
如果我的回答帮到了你,欢迎采纳,祝学习愉快~
- 参与学习 人
- 提交作业 622 份
- 解答问题 6815 个
微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。
了解课程


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星