大家好,不知道你们是否和我一样存在这样的困惑呢,虽然 CSS 入门容易,但是其内容太多,好多属性看了似是而非,觉得自己看懂了,到自己用的时候又犯难了,看到漂亮的效果还是无从下手,这主要还是自己对新属性亲自动手实践的练习太少啦,因此不能进行灵活应用。不可否认 CSS 总让一些人找不到感觉,其实学好 CSS 真的没有太多的捷径,和JS 编程一样,要同等重视对待,不要因为简单而忽视,要多看和多练,因为现在的 CSS 不再是以前的 CSS 啦。

比如这两本书《 CSS 权威指南第四版》,1000多页,买了好几个月我到现在还没看完,文字实在太枯燥了,看完了忘,忘了继续看,实在看不下去,不知道大家有没有同样的感受呢?

好了,废话不多说,今天我们要做的一个案例就是做一个常见的例子:在不少网站右侧都有一个固定浮动的留言图标,我们点击这个图标,就会侧滑显示留言内容面板。你也许会说这个不简单吗,使用 JQ 就能轻松实现,但是我想说的是,为了网站的性能,能用 CSS 实现的尽量不要用 JS ,因为现在CSS已足够强大。

今天这个例子,我们将使用纯CSS实现这个效果,这里我们将用到“CSS checkbox hack”的技术,效果如下图所示:

一、创建 HTML 结构

基于上面的效果图,我们要创建三个元素,一个 checkbox 元素以及对应的 label 标记,和一个表单面板元素。

这里用到了一个 CSS 特性值得大家关注下:<label> 标签的 for 属性用于指定与哪个表单元素进行关联,扩大表单元素的点击区域,我们点击 label 元素标记,其对应的表单元素将会被聚焦选中。

这个特性是我们实现这个案例的技巧之一,再结合 CSS checkbox 的伪类选择器进行留言面板的显示与隐藏,这样我们就可以摆脱 JS 来实现这个案例。

基于以上思路 ,我们开始动手吧,首先我们先放置 checkbox,和其对应的 label,最后添加表单面板和相关的表单元素。

我们将通过表单的 id 属性与表单中label元素的 for 值与其关联,最终我们完成了 HTML 结构如下段代码所示:

<input type="checkbox" id="mycheckbox">
<label for="mycheckbox" class="feedback-label">FEEDBACK</label>
<form class="form"><div><label for="fullname">Full Name</label><input type="text" id="fullname"></div><div><label for="email">Email</label><input type="email" id="email"></div><div><label for="comment">Comment</label><textarea id="comment"></textarea></div><div><button type="submit">Send</button></div>
</form>

完成后的效果图如下,是不是很难看呢,????????????,不用担心,后面我们来进行美化:

二、定义基础的样式

现在我们开始添加一些基础的 CSS 的样式,这里我们用到了 CSS 自定义变量,方便我们全局修改,还有一些 reset 规则,和表单的基础规则样式,示例代码如下:

