


Commonly used Mixin encapsulation example codes for CSS study notes_CSS tutorial_CSS_Web page production
CSS预处理技术现在已经非常成熟,比较流行的有Less,Sass,Stylus,在开发过程中提升我们的工作效率,缩短开发时间,方便管理和维护代码,这篇文章主要给大家分享介绍了关于CSS学习笔记之常用Mixin封装的相关资料,需要学习CSS的朋友们下面随着小编来一起学习学习吧。
前言
为了有效的维护和开发项目,代码的重复利用就显得尤为重要。在Sass中,除了@import和@extend可以使你的代码更加具有重复利用性,@mixin指令也同样能提高你代码的重复使用率并简化你的代码。个人在做项目的过程中总结归纳的一些常用Mixin,现在分享出来供大家学习。
基于Less编写。但是CSS预处理器都是相通的,你可以很轻易的修改成Sass、Stylus
代码免不了错误和Bug,如果你能帮我修改或者补充 万分感谢!!
参考了一些开源库,如:est、csslab等
Usage
/** * 作品:mixin.less * 更新:2017年12月14日 * 简介:1. 一个基于 Less 的样式工具库,封装了常用 mixin,帮助您更轻松地书写 Less 代码。 * 2. 只在调用时才输出代码,减少代码冗余,避免样式污染 * 3. 不自带兼容前缀,减少代码量,而建议采用工具生成,如 postcss、Autoprefixer、less-plugin-autoprefix 等 * 4. 附带 IE 各类 Hack */ /*------------------------------------- ├ 布局 ┆ └------------------------------------*/ // 盒子宽高 .size(@w, @h) { width: @w; height: @h; } // 最小尺寸, 兼容IE6 .min-width(@min-w) { min-width: @min-w; _width: @min-w; } .min-height(@min-h) { min-height: @min-h; _height: @min-h; } // 内联块级元素, 兼容IE6 .dib() { display: inline-block; *display: inline; *zoom: 1; } // 固定定位, 兼容IE6 .fixed() { position: fixed; _position: absolute; *zoom: 1; } // 统一盒模型 .border-box() { *, *:after, *:before { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } } // 文字图片居中 .center(text-x) { text-align: center; } .center(text-y) { display: table-cell; vertical-align: middle; } // 块级元素水平居中 .center(auto-x) { display: block; margin-left: auto; margin-right: auto; } // 居中, 不确定尺寸, 不兼容 IE6 .center(unknown) { position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; } .center(unknown-x) { position: absolute; left: 0; right: 0; margin-left: auto; margin-right: auto; } .center(unknown-y) { position: absolute; top: 0; bottom: 0; margin-top: auto; margin-bottom: auto; } // 居中, 确定尺寸, 兼容 IE6 .center(known, @w, @h) { .size(@w, @h); position: absolute; top: 50%; left: 50%; margin-top: -(@w / 2); margin-left: -(@h / 2); } .center(known-x, @w) { width: @w; position: absolute; left: 50%; margin-left: -(@h / 2); } .center(known-y, @h) { height: @h; position: absolute; top: 50%; margin-top: -(@w / 2); } // 居中, CSS3 平移方式, 兼容性不行 .center(translate) { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } // 居中, Flex 方式, 兼容性不行 .center(flex) { display: flex; align-items: center; justify-content: center; } // 多个子项布局 .list(float, @w: 25%) { float: left; width: @w; } .list(inline, @w: 25%) { .dib(); width: @w; } .list(flex) { flex: 1; } // 遮罩层, 全屏遮罩、区域遮罩 .over-screen(fixed) { .fixed(); top: 0; left: 0; right: 0; bottom: 0; } .over-screen(absolute) { position: absolute; top: 0; left: 0; right: 0; bottom: 0; } // 容器宽高比固定 // 100* 1/1 = 100% // 100* 3/4 = 75% .fixed-ratio(@padding-top: 100%) { position: relative; width: 100%; height: 0; padding-top: @padding-top; img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } } // 扩展点击区域 .extend-click() { position: relative; &:before { content: ''; position: absolute; top: -10px; left: -10px; right: -10px; bottom: -10px; } } // 定宽居中页面布局 .layout-page(@width: 1200px) { width: @width; margin-left: auto; margin-right: auto; } // 侧边栏 // 主要区域:overflow: hidden; margin-left: xx; margin-right: xx; .sidebar(left, @width) { position: absolute; top: 0; left: 0; width: @width; } .sidebar(right, @width) { position: absolute; top: 0; right: 0; width: @width; } /*------------------------------------- ├ 字体 ┆ └------------------------------------*/ // 字体大小 .fz(@fz) { font-size: @fz; } // 字体大小与行高 .fz(@fz, @lh) { font-size: @fz; line-height: @lh; } // 字体大小、行高、高度 .fz(@fz, @h, @lh: @h) { font-size: @fz; height: @h; line-height: @lh; } // 行高与高度 .lh(@h, @lh: @h) { height: @h; line-height: @lh; } // 字体颜色, 包括链接与非链接 .color(@color) { color: @color;} // 字体颜色 + 自身 Hover .color(@color, @hovercolor) { color: @color; &:hover { color: @hovercolor; } } // 字体颜色 + 链接 Hover .color(@color, @acolor, @hovercolor) { color: @color; a { color: @acolor; &:hover { color: @hovercolor; } } } // 正常字体样式 .normal-font() { font-weight: normal; font-style: normal; } // 辅助性文字(灰色) .assist-font(@color: #b0b0b0, @fz: 14px) { color: @color; font-size: @fz; } // 禁止换行, 文本溢出省略号显示 (一行) .ellipsis() { white-space: normal; word-wrap: break-word; word-break: break-all; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis; text-overflow:ellipsis; overflow:hidden; } // 文本溢出省略号显示 (多行) // 只支持 webkit 浏览器, 解决方案:高度 = 行高*行数 // height: 90px; line-height: 30px; -webkit-line-clamp: 3; .ellipsis-mult(@n: 3) { display: -webkit-box; -webkit-box-orient: vertical;-webkit-line-clamp: @n; word-break: break-all; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis; text-overflow:ellipsis; overflow: hidden; } // 书写模式:牌匾从右至左水平单行排版效果、文笺从右至左、从上至下排版效果 .retext(x) { direction: rtl; unicode-bidi: bidi-override; } .retext(y) { writing-mode: tb-rl; writing-mode: vertical-rl; } // 文字透明 .transparent-text() { font: 0/0 serif; text-shadow: none; color: transparent; } // 文字隐藏(常用于SEO优化) // <a href="" title="Logo SEO 优化 "><h1 class="logo">xx</h1></a> .hidden-text() { text-indent : -9999px; overflow: hidden; text-align: left; } // 文字外发光效果 .glow-text(@r: 10px, @color: gold) { text-shadow: 0 0 @r @color; } /*------------------------------------- ├ 图像 ┆ └------------------------------------*/ // 用 max-width 来防止图片撑破容器 .max-img() { display: block; max-width: 100%; height: auto; } // 2x 3x 背景图片 .bg-image(@url) { background-image: url("@url + '@2x.png'"); @media (-webkit-min-device-pixel-ratio: 3), (min-device-pixel-ratio: 3) { background-image: url("@url + '@3x.png'"); } } // 全屏大图背景 .fullscreen-bg(@url) { width: 100vw; height: 100vh; background: url(@url) no-repeat 50% 50%; background-size: cover; } // 滤镜: 将彩色照片显示为黑白照片 .grayscale() { filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); } /*------------------------------------- ├ 动效 ┆ └------------------------------------*/ // 链接默认无下划线,hover后有下划线的样式 .hover-link() { text-decoration: none; &:hover { text-decoration: underline; } } // 将链接变成默认的文字样式 .unstyled-link() { color: inherit; cursor: inherit; text-decoration: inherit; &:active, &:focus { outline: none; } } // 盒子阴影 // box-shadow: 水平阴影的位置, 垂直阴影的位置, 模糊距离, 阴影的大小, 阴影的颜色, 阴影开始方向(默认是从里往外,设置inset就是从外往里); // box-shadow: h-shadow v-shadow blur spread color inset; .box-shadow() { box-shadow: 0px 14px 26px 0px rgba(0, 0, 0, 0.1); } // 盒子 Hover .box-hover() { // box-shadow: 0px 1px 2px 0px rgba(84, 107, 107, .4); transition: all .2s linear; &:hover { box-shadow: 0 15px 30px rgba(0, 0, 0, .1); transform: translate3d(0, -2px, 0); } } .box-hover2() { transition: transform .5s ease; &:hover { transform: translateX(10px); } } // 三维闪动 bug 处理 .transform-fix() { -webkit-backface-visibility: hidden; -webkit-transform-style: preserve-3d; } // Animation .ani(@name, @time: 1s, @ease: ease-in-out, @fillmode: forwards) { animation-name: @name; animation-duration: @time; animation-timing-function: @ease; animation-fill-mode: @fillmode; } /*------------------------------------- ├ 功能 ┆ └------------------------------------*/ // 浮动, 兼容 IE6 .fl() { float: left; *display: inline; _display:inline; } .fr() { float: right; *display: inline; _display:inline; } // 清除浮动 .clearfix() { *zoom: 1; &:after { display: block; clear: both; content: ''; visibility: hidden; height: 0; } } .clearfix(table) { *zoom: 1; &:before, &:after { content: " "; display: table; clear: both; } } // 禁止文本被选择 .user-select() { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } // 隐藏鼠标手势 .hide-cursor() { cursor: none !important; } // 鼠标禁用样式,但仍然可以触发事件 // <input type="text" disabled="disabled"> .disabled() { cursor: not-allowed; } // 禁用元素事件 // 1. 阻止任何点击动作的执行 // 2. 使链接显示为默认光标(cursor:default) // 3. 阻止触发hover和active状态 // 4. 阻止JavaScript点击事件的触发 .pointer-events() { pointer-events: none; } // 模糊 .blur(@blur: 10px) { filter: blur(@blur); -webkit-filter: blur(@blur); -moz-filter: blur(@blur); -o-filter: blur(@blur); -ms-filter: blur(@blur); filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='@{blur}'); *zoom: 1; } // 透明度, 兼容 IE8 .opacity(@opacity: 20) { opacity: @opacity / 100; filter: alpha(opacity=@opacity); } // 用伪类来显示打印时 a 标签的链接 .print-link() { @media print { a[href]:after { content: " (" attr(href) ") "; } } } // 隔行换色 .zebra-lists(odd, @color) { &.odd { >li:nth-child(odd) { background-color: @color; } } } .zebra-lists(even, @color) { &.even { >li:nth-child(even) { background: green; } } } // 首字下沉 .first-letter(@font-size: 6em) { &::first-letter{ float: left; line-height: 1; font-size: @font-size; } } // 特殊标记段落第一行 .first-line() { &::first-line{ color: red } } // 美化选中文本 .beauty-select() { &::selection{ color: #fff; background-color: #6bc30d; text-shadow: none; } } // 美化占位符 placeholder 样式 .beauty-placeholder(@fz, @color: #999, @align: left) { &:-moz-placeholder { font-size: @fz; color: @color; text-align: @align; } &:-ms-input-placeholder { font-size: @fz; color: @color; text-align: @align; } &::-webkit-input-placeholder { font-size: @fz; color: @color; text-align: @align; } } // 美化占位符 placeholder 样式(自定义属性和值) .beauty-placeholder(custom, @property, @value) { &:-moz-placeholder { @{property}: @value; } &:-ms-input-placeholder { @{property}: @value; } &::-webkit-input-placeholder { @{property}: @value; } } /*------------------------------------- ├ 图形 ┆ └------------------------------------*/ // 三角形 .triangle(@width: 4px,@color: #000) { display: inline-block; width: 0; height: 0; vertical-align: middle; border-top: @width solid @color; border-left: @width solid transparent; border-right: @width solid transparent; } // 三角形箭头气泡效果, IE6-7 无表现 .arrow(top, @w: 10px, @color, @x: 50%) { position: relative; &:before { position: absolute; bottom: 100%; left: @x; content: " "; height: 0; width: 0; pointer-events: none; border-style: solid; border-color: transparent; border-bottom-color: @color; border-width: unit(@w, px); @margin: -@w; margin-left: unit(@margin, px); } } .arrow(right, @w: 10px, @color, @y: 50%) { position: relative; &:before { position: absolute; left: 100%; top: @y; content: " "; height: 0; width: 0; pointer-events: none; border-style: solid; border-color: transparent; border-left-color: @color; border-width: unit(@w, px); @margin: -@w; margin-top: unit(@margin, px); } } .arrow(bottom, @w: 10px, @color, @x: 50%) { position: relative; &:before { position: absolute; top: 100%; left: @x; content: " "; height: 0; width: 0; pointer-events: none; border-style: solid; border-color: transparent; border-top-color: @color; border-width: unit(@w, px); @margin: -@w; margin-left: unit(@margin, px); } } .arrow(left, @w: 10px, @color, @y: 50%) { position: relative; &:before { position: absolute; right: 100%; top: @y; content: " "; height: 0; width: 0; pointer-events: none; border-style: solid; border-color: transparent; border-right-color: @color; border-width: unit(@w, px); @margin: -@w; margin-top: unit(@margin, px); } } // 三角形箭头气泡效果, 带边框 .arrow-with-border(top, @w: 10px, @color, @border-w: 1px, @border-color, @x: 50%) { position: relative; &:before, &:after { bottom: 100%; left: @x; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; border-style: solid; border-color: transparent; } &:after { border-bottom-color: @color; border-width: unit(@w, px); @margin: -@w; margin-left: unit(@margin, px); } &:before { border-bottom-color: @border-color; @arrbo: @w+@border-w; border-width: unit(@arrbo, px); @margin-bo: -@arrbo; margin-left: unit(@margin-bo, px); } } .arrow-with-border(bottom, @w: 10px, @color, @border-w: 1px, @border-color, @x: 50%) { position: relative; &:before, &:after { top: 100%; left: @x; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; border-style: solid; border-color: transparent; } &:after { border-top-color: @color; border-width: unit(@w, px); @margin: -@w; margin-left: unit(@margin, px); } &:before { border-top-color: @border-color; @arrbo: @w+@border-w; border-width: unit(@arrbo, px); @margin-bo: -@arrbo; margin-left: unit(@margin-bo, px); } } .arrow-with-border(left, @w: 10px, @color, @border-w: 1px, @border-color, @y: 50%) { position: relative; &:before, &:after { top: @y; right: 100%; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; border-style: solid; border-color: transparent; } &:after { border-right-color: @color; border-width: unit(@w, px); @margin: -@w; margin-top: unit(@margin, px); } &:before { border-right-color: @border-color; @arrbo: @w+@border-w; border-width: unit(@arrbo, px); @margin-bo: -@arrbo; margin-top: unit(@margin-bo, px); } } .arrow-with-border(right, @w: 10px, @color, @border-w: 1px, @border-color, @y: 50%) { position: relative; &:before, &:after { top: @y; left: 100%; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; border-style: solid; border-color: transparent; } &:after { border-left-color: @color; border-width: unit(@w, px); @margin: -@w; margin-top: unit(@margin, px); } &:before { border-left-color: @border-color; @arrbo: @w+@border-w; border-width: unit(@arrbo, px); @margin-bo: -@arrbo; margin-top: unit(@margin-bo, px); } } /*------------------------------------- ├ 组件 ┆ └------------------------------------*/ // 吸顶导航 .fix-header(@h: 70px) { .fixed(); top: 0; left: 0; width: 100%; height: @h; z-index: 1000; // background-color: rgba(256, 256, 256, .92); // border-bottom: 1px solid rgba(7, 17, 27, 0.1); // box-shadow: 0px 0px 20px rgba(0,0,0,0.2); } // 吸底导航 .fix-header(@h: 70px) { .fixed(); left: 0; bottom: 0; width: 100%; height: @h; z-index: 1000; } // 输入框 .input-text() { display: block; width: 100%; padding: 4px 8px; font-size: 14px; line-height: 1.42858; color: #333; border: 1px solid #ddd; background-color: #fff; border-radius: 3px; } // 分割线 // <span class="separator">|/-</span> .separator() { margin: 0 10px; color: #999; font-size: 14px; } // 分割线 / (面包屑导航) .separator2() { &:before { padding: 0 5px; color: #ccc; content: "/\00a0"; } } // <hr class="hr"> // 支付宝:我也是有底线的 .hr() { height: 1px; margin: 10px 0; border: 0; clear: both; background-color: #e2e2e2; } // 改装的 fieldset // <fieldset><legend>返璞归真</legend></fieldset> .fieldset() { border-color: #d2d2d2; border-width: 1px 0 0; border-style: solid; legend { padding: 0 20px; text-align: center; font-size: 20px; font-weight: 300; } } // 引用区块(模仿 Layui) // <p class="blockquote">Lorem ipsum dolor sit amet.</p> .blockquote() { margin-bottom: 10px; padding: 15px; line-height: 22px; border-left: 5px solid #009688; border-radius: 0 2px 2px 0; background-color: #f2f2f2; } // 徽章 (椭圆、小圆点) // <span class="badge">10</span> .badge(...) { position: relative; display: inline-block; font-size: 12px; color: #fff; background-color: #FF5722; } .badge(ellipse) { min-width: 8px; height: 18px; padding: 2px 6px; text-align: center; line-height: 18px; border-radius: 9px; } .badge(dot) { width: 8px; height: 8px; border-radius: 50%; } // 关闭按钮 // <button class="close" type="button"><span>×</span></button> .close() { position: relative; -webkit-appearance: none; padding: 0; cursor: pointer; background: 0 0; border: 0; font-size: 20px; font-weight: 700; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; filter: alpha(opacity=20); opacity: .2; &:hover { color: #000; text-decoration: none; cursor: pointer; filter: alpha(opacity=50); opacity: .5; } &:before { content: ''; position: absolute; top: -10px; left: -10px; right: -10px; bottom: -10px; } } // 1 像素边框问题 .onepx(...) { position: relative; &:after { content: ''; display: block; position: absolute; left: 0; width: 100%; border-top: 1px solid rgba(7, 17, 27, 0.1); transform: scaleY(0.5); } } .onepx(top) { &:after { top: 0; } } .onepx(bottom) { &:after { bottom: 0; } } .onepx-easy(top, @color: #ccc) { box-shadow: inset 0px -1px 1px -1px @color; } .onepx-easy(bottom, @color: #ccc) { box-shadow: inset 0px 1px 1px -1px @color; }
总结
以上就是本文的所有内容,希望会给大家带来帮助!!
相关推荐:
The above is the detailed content of Commonly used Mixin encapsulation example codes for CSS study notes_CSS tutorial_CSS_Web page production. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



