El valor de la propiedad del borde de guiones nativos no ofrece control sobre los guiones en sí mismos ... ¡así que traiga la border-image
propiedad!
Elabora tu propia frontera con border-image
Compatibilidad : ofrece un excelente soporte para navegadores (IE 11 y todos los navegadores modernos). Se puede configurar un borde normal como respaldo para navegadores más antiguos.
Vamos a crear estos
¡Estos bordes mostrarán exactamente el mismo navegador cruzado!
Paso 1: crea una imagen adecuada
Este ejemplo tiene 15 píxeles de ancho por 15 píxeles de alto y los espacios son actualmente de 5 píxeles de ancho. Es un .png con transparencia.
Así es como se ve en Photoshop cuando se amplía:
Así es como se ve a escala:
Controlar el espacio y la longitud de la carrera
Para crear espacios o trazos más amplios / más cortos, amplíe / acorte los espacios o trazos en la imagen.
Aquí hay una imagen con espacios más amplios de 10 píxeles:
correctamente escalado =
Paso 2: crea el CSS: este ejemplo requiere 4 pasos básicos
Defina la fuente de la imagen del borde :
border-image-source:url("http://i.stack.imgur.com/wLdVc.png");
Opcional : defina el ancho de la imagen del borde :
border-image-width: 1;
El valor predeterminado es 1. También se puede configurar con un valor de píxel, un valor de porcentaje o como otro múltiplo (1x, 2x, 3x, etc.). Esto anula cualquier border-width
conjunto.
Defina el segmento de imagen de borde :
En este ejemplo, el grosor de los bordes superior, derecho, inferior e izquierdo de las imágenes es de 2px, y no hay espacios fuera de ellos, por lo que nuestro valor de corte es 2:
border-image-slice: 2;
Los cortes se ven así, 2 píxeles de la parte superior, derecha, inferior e izquierda:
Defina el borde-imagen-repetición :
En este ejemplo, queremos que el patrón se repita uniformemente alrededor de nuestro div. Entonces elegimos:
border-image-repeat: round;
Escribir taquigrafía
Las propiedades anteriores se pueden establecer individualmente o de forma abreviada usando border-image :
border-image: url("http://i.stack.imgur.com/wLdVc.png") 2 round;
Ejemplo completo
Tenga en cuenta el border: dashed 4px #000
retroceso. Los navegadores no compatibles recibirán este borde.
.bordered {
display: inline-block;
padding: 20px;
/* Fallback dashed border
- the 4px width here is overwritten with the border-image-width (if set)
- the border-image-width can be omitted below if it is the same as the 4px here
*/
border: dashed 4px #000;
/* Individual border image properties */
border-image-source: url("http://i.stack.imgur.com/wLdVc.png");
border-image-slice: 2;
border-image-repeat: round;
/* or use the shorthand border-image */
border-image: url("http://i.stack.imgur.com/wLdVc.png") 2 round;
}
/*The border image of this one creates wider gaps*/
.largeGaps {
border-image-source: url("http://i.stack.imgur.com/LKclP.png");
margin: 0 20px;
}
<div class="bordered">This is bordered!</div>
<div class="bordered largeGaps">This is bordered and has larger gaps!</div>
border-style: solid
(o algo similar) si omite el respaldo.Además de la
border-image
propiedad, hay algunas otras formas de crear un borde punteado con control sobre la longitud del trazo y la distancia entre ellos. Se describen a continuación:Método 1: usar SVG
Podemos crear el borde punteado usando
path
unpolygon
elemento o un y estableciendo elstroke-dasharray
propiedad. La propiedad toma dos parámetros donde uno define el tamaño del guión y el otro determina el espacio entre ellos.Pros:
border-radius
involucrado. Simplemente deberíamos reemplazar elpath
con un mecircle
gusta en esta respuesta (o) convertir elpath
en un círculo.Contras:
vector-effect='non-scaling-stroke'
(como en el segundo cuadro) pero el soporte del navegador para esta propiedad es nulo en IE.Mostrar fragmento de código
Método 2: usar degradados
Podemos utilizar varias
linear-gradient
imágenes de fondo y colocarlas de forma adecuada para crear un efecto de borde discontinuo. Esto también se puede hacer con a,repeating-linear-gradient
pero no hay mucha mejora debido al uso de un gradiente repetido, ya que necesitamos que cada gradiente se repita en una sola dirección.Mostrar fragmento de código
Pros:
Contras:
border-radius
está involucrado porque los fondos no se curvan en función deborder-radius
. En su lugar, se recortan.Método 3: Sombras de caja
Podemos crear una pequeña barra (en la forma del guión) usando pseudoelementos y luego crear múltiples
box-shadow
versiones para crear un borde como en el fragmento de abajo.Si el guión tiene forma cuadrada, un solo pseudo-elemento sería suficiente, pero si es un rectángulo, necesitaríamos un pseudo-elemento para los bordes superior + inferior y otro para los bordes izquierdo + derecho. Esto se debe a que la altura y el ancho del guión en el borde superior serán diferentes a los de la izquierda.
Pros:
Contras:
border-radius
pero colocarlos sería muy complicado al tener que encontrar puntos en un círculo (y posiblemente inclusotransform
).Mostrar fragmento de código
fuente
pointer-events:none
a svg para poder interactuar con el contenido.Uno corto: No, no lo es. En su lugar, tendrá que trabajar con imágenes.
fuente
Hay una herramienta genial creada por @kovart llamada generador de bordes discontinuos .
Utiliza un svg como imagen de fondo para permitir configurar la matriz de trazos y trazos que desee, y es bastante conveniente.
Luego, simplemente lo usaría como la propiedad de fondo en su elemento en lugar del borde:
fuente
La longitud del trazo depende del ancho del trazo. Puede aumentar la longitud aumentando el ancho y ocultar parte del borde por elemento interno.
https://jsfiddle.net/ok6srt2z/
fuente
pointer-events: none
para evitar el problema de superposición.Recientemente tuve el mismo problema.
Logré resolverlo con dos divs absolutamente posicionados llevando el borde (uno para horizontal y otro para vertical), y luego transformándolos. La caja exterior solo necesita estar relativamente posicionada.
Nota: utilicé taquiones en este ejemplo, pero supongo que las clases se explican por sí mismas.
fuente
Esto creará un borde naranja y gris usando class = "myclass" en el div.
fuente