#html #css
Вопрос:
Я работаю над небольшим упражнением по css, и по какой-то причине у меня есть то, что кажется цветом фона, просачивающимся вокруг границ изображения. Я перепробовал все, что мог придумать, и не могу от этого избавиться. Похоже, что когда я удаляю свойство цвета фона в классе с перевернутым углом, оно исчезает. В качестве альтернативы, удаление границы из класса с перевернутым углом также приведет к ее удалению. К сожалению, это также нарушает дизайн. Есть какие-нибудь предложения?
body {
font-family: "Hahmlet", serif;
/* font-family: 'Spectral', serif; */
background-color: lightgrey;
}
.wrapper {
width: 425px;
margin: auto;
position: relative;
top: 150px;
transform: rotate(12deg);
}
.admitOne {
position: absolute;
border-bottom: solid;
font-size: 40px;
text-align: center;
width: 71%;
left: 61px;
}
.cinima {
position: absolute;
font-size: 50px;
top: 53px;
text-align: center;
left: 91px;
}
.lyon {
position: absolute;
border-top: solid;
font-size: 24px;
text-align: center;
width: 71%;
top: 120px;
left: 61px;
padding-top: 2px;
}
/* Numbers */
.number {
position: absolute;
text-align: center;
border-bottom: solid;
font-size: 35px;
width: 35%;
top: 58px;
}
.left {
left: -45px;
transform: rotate(270deg);
}
.right {
right: -45px;
transform: rotate(90deg);
}
/* Corners */
.inverted-corner {
box-sizing: border-box;
position: relative;
background-color: rgb(205, 34, 35);
width: 425px;
height: 200px;
border: solid 15px;
border-left: dotted 3px;
border-right: dotted 3px;
border-color: lightgrey;
}
.inverted-corner:before {
background-image: url("https://assets.codepen.io/4091246/redpaper.png");
content: "";
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
opacity: 40%;
}
.top:before,
.top:after,
.bottom:before,
.bottom:after {
content: "";
position: absolute;
width: 40px;
height: 40px;
background-color: lightgrey;
border: solid 15px lightgrey;
border-radius: 35px;
}
.top:before {
top: -45px;
left: -45px;
}
.top:after {
top: -45px;
right: -45px;
}
.bottom:before {
bottom: -45px;
left: -45px;
}
.bottom:after {
bottom: -45px;
right: -45px;
}
<html>
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Hahmletamp;family=Spectralamp;display=swap" rel="stylesheet">
</head>
<body>
<div class="wrapper">
<div class="inverted-corner">
<div class="content">
<div class="admitOne">ADMIT ONE</div>
<div class="cinima">CINEMA</div>
<div class="number left">081221</div>
<div class="number right">081221</div>
<div class="lyon">Lyon Movie Theaters</div>
</div>
<div class="top" />
<div class="bottom" />
</div>
</div>
</body>
</html>
Ответ №1:
Добавьте в свой класс перевернутых углов: преобразование: перевод(0 пикселей);
body {
font-family: "Hahmlet", serif;
/* font-family: 'Spectral', serif; */
background-color: lightgrey;
}
.wrapper {
width: 425px;
margin: auto;
position: relative;
top: 150px;
transform: rotate(12deg);
}
.admitOne {
position: absolute;
border-bottom: solid;
font-size: 40px;
text-align: center;
width: 71%;
left: 61px;
}
.cinima {
position: absolute;
font-size: 50px;
top: 53px;
text-align: center;
left: 91px;
}
.lyon {
position: absolute;
border-top: solid;
font-size: 24px;
text-align: center;
width: 71%;
top: 120px;
left: 61px;
padding-top: 2px;
}
/* Numbers */
.number {
position: absolute;
text-align: center;
border-bottom: solid;
font-size: 35px;
width: 35%;
top: 58px;
}
.left {
left: -45px;
transform: rotate(270deg);
}
.right {
right: -45px;
transform: rotate(90deg);
}
/* Corners */
.inverted-corner {
box-sizing: border-box;
position: relative;
background-color: rgb(205, 34, 35);
width: 425px;
height: 200px;
border: solid 15px;
border-left: dotted 3px;
border-right: dotted 3px;
border-color: lightgrey;
transform: translateZ(0px);
}
.inverted-corner:before {
background-image: url("https://assets.codepen.io/4091246/redpaper.png");
content: "";
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
opacity: 40%;
}
.top:before,
.top:after,
.bottom:before,
.bottom:after {
content: "";
position: absolute;
width: 40px;
height: 40px;
background-color: lightgrey;
border: solid 15px lightgrey;
border-radius: 35px;
}
.top:before {
top: -45px;
left: -45px;
}
.top:after {
top: -45px;
right: -45px;
}
.bottom:before {
bottom: -45px;
left: -45px;
}
.bottom:after {
bottom: -45px;
right: -45px;
}
html
<html>
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Hahmletamp;family=Spectralamp;display=swap" rel="stylesheet">
</head>
<body>
<div class="wrapper">
<div class="inverted-corner">
<div class="content">
<div class="admitOne">ADMIT ONE</div>
<div class="cinima">CINEMA</div>
<div class="number left">081221</div>
<div class="number right">081221</div>
<div class="lyon">Lyon Movie Theaters</div>
</div>
<div class="top" />
<div class="bottom" />
</div>
</div>
</body>
</html>
Комментарии:
1. Мне нравится это решение. Что заставило тебя об этом подумать? Я не уверен, что полностью понимаю, почему это работает.
2. Это заставляет chrome/safari перемещать часть рендеринга на ваше видеооборудование. Это устраняет некоторые проблемы с выравниванием с субпиксельным выравниванием, как у вас здесь.
Ответ №2:
вращение вызывает артефакты пикселей bgcolor за пределами границы
попробуйте этот стиль (с обрезанным bg и измененной рамкой) для inverted-corner
.inverted-corner {
box-sizing: border-box;
position: relative;
background-color: rgb(205, 34, 35);
background-clip: content-box;
width: 425px;
height: 200px;
border: 15px solid lightgrey;
border-left: 3px dotted rgb(205, 34, 35);
border-right: 3px dotted rgb(205, 34, 35);
}