首頁 > web前端 > css教學 > CSS學習筆記之常用Mixin封裝實例碼_CSS教學_CSS_網頁製作

CSS學習筆記之常用Mixin封裝實例碼_CSS教學_CSS_網頁製作

韦小宝
發布: 2017-12-16 10:06:28
原創
1595 人瀏覽過

CSS预处理技术现在已经非常成熟,比较流行的有Less,Sass,Stylus,在开发过程中提升我们的工作效率,缩短开发时间,方便管理和维护代码,这篇文章主要给大家分享介绍了关于CSS学习笔记之常用Mixin封装的相关资料,需要学习CSS的朋友们下面随着小编来一起学习学习吧。

前言

为了有效的维护和开发项目,代码的重复利用就显得尤为重要。在Sass中,除了@import和@extend可以使你的代码更加具有重复利用性,@mixin指令也同样能提高你代码的重复使用率并简化你的代码。个人在做项目的过程中总结归纳的一些常用Mixin,现在分享出来供大家学习。

基于Less编写。但是CSS预处理器都是相通的,你可以很轻易的修改成Sass、Stylus

代码免不了错误和Bug,如果你能帮我修改或者补充 万分感谢!!

参考了一些开源库,如:est、csslab等

Usage


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

407

408

409

410

411

412

413

414

415

416

417

418

419

420

421

422

423

424

425

426

427

428

429

430

431

432

433

434

435

436

437

438

439

440

441

442

443

444

445

446

447

448

449

450

451

452

453

454

455

456

457

458

459

460

461

462

463

464

465

466

467

468

469

470

471

472

473

474

475

476

477

478

479

480

481

482

483

484

485

486

487

488

489

490

491

492

493

494

495

496

497

498

499

/**

* 作品: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 + &#39;@2x.png&#39;");

  @media (-webkit-min-device-pixel-ratio: 3), (min-device-pixel-ratio: 3) {

    background-image: url("@url + &#39;@3x.png&#39;");

  }

}

// 全屏大图背景

.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: &#39;&#39;; 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=&#39;@{blur}&#39;);

  *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>&times;</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: &#39;&#39;;

    position: absolute;

    top: -10px;

    left: -10px;

    right: -10px;

    bottom: -10px;

  }

}

// 1 像素边框问题

.onepx(...) {

  position: relative;

  &:after {

    content: &#39;&#39;;

    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; }

登入後複製


总结

以上就是本文的所有内容,希望会给大家带来帮助!!

相关推荐:

用纯CSS制作带动画的天气图标方法教程

CSS实现相册横向完美排布方法

CSS3中使用视窗单位来布局的方法

以上是CSS學習筆記之常用Mixin封裝實例碼_CSS教學_CSS_網頁製作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板