Как оформить и расположить элемент ::before, чтобы он не влиял на размер кнопки?

#html #css

#HTML #css

Вопрос:

Я хочу иметь кнопку с днем недели и часом в центре и маленькой датой ГГГГ-ММ-ДД в верхнем левом углу. Я использую псевдоселектор :before однако мне бы хотелось, чтобы элемент ::before не влиял на размер кнопки и основной текст, прямо сейчас он увеличивает размер кнопки и изменяет положение основного текста. Кроме того, я хотел бы разместить его в верхнем левом углу. codepen

 .hour-btn {
  border-style: solid;
  border-width: 0.15vw;
  border-radius: 0.5vw;
  padding: 2vw 2vw;
  margin: 1vw 1vw;
  box-sizing: border-box;
  width: calc(100% / 3.5);
  height: 6vw;
  font-family: "Lato";
  font-size: 1.4vw;
}

.hour-btn[title]::before {
  content: attr(title);
  position: relative;
  z-index: 52;
  top: -2vw;
  font-size: 0.8vw;
}  
 <button title="2020-10-24" class="hour-btn">Saturday 20:20
 </button>  

Комментарии:

1. используйте px единицу измерения вместо vw для всех, таких как ширина, отступы, поля и т. Д

2. Вы хотите, чтобы текст кнопки был слева? Или заголовок

3. Вы должны прочитать о разнице между vw, vh, em, rem, px … и т.д. Также вы неправильно понимаете, как работает псевдоэлемент :before .

Ответ №1:

Вот как я это исправил :

 .hour-btn {
  border-style: solid;
  position: relative;
  display: inline-flex;
  border-width: 0vw;
  border-radius: 0.5vw;
  padding: 2vw 2vw;
  margin: 1vw 1vw;
  box-sizing: border-box;
  width: calc(100% / 3.5);
  height: 6vw;
  color: white;
  font-weight: bold;
  background-color: gray;
  border-color: blue;

}

.hour-btn[title]::before {
  content: attr(title);
  z-index: 4;
  position: absolute;
  display: block;
  width: 100%;
  height: 100%;
  margin-left: 0;
  text-align: left;
  top: 2px;
  left: 6px;
  font-size: 0.8vw;
  font-weight: lighter;
  opacity: 0.7;
}  
 <button title="2020-10-24" class="hour-btn">Saturday 20:20
 </button>  

Ответ №2:

Вы можете попробовать этот css.

 .hour-btn {
  border-style: solid;
  border-width: 0.15px;
  border-radius: 0.5px;
  padding: 25px 50px;
  /*margin: 1vw 1vw;*/
  text-align: center;
  box-sizing: border-box;
  /*width: calc(100% / 3.5);*/
  font-family: "Lato";
  font-size: 20px;
  position: relative;
}

.hour-btn[title]::before {
  content: attr(title);
  position: absolute;
  z-index: 52;
  top: 0.25px;
  font-size: 16px;
  left: 0.25px;
  display: block;
}  
 <button title="2020-10-24" class="hour-btn">Saturday 20:20
 </button>  

Ответ №3:

Как насчет этого:-

 .hour-btn {
  border-style: solid;
  border-width: 0.15vw;
  border-radius: 0.5vw;
  padding: 2vw 2vw;
  margin: 1vw 1vw;
  box-sizing: border-box;
  width: calc(100% / 3.5);
  height: 6vw;
  font-family: "Lato";
  font-size: 1.4vw;
}

.hour-btn[title]::before {
  content: attr(title);
  position: relative;
  z-index: 52;
  top: -1.5vw;
  left: -5vw;
  font-size: 0.8vw;
}  
 <button title="2020-10-24" class="hour-btn">Saturday 20:20
 </button>