批改状态:合格
老师批语:
浮动的初心是为了解决图片与文本并排显示的问题
<h1>浮动的本质</h1><div class="box"><!-- 浮动的初心是为了解决图片与文本并排显示的问题 --><img src="https://img.php.cn/upload/course/000/000/001/5fae4f08a043a576.png" alt="图片"><div class="desc"><h2>第十四期_前端开发</h2><p>php中文网第十四期前端开发部分学习目标:1、HTML5+CSS3基础知识与实战; 2、完成网站所有静态页面布局;重点:弹性布局与网格布局;3.JavaScript、jQuery、ES6基础与实战;4.Vue.js基础与实战</p><a href="">了解详情</a></div></div>
<style>* {margin: 0;padding: 0 box-sizing: border-box;}.box {padding: 1em;border: 1px solid #000;}.box img {width: 28em;/* 圆角 */border-radius: 0.5em;/* 图片向左浮动,后面的文本会围绕着它水平排列 ,浮动本质*//* 也可以右浮动 *//* 浮动元素不会影响到它前面的元素,只会影响到它后面的元素排列浮动元素只会水平方向排列浮动元素脱离文档流(部分脱离文档流,并非完全脱离,只对后面的元素有影响)所有元素一旦浮动都具备了块级元素的特征 */float: left;margin-right: 2em;}.box .desc a {/* a标签是行内元素设置宽应该没有效果,但是一旦浮动后宽高就起作用了 */width: 12em;height: 2em;background-color: lightgreen;float: left;}</style>
总结:
1. 浮动只限于水平方向2. 浮动元素脱离文档流,后面元素会上移填充它原来的空间3. 浮动元素不会影响到它前面元素的布局,只会影响到它后面的元素排列4. 任何元素(包括行内元素)浮动后,都具备了块级元素的特征
父元素计算高度的时候会忽略内部的浮动元素(父级高度的塌陷),怎么解决呢?
方案1. 附加元素。添加一个额外元素
<!-- 在需要清除的元素后面新增一个元素,没有实际的意义就是清除浮动 --><div class="clear"></div>
.clear {clear:left;}
方案1有些问题,所有的DOM元素都是由用的尽量不要写没有作用的元素;还存在一定的风险;另外在遍历元素取值时也需要有额外的工作来处理这些元素;代码不够简洁和优雅。
方案2. 伪元素
什么是伪元素:html中没有元素,通过css强制加上去的元素
.box:after{content:'';display: block;/* 左右都清除 *//* clear:left;clear:right; */clear:both;}
通过伪元素的方式优雅的解决了浮动父元素高度塌陷的问题
当浏览器窗口达到一定宽度时,文字会包裹图片,而需求是图片和文本分别布局互不影响,右边的文本不受左边图片的影响,如何做?
.box .desc {overflow: hidden;}
子元素可以使用overflow: hidden;那么父元素是否可以可以使用它来消除浮动的影响呢?
方案3. 不使用伪元素
.box .desc {overflow: hidden;}.box {overflow: hidden;}
优雅方便的解决了父元素高度塌陷问题。
总结:
浮动的本质是为了解决图文并排显示问题
创建BFC的方式: 任何一个元素添加上以下任何一个属性后就是是一个BFC容器
浮动以后会很少使用,因为在弹性盒子和grid中是失效的。
定位类型:静态定位static,相对定位relative,绝对定位absolute,固定定位:fixed
position:relative;position:absolute就是定位元素
只有定位元素才有资格充当定位祖先元素(定位参考,定位父级)固定定位一般用在:在线客服,广告位等,要慎重,因为会影响用户体验
综合应用:实现一个简易的带蒙板的登录框
<header><h2>我的博客</h2><button>登录</button><link rel="stylesheet" href="style.css"></header><!-- 模态框 --><div class="modal"><!-- 蒙板:用来盖住后面的内容,使他半透明 --><div class="modal-backdrop"></div><!-- 主体 --><div class="modal-body"><button class="close">关闭</button><form action="" method="post"><table><caption>用户登录</caption><tr><td><label for="email">邮箱</label></td><td><input type="text" name="email"></td></tr><tr><td><label for="password">密码</label></td><td><input type="password" name="password"></td></tr><tr><td></td><td><button>登录</button></td></tr></table></form></div></div><script src="modal.js"></script>
* {padding: 0;margin: 0;box-sizing: border-box;}/* 页眉 */header {background-color: #ccc;padding: .5em 2em;overflow: hidden;}header h2 {float: left;}header button {float: right;width: 10em;height: 2.5em;}header button:hover {cursor: pointer;background-color: #fff;}/* 模态框 *//* 蒙板 */.modal .modal-backdrop {background:rgb(0,0,0,0.5);position: fixed;top: 0;left: 0;right: 0;bottom: 0;}.modal .modal-body {padding: 1em;min-width: 25em;border: 1px solid #000;background: linear-gradient(to right, green, #efefef);/* 固定定位 */position: fixed;top: 5em;left: 30em;right: 30em;}.modal form table {width: 80%;}.modal form table caption {font-weight: bold;margin-bottom: 1em;}.modal form table td {padding: 0.5em;}.modal form table td:first-of-type {width: 5em;}.modal form table input {width: 20em;height: 2em;}.modal form table button {width: 20em;height: 2.5em;}/* 定位父级 */.modal-body {position: relative;}.modal .close {position: absolute;width: 4em;height: 2em;top: 1em;right: 1em;}.modal .close:hover {cursor: pointer;background-color: red;color: white;}/* 页面初始化时,模态框应该隐藏 */.modal {display: none;}
const btn = document.querySelector('header button');const modal = document.querySelector('.modal');const close = document.querySelector('.close');btn.addEventListener('click',setModal,false);close.addEventListener('click',setModal,false);function setModal(ev){ev.preventDefault();let status = window.getComputedStyle(modal,null).getPropertyValue('display');modal.style.display = status === 'none' ? 'block' : 'none';}
总结:定位应用很广泛也很实用。难点是position属性的几个值的参考对象。其他深层次的领悟需要后续多摸索。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号