How to use the Bootstrap button? Introduce Bootstrap CSS to create button elements and add Bootstrap button class to add button text

To adjust the size of elements in Bootstrap, you can use the dimension class, which includes: adjusting width: .col-, .w-, .mw-adjust height: .h-, .min-h-, .max-h-

There are two ways to create a Bootstrap split line: using the tag, which creates a horizontal split line. Use the CSS border property to create custom style split lines.

Answer: You can use the date picker component of Bootstrap to view dates in the page. Steps: Introduce the Bootstrap framework. Create a date selector input box in HTML. Bootstrap will automatically add styles to the selector. Use JavaScript to get the selected date.

To set up the Bootstrap framework, you need to follow these steps: 1. Reference the Bootstrap file via CDN; 2. Download and host the file on your own server; 3. Include the Bootstrap file in HTML; 4. Compile Sass/Less as needed; 5. Import a custom file (optional). Once setup is complete, you can use Bootstrap's grid systems, components, and styles to create responsive websites and applications.

There are several ways to insert images in Bootstrap: insert images directly, using the HTML img tag. With the Bootstrap image component, you can provide responsive images and more styles. Set the image size, use the img-fluid class to make the image adaptable. Set the border, using the img-bordered class. Set the rounded corners and use the img-rounded class. Set the shadow, use the shadow class. Resize and position the image, using CSS style. Using the background image, use the background-image CSS property.

To verify dates in Bootstrap, follow these steps: Introduce the required scripts and styles; initialize the date selector component; set the data-bv-date attribute to enable verification; configure verification rules (such as date formats, error messages, etc.); integrate the Bootstrap verification framework and automatically verify date input when form is submitted.

Using Bootstrap in Vue.js is divided into five steps: Install Bootstrap. Import Bootstrap in main.js. Use the Bootstrap component directly in the template. Optional: Custom style. Optional: Use plug-ins.