:root {--white: white;--gradient: linear-gradient(-45deg, #FFA600 0%, #FF5E03 50%);--form: #eeefef;--border-radius: 4px;--form-width: 500px;--form-mob-width: 320px;
}* {padding: 0;margin: 0;box-sizing: border-box;
}body {font: 20px/1.5 sans-serif;background: var(--white);
}h1 {font-size: 2rem;text-align: center;margin-top: 20vh;
}button,
label {cursor: pointer;
}label {display: block;
}button,
input,
textarea {font-family: inherit;font-size: 100%;border: none;
}textarea {resize: none;
}

三、 定义表单元素相关样式

1、由于 checkbox 这个元素在案例中无需显示,我们只是用其的伪类特性结合 label 控制留言面板的显示与隐藏,因此我们需要将其移出可视区域,记住这里不能用隐藏属性(display:none)。示例代码如下:

[type="checkbox"] {position: absolute;left: -9999px;
}

2、接下来,我们需要添加这些CSS操作:

  • 使用 fix 属性将 checkbox 对应的 label 标签元素固定在右侧的中央。

  • 垂直显示“FEEDBACK”文本。

  • 隐藏表单面板,我们这里将其往右移动其宽度的 100% 的距离,并垂直居中。

对应的CSS代码如下:

/*CUSTOM VARIABLES HERE*/
.feedback-label,
.form {position: fixed;top: 50%;right: 0;
}.feedback-label {transform-origin: top right;transform: rotate(-90deg) translate(50%, -100%);z-index: 2;
}.form {width: var(--form-width);max-height: 90vh;transform: translate(100%, -50%);padding: 30px;overflow: auto;background: var(--form);z-index: 1;
}

小提示:

1、这里需要强调的是 feedback-label 样式,在其垂直变换时,我们先逆时针进行了旋转,其 x ,y 轴的方向也是随着旋转的,所以是translate(50%, -100%),将其垂直居中。

2、在 form 样式里,我们使用 transform 方法,translate(100%, -50%) 将其移出页面显示区域。

3、我们继续,大家不要着急,马上就快完成了,我们需要将页面弄的漂亮些,添加一些样式,示例代码如下:

/*CUSTOM VARIABLES HERE*/.feedback-label,
.form input,
.form textarea,
.form button {border-radius: var(--border-radius);
}.feedback-label,
.form button {background: var(--gradient);color: var(--white);
}.feedback-label:hover,
.form button:hover {filter: hue-rotate(-45deg);
}.feedback-label {padding: 5px 10px;border-radius: var(--border-radius) var(--border-radius) 0 0;
}form div:not(:last-child) {margin-bottom: 20px;
}form div:last-child {text-align: right;
}.form input,
.form textarea {padding: 0 5px;width: 100%;
}.form button {padding: 10px 20px;width: 50%;max-width: 120px;
}.form input {height: 40px;
}.form textarea {height: 220px;
}

小提示:这里我们的背景色用到了 linear-gradient() 线性渐变,实现了一个漂亮的颜色渐变背景。还有一个 CSS3 语法需要关注下:hue-rotate,色调旋转滤镜,方便我们改变当前的颜色。

四、使用CSS选择器,实现表单面板的切换和隐藏

我们通过点击 checkbox 对应的 label 标签进行切换和显示留言面板,这里我们用到了 :checked 伪类,以及 ~(后续同胞选择器)和 +(紧邻同胞选择器),辅助元素的选择进行样式变换,示例代码如下:

[type="checkbox"]:checked + .feedback-label {transform: rotate(-90deg) translate(50%, calc((var(--form-width) + 100%) * -1));
}[type="checkbox"]:focus + .feedback-label {outline: 2px solid rgb(77, 144, 254);
}[type="checkbox"]:checked ~ .form {transform: translate(0, -50%);
}.feedback-label,
.form {transition: all 0.35s ease-in-out;
}

这里有几个样式规则我们需要聊一下:

  1. translate(50%, calc((var(--form-width) + 100%) * -1)); 这个样式是不是有些复杂,其实也不难,就是多加了一个表单面板的宽度,由于旋转后,y轴变成了水平轴,向左移动相当Y轴往上移动,因此是负值,需要乘-1。

  2. 第二个选择器,我们之所以加个选中后的 outline 轮廓属性,主要是为了方便那些习惯键盘操作的用户,当其使用 Tab 键选择 feedback label元素时,然后再使用 Space 空格键就能很方便的打开留言面板进行切换。

  3. 第三个选择器,我们使用 transform: translate(0, -50%); 将 X 轴更改成0,恢复成最开始的位置,这样我们的留言面板内容就能显示出来。

五、处理响应式问题

最后,特别重点提示下,我们做页面要考虑页面响应式适配的问题,这里我们需要针对手机设备做一些样式的调整,比如更改表单面板的宽度由原来的 500px 调整到 320px,以及初始字体的大小,调整成16px。

最终添加的响应式代码如下:

/*CUSTOM VARIABLES HERE*/@media screen and (max-width: 600px) {body {font-size: 16px;}.form {padding: 15px;width: var(--form-mob-width);}form div:not(:last-child) {margin-bottom: 10px;}[type="checkbox"]:checked + .feedback-label {transform: rotate(-90deg) translate(50%, calc((var(--form-mob-width) + 100%) * -1));}
}

六、小节

好了,到这里,我们的案例就全部完成了,你可以欣赏下自己完成的杰作啦,实现起来是不是很简单呢,最后我还是建议大家亲自动手实践一遍,这样才能加深对本案例用到的CSS属性的理解。

最终完成的效果,大家可以点击 阅读原文 链接进行体验。

今天的内容就和大家分享到这里,感谢你的阅读,如果你喜欢我的分享,麻烦给个关注、点赞加转发哦,你的支持,就是我分享的动力,后续会持续分享 CSS 常用案例和技巧,欢迎持续关注。

七、延伸阅读

这30个CSS选择器,你必须熟记(上)

这30个CSS选择器,你必须熟记(中)

这30个CSS选择器,你必须熟记(下)

使用 CSS Checkbox Hack 技术制作一个手风琴组件

专注分享当下最实用的前端技术。关注前端达人,与达人一起学习进步!

长按关注"前端达人"

动手练一练,用纯 CSS 制作一款侧滑显示留言面板的网页组件相关推荐

  1. css空心三角形_纯CSS制作空心三角形和实心三角形及其实现原理

    纯CSS制作空心三角形和实心三角形及其实现原理 在一次项目中需要使用到空心三角形,我瞬间懵逼了.查阅了一些资料加上自己的分析思考,终于是达到了效果,个人感觉制作三角形是使用频率很高的,因此记录下来,供 ...

  2. 纯CSS制作的图形效果

    纯CSS制作的图形效果 很少会有人意识到,当浏览器绘制的border,会有一个角度的问题.我们就是得用这样的一个技巧来制作三角的效果.我们只需要保证一边的边框是有色,其他边框色为透明色,这样我们就很容 ...

  3. html怎么实现聊天界面设计,纯css制作仿微信聊天页面

    纯css制作仿微信聊天页面 *{ margin: 0; padding: 0; } body{ font-size: 14px; } .triangle{ margin: 100px auto ; w ...

  4. 纯Css制作tab选项卡

    Css本身的功能就很强大的,尤其是Css3出来之后,大部分特效只用Css3就能完成了,无需再费心思去研究js.jQuery该怎么怎么去写,代码简洁方便.下面这个是用纯Css制作的tab选项卡效果: 用 ...

  5. 纯css制作遮罩层特效

    css本身的功能就挺强大的,尤其是css3出来之后,大部分特效只用css3就能完成了,无需再费心思去想js怎么怎么做jQuery怎么怎么做.下面是用纯css制作的遮罩层效果: 原始页面,放了三张图片: ...

  6. 如何使用纯 CSS 制作四子连珠游戏

    序言:你是否想过单纯使用 CSS 也可以制作一款游戏?甚至可以双人对决!这是一篇非常有趣的文章,作者详细讲解了使用纯 CSS 制作四子连珠游戏的思路以及使用奇淫巧技解决困难问题的方法.因为案例本身比较 ...

  7. 纯CSS制作自适应分页条-分享------彭记(019)

    纯css制作自适应分页条 效果图: html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  8. 纯css制作三级下拉菜单

    css本身的功能就挺强大的,尤其是css3出来之后,大部分特效只用css3就能完成了,无需再费心思去想js怎么怎么做jQuery怎么怎么做,代码简洁质量轻巧.下面是本人用纯css制作的三级下拉菜单效果 ...

  9. 纯CSS制作3D旋转风车动画效果

    效果图展示        HTML源码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"&g ...

最新文章

  1. 【PAT乙级】1085 PAT单位排行 (25 分)
  2. aspnet_regsql在哪里 怎么运行它 以及功能介绍
  3. 第三次学JAVA再学不好就吃翔(part21)--局部变量与成员变量
  4. 如何使用SAP UI5 SDK网站查询指定控件的属性如何使用
  5. linux隐藏apache信息,Apache防盗链和隐藏版本信息-linux-centos运维
  6. 用Apache HttpClient实现URL重定向
  7. 学会提问,你就成功了一大半!
  8. MyBatis mapper parameterType
  9. 使用Rufus制作安装U盘报错,使用UltraISO成功
  10. php接收url的json,api-php中url接收的json数据,json_decode为空
  11. 佳能打印机 Cannon G2810 维护修复方法
  12. app如何控制手机横屏
  13. 春日街拍夯货 原来你离时尚只有一道水波纹的距离
  14. LaTex在线编辑工具overleaf在英文模板中输入中文
  15. 9大增长黑客牛人组织盘点,增长黑客发展奠基人!
  16. java插入图片_如何在java窗体程序中添加图片
  17. 1700页!!我把 Java《八股文》肝完了...
  18. 我理解的myisam引擎之二 MyISAM表(MYD)存储格式
  19. Java--JAVA_HOME环境变量的配置
  20. 什么是DDX,DDY,DDZ?

热门文章

  1. 增加了网上商品比价搜索功能
  2. Google宣布收购摩托罗拉移动
  3. LVGL 8.2 meter控件实现模拟时钟
  4. 知乎学习读博经验总结
  5. 远程连接相关命令行(windows)
  6. 十八.用户注册 ---- 用户名/用户密码/手机号验证 2021-04-07
  7. unity撤销上一步_Unity3D撤回命令开发详解|chu
  8. 什么是电源域(power domain)
  9. 2012年6月9日免费http代理大全
  10. 用matplotlib作图时,如何将坐标轴设置成对数坐标?