Nano Hash - криптовалюты, майнинг, программирование

Создание скошенных углов

Мне нужно создать кнопку с прямыми, скошенными углами вместо закругленных, например, вот так:

скошенный угол

Вместо этого:

закругленный угол

Я не могу использовать несколько объявлений box-shadow, потому что мне нужна граница в 1 пиксель, чтобы очертить всю фигуру. И я не могу использовать трюк со стрелкой из div 0px на 0px из-за той же проблемы. Использование -moz-linear-gradient и т. д. не сработает, потому что это повлияет только на верхнюю половину элемента, и мне нужно, чтобы угол продолжался до самого низа.

border-radius ближе всего, но по умолчанию оно округлено. Можно ли с помощью CSS или JavaScript добиться такого эффекта?


  • Неуниверсально поддерживаемый border-image может быть вашим лучшим выбором. Я смутно припоминаю, что видел что-то о предложении CSS Shapes. (редактировать - ну, CSS-формы кажутся неуместными; неважно.) 10.07.2013
  • Я бы использовал фоновое изображение 10.07.2013
  • @TGH да, это было бы самой простой вещью (и что можно было бы сделать в 2009 году :) Также можно было бы сделать что-то интересное с переводом / поворотом CSS. 10.07.2013
  • Решающим фактором будут требования поддержки браузера :-) 10.07.2013

Ответы:


1

Я видел некоторые приемы CSS, где вы можете использовать прозрачные границы и ширину границы для создания всевозможных треугольных фигур, это может быть то, что вы ищете, вы можете просто добавить его к концам вашей кнопки. здесь Альтернативой может быть создание кнопки с фоновым изображением. Манипулировать изображением было бы намного проще.

РЕДАКТИРОВАТЬ: по-видимому, существует генератор треугольников, кто знал?

09.07.2013
  • Это может сделать только твердые формы, а не очертания. 10.07.2013
  • Вы можете сделать контуры с 2 псевдоэлементами и смещением. 10.07.2013
  • Моя проблема в том, что кнопки, когда они сплошные, на самом деле используют градиентный фон. Я не нашел способ добавить градиенты к границам треугольника. 10.07.2013
  • Не уверен, что это поможет, но я продолжу искать тебя, чувак. stackoverflow.com/questions/2717127/css3-gradient-borders 10.07.2013

  • 2

    Скрипка

    Смелое использование псевдоэлементов CSS3

    CSS-код:

    div {
        width: 118px; /* 118 = rectangle width - 2 */
        height: 33px; /* 33 = shape height - 2 */
        border: 1px solid #007bff;
        background-color: white;
    }
    
    div:before {
        content: '';
        border-right: 30px solid transparent; /* 30 = triangle width */
        border-bottom: 35px solid #007bff; /* 35 = shape height */
        float: left;
        margin-left: 119px; /* 121 = rectangle width - 1 */
        margin-top: -1px; /* always 1*/
    }
    
    div:after {
        content: '';
        border-right: 29px solid transparent; /* 29 = triangle width - 1 */
        border-bottom: 33px solid white; /* 33 = shape height - 2 */
        float: left;
        margin-left: 118px; /* 120 = rectangle width - 2 */
        margin-top: -34px; /* 34 = shape height - 1 */
    }
    
    09.07.2013

    3

    Я не могу взять на себя ответственность за этот ответ, но я нашел кого-то, у кого есть решение для этого. Посмотрите на эту скрипту.

    Это будет работать примерно так:

    HTML:

    <div id="box3">
    Content Here  
    <div id="box3bottom"></div>
    </div>
    

    CSS:

        p {
        margin: 10px;
    }
    
    #box1, #box2, #box3 {
        background-color: #207cca;
        border: 1px solid black;
        color: white;
        height: 200px;
        margin: 20px auto;
        position: relative;
        text-align: center;
        width: 300px;
    }
    #box1:before, #box2:before, #box3:before {
        background-color: white;
        border-bottom: 1px solid black;
        content: "";
        height: 20px;
        left: -12px;
        position: absolute;
        top: -8px;
        -moz-transform: rotate(-45deg);
        -webkit-transform: rotate(-45deg);
        transform: rotate(-45deg);
        width: 30px;
    }
    
    #box2:after, #box3:after {
        background-color: white;
        border-bottom: 1px solid black;
        content: "";
        height: 20px;
        position: absolute;
        right: -12px;
        top: -8px;
        -moz-transform: rotate(45deg);
        -webkit-transform: rotate(45deg);
        transform: rotate(45deg);
        width: 30px;
    }
    
    #box3bottom {
        height: 100%;
        left: 0px;
        position: absolute;
        top: 0px;
        width: 100%;
    }
    #box3bottom:before {
        background-color: white;
        border-top: 1px solid black;
        bottom: -8px;
        content: "";
        height: 20px;
        left: -12px;
        position: absolute;
        -moz-transform: rotate(45deg);
        -webkit-transform: rotate(45deg);
        transform: rotate(45deg);
        width: 30px;
    }
    #box3bottom:after {
        background-color: white;
        border-top: 1px solid black;
        bottom: -8px;
        content: "";
        height: 20px;
        position: absolute;
        right: -12px;
        -moz-transform: rotate(-45deg);
        -webkit-transform: rotate(-45deg);
        transform: rotate(-45deg);
        width: 30px;
    }
    
    09.07.2013
  • Это прекрасно работает в FF, Chrome и IE 10... но не в IE 9 или 8, иначе все было бы идеально. Любые идеи? 10.07.2013
  • Это должно работать в IE 9... Я удивлен, если это не так. С другой стороны, IE8 или более ранние версии на самом деле не поддерживают псевдоселектор :after, так что это проблема. Есть пара поли-заполнений java-скриптов, которые я видел, которые могут помочь с этим. Вот один из них: code.google.com/p/ie7-js. 25.07.2013

  • 4

    В итоге я использовал фоновое изображение в div, перекрывающем меню, и изменил класс как последней вкладки, так и div с помощью JavaScript, когда была выбрана последняя вкладка.

    Мне бы хотелось сделать это исключительно с помощью CSS, и использование псевдоэлементов :before и :after со смещением было очень близко, но было слишком сложно получить макет с точностью до пикселя, работающий во всех браузерах.

    Вот мой код для любопытных.

    Javascript:

    if($('.tabs .tab-right').hasClass('selected')){
        $(".tab .angle").addClass('angle-selected');
    }else{
        $(".tab .angle").removeClass('angle-selected');
    }
    

    CSS:

    .tabs .tab-right {
        padding: 8px 28px 8px 12px;
    }
    .tabs .angle {
        background: url("../img/angle-noborder.png") no-repeat transparent;
        height: 35px;
        width: 28px;
        display: inline-block;
        position: relative;
        right: 28px;
    }
    .tabs .angle.angle-selected {
        background: url("../img/angle-border.png") no-repeat transparent;
    }
    
    11.07.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..