CSS margin-trim

margin-trim

🧪这是一个实验性的属性, 目前仅有 Safari 支持

看这个属性的名字就知道, 外边距修剪.

平常都会遇到一些排版上的问题, 比如垂直排列的元素之间增加下外边距

<div>
  <li>123</li>
  <li>456</li>
  <li>789</li>
  <li>000</li>
</div>
div {
  padding: 10px;
}
div > li {
  margin-bottom: 10px;
}
</style>

在这里插入图片描述

但是通常我们不希望最后一个元素增加下外边距, 因为列表容器已经有了下内边距, 因此需要对最后一个元素做特殊处理

li:last-child {
  margin-bottom: 0;
}

在这里插入图片描述

主角登场

说到这里 margin-trim 可以做什么呢? 哎, 把 margin-trim 加在列表元素的父容器上, 父容器就会修剪子元素和父容器相邻的子元素的外边距.

 div {
  padding: 10px;
  margin-trim: block; // 主角在这
}
div > li {
  margin-bottom: 10px;
}
/* li:last-child {
  margin-bottom: 0;
} */

我们从下图看到, 虽然每个子元素的下边距都是 10px, 但是和父容器相邻的子元素的外边距却被裁减了.

在这里插入图片描述

语法

在上面的例子我们通过 block 属性指定只能修剪逻辑块方向的外边距, 其实 margin-trim 的值可以是下面的任何一个

  • none
  • block
  • block-start
  • block-end
  • inline
  • inline-start
  • inline-end

主角的局限性

然而, 我们的主角还没有得到 Safari 的全部支持, 因为在内联方向上的 margin 裁减没!有!效!果!

在这里插入图片描述

在这里插入图片描述

为什么会这样呢? 因为在 inline 方向上的裁剪效果还没有定

在这里插入图片描述

兼容性

Safari >= 16.4 才支持

在这里插入图片描述
谢谢你看到这里😊

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个简单的HTML和CSS登录注册页面示例: ```html <!DOCTYPE html> <html> <head> <title>Login/Register Page</title> <style> body { margin: 0; padding: 0; background-color: #f2f2f2; font-family: Arial, sans-serif; font-size: 14px; } .container { width: 400px; margin: 50px auto; background-color: #fff; padding: 20px; box-shadow: 0 0 10px rgba(0,0,0,0.2); } h2 { text-align: center; margin-bottom: 20px; } .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 5px; font-weight: bold; } input[type="text"], input[type="password"] { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 5px; box-sizing: border-box; font-size: 14px; } button[type="submit"] { background-color: #4CAF50; color: #fff; border: none; padding: 10px; border-radius: 5px; cursor: pointer; font-size: 14px; } button[type="submit"]:hover { background-color: #3e8e41; } .form-group p { margin-top: 5px; font-size: 12px; color: #999; } .form-group a { color: #4CAF50; text-decoration: none; } .form-group a:hover { text-decoration: underline; } .error-message { color: #f00; font-size: 12px; margin-top: 5px; } </style> </head> <body> <div class="container"> <h2>Login/Register</h2> <form id="login-form" method="post"> <div class="form-group"> <label for="login-username">Username:</label> <input type="text" id="login-username" name="login-username"> </div> <div class="form-group"> <label for="login-password">Password:</label> <input type="password" id="login-password" name="login-password"> <p><a href="#">Forgot password?</a></p> </div> <button type="submit">Login</button> <div class="form-group"> <p>Don't have an account? <a href="#register-form">Register here</a></p> </div> </form> <form id="register-form" method="post" style="display: none;"> <div class="form-group"> <label for="register-username">Username:</label> <input type="text" id="register-username" name="register-username"> <p class="error-message" id="username-error"></p> </div> <div class="form-group"> <label for="register-email">Email:</label> <input type="text" id="register-email" name="register-email"> <p class="error-message" id="email-error"></p> </div> <div class="form-group"> <label for="register-password">Password:</label> <input type="password" id="register-password" name="register-password"> <p class="error-message" id="password-error"></p> </div> <button type="submit">Register</button> <div class="form-group"> <p>Already have an account? <a href="#login-form">Login here</a></p> </div> </form> </div> <script> // Toggle between login and register forms document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); document.querySelector(this.getAttribute('href')).style.display = 'block'; document.querySelector(this.getAttribute('href') === '#login-form' ? '#register-form' : '#login-form').style.display = 'none'; }); }); // Validate registration form const registerForm = document.getElementById('register-form'); registerForm.addEventListener('submit', function (e) { e.preventDefault(); const username = document.getElementById('register-username'); const email = document.getElementById('register-email'); const password = document.getElementById('register-password'); const usernameError = document.getElementById('username-error'); const emailError = document.getElementById('email-error'); const passwordError = document.getElementById('password-error'); usernameError.textContent = ''; emailError.textContent = ''; passwordError.textContent = ''; if (username.value.trim() === '') { usernameError.textContent = 'Username is required'; } if (email.value.trim() === '') { emailError.textContent = 'Email is required'; } else if (!/\S+@\S+\.\S+/.test(email.value)) { emailError.textContent = 'Invalid email address'; } if (password.value.trim() === '') { passwordError.textContent = 'Password is required'; } else if (password.value.trim().length < 8) { passwordError.textContent = 'Password must be at least 8 characters long'; } }); </script> </body> </html> ``` 这个示例包含一个登录表单和一个注册表单。它使用简单的CSS样式来使表单看起来更美观,并使用JavaScript来切换表单和验证注册表单。请注意,这只是一个简单的示例,实际的登录注册页面应该包含更多功能和安全措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值