css小技巧

本文深入探讨CSS中的实用技巧,包括解决移动端点击阴影、利用padding绘制复杂图形、掌握margin百分比计算规则、解决margin合并问题、使用margin:auto实现垂直居中等,旨在提升网页布局与设计的效率与美观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移动端我们在点击页面中的一些图片的时候会出现阴影。处理方法只要给a标签加上

a {
  -webkit-tap-highlight-color: transparent;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
}

 

padding 的图形绘制 一个元素画出红领巾的“三道杠”

.box1 {
  display: inline-block;
  background: currentColor;
  width: 140px;
  height: 10px;
  border-top: 10px solid;
  border-bottom: 10px solid;
  padding: 35px 0;
  /* 这里其实关键起作用的还是 background-clip: content-box; 把背景色作用从border-box改为content-box*/
  background-clip: content-box;
}
复制代码
<div class="box1"></div>
复制代码

 

三道杠

 

padding 的图形绘制 一个元素画出双层圆点图形效果

.box1 {
  display: inline-block;
  background: currentColor;
  width: 100px;
  height: 100px;
  padding: 10px;
  background-clip: content-box;
  border: 10px solid;
  background-clip: content-box;
  border-radius: 50%;
}
复制代码
<div class="box1"></div>
复制代码

 

双层圆点

 

margin百分比

margin的百分比值计算规则和padding一样,但是margin在垂直方向没办法改变自身内部尺寸往往要借助父元素作为载体,还存在margin合并的问题

还是那道浏览器窗口1/2的面试题,如果没有要求只用一个元素实现的话,可以用margin去实现

这里简单说一下,之所以设置父级box1的overflow:hidden,是因为要创建一个块级格式化上下文元素,一方面可以用子级margin撑起高度,另一方面处理margin合并问题,所以子级.box2直接用margin:100%,而不是200%。

.box1 {
  background: currentColor;
  overflow: hidden;
  /* 宽度窗口1/2 */
  width: 50%;
}
.box2 {
  /* 高度窗口1/2 */
  margin: 100%;
}
复制代码
	<div class="box1"><div class="box2"></div></div>
复制代码

margin合并的解决方法

这里只列举出margin-top合并的情况, margin-bottom与其相对应

  • 父元素设为块级格式化上下文,7就是
  • 父元素设置border-top
  • 父元素设置padding-top (这里可以用margin-top负值来消除作用)
  • 父元素与第一个子元素之间添加内联元素进行分隔

利用 margin: auto 做垂直上下居中

.box1 {
  height: 400px;
  width: 400px;
  border: 1px solid ;
  position: relative;
}
.box2 {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  background-color: currentColor;
  width: 200px;
  height: 200px;
  margin: auto;
}
复制代码
<div class="box1"><div class="box2"></div></div>

css尺寸单位ex,指的是字母x的高度(x-height)。

  • HTML:

    zhangxinxu<i class="icon-arrow"></i>
    
    张鑫旭<i class="icon-arrow"></i>
  • CSS:

    .icon-arrow {
        display: inline-block;
        width: 20px;
        height: 1ex;
        background: url(/images/5/arrow.png) no-repeat center;
    }
  • 无依赖absolute绝对定位

    无依赖absolute绝对定位指的是没有left/top/right/bottom 我们平时如果对元素进行 absolute 定位,多半会加多个 left,top然后给父级加个 relative。 实际上大多数情况我们可以直接用margin辅助定位,

    .father{ position: relative; }
    /* @before */
    .son {position: absolute; top: 10px; left: 10px;}
    /* @after */
    .son {position: absolute; margin-top: 10px; margin-left: 10px;}
    复制代码

    这么实现有两个好处,一个是我们不需要父级去加个relative后面要撤销,直接改 .son样式就好。 第二个好处就是某些场景适应性比依赖项定位好

    Hot为无依赖 N为依赖

    改变文字长度之后的情况

 

textarea 宽度100%自适应效果

<style>
  /*父级*/
  .box1 {
    width: 280px;
    margin: 0 auto;
    padding: 10px 0;
    background-color: #abcdef;
  }
  /* 模拟边框与padding */
  .box2 {
      padding: 9px 8px;
      border: 1px solid #d0d0d5;
      border-radius: 4px;
      background-color: #fff; 
  }
  /* 真实 textarea */
  .box2> textarea {
      width: 100%;
      line-height: 20px;
      padding: 0;
      border: 0 none;
      outline: 0 none;
      background: none;
      resize: none;
  }
</style>

<div class="box1">
  <div class="box2">
    <textarea ></textarea>
  </div>
</div>
复制代码

 

 

 

空元素选择器 :empty

看《css世界》之后才知道有这么一个空元素选择器...绝对不是其他目的

	<style>
		span:empty::after {
			content: '是帅哥';
		}
	</style>
	<span>Jsonz</span>
	<span></span>

动态loading打点效果

这里主要利用了content 支持\A换行来实现,用dot是因为

是自定义的一个标签元素,除了简约、语义化明显

<style>
	dot {
    display: inline-block; 
    height: 1em;
    line-height: 1;
    text-align: left;
    vertical-align: -.25em;
    overflow: hidden;
}
dot::before {
    display: block;
    content: '...\A..\A.';
    white-space: pre-wrap;
    animation: dot 3s infinite step-start both;
}
@keyframes dot {
    33% { transform: translateY(-2em); }
    66% { transform: translateY(-1em); }
}
</style>
正在加载中<dot>...</dot>
复制代码


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值