Sulla mia pagina ho un insieme di elementi div che dovrebbero essere collegati con linee come ho mostrato nell'immagine qui sotto. So che con una tela posso disegnare delle linee tra questi elementi, ma è possibile farlo in un altro modo in html/css?Come connettere HTML Div con linee?
risposta
E 'una specie di dolore alla posizione, ma si potrebbe usare 1px
larghe div come linee e la posizione e ruotarle in modo appropriato.
<div class="box" id="box1"></div>
<div class="box" id="box2"></div>
<div class="box" id="box3"></div>
<div class="line" id="line1"></div>
<div class="line" id="line2"></div>
.box {
border: 1px solid black;
background-color: #ccc;
width: 100px;
height: 100px;
position: absolute;
}
.line {
width: 1px;
height: 100px;
background-color: black;
position: absolute;
}
#box1 {
top: 0;
left: 0;
}
#box2 {
top: 200px;
left: 0;
}
#box3 {
top: 250px;
left: 200px;
}
#line1 {
top: 100px;
left: 50px;
}
#line2 {
top: 220px;
left: 150px;
height: 115px;
transform: rotate(120deg);
-webkit-transform: rotate(120deg);
-ms-transform: rotate(120deg);
}
sicuramente possibile con qualsiasi numero di librerie e/o tecnologie HTML5. Potresti incidere qualcosa in puro CSS usando qualcosa come la proprietà border-bottom, ma probabilmente sarebbe orribilmente hacky.
Se sei serio su questo, dovresti dare un'occhiata a una libreria JS per disegno su tela o SVG. Ad esempio, qualcosa come http://www.graphjs.org/ o http://jsdraw2dx.jsfiction.com/
Ma quando uso Canvas non riesco a legare gli eventi sugli oggetti? – confile
Dipende esattamente da ciò che si vuole fare. Se ti preoccupi dei clic del mouse, puoi accedere al mouse Spostare e fare clic sugli eventi e confrontare la posizione corrente del mouse con la posizione degli elementi nell'area di disegno. Ci sono molti schizzi canvas e webGL 2D e 3D che rispondono agli eventi mouse/tastiera. Ho appena fatto un'altra ricerca su Google e ho trovato http://sigmajs.org/ che sembra davvero carino e ha una demo reattiva in prima pagina. – LiavK
Creare un div che è la linea con il codice in questo modo:
CSS
div#lineHorizontal {
background-color: #000;
width: //the width of the line or how far it goes sidewards;
height: 2px;
display: inline-block;
margin: 0px;
}
div#block {
background-color: #777;
display: inline-block;
margin: 0px;
}
HTML
<div id="block">
</div>
<div id="lineHorizontal">
</div>
<div id="block">
</div>
Questo mostrerà un blocco con una linea orizzontale ad un altro blocco.
Sui dispositivi mobili è possibile utilizzare (caniuse.com/transforms2d)
controllare il mio violino da questa discussione: Draw a line connecting two clicked div columns
Il layout è diverso, ma fondamentalmente l'idea è quella di creare div invisibili tra le scatole e aggiungi i bordi corrispondenti con jQuery (la risposta è solo HTML e CSS)
È possibile utilizzare https://github.com/musclesoft/jquery-connections. Ciò consente di collegare elementi di blocco in DOM.
È possibile utilizzare SVG per collegare due div utilizzando solo HTML e CSS:
<div id="div1" style="width: 100px; height: 100px; top:0; left:0; background:#777; position:absolute;"></div>
<div id="div2" style="width: 100px; height: 100px; top:300px; left:300px; background:#333; position:absolute;"></div>
(si prega di utilizzare il file CSS separato per lo styling)
Creare una linea di SVG e utilizzare questa linea per collegare div sopra
<svg width="500" height="500"><line x1="50" y1="50" x2="350" y2="350" stroke="black"/></svg>
dove,
x1, y1 indica centro di prima div e
x2, y2 indica centro della seconda div
È possibile controllare come appare nel frammento qui sotto
<div id="div1" style="width: 100px; height: 100px; top:0; left:0; background:#777; position:absolute;"></div>
<div id="div2" style="width: 100px; height: 100px; top:300px; left:300px; background:#333; position:absolute;"></div>
<svg width="500" height="500"><line x1="50" y1="50" x2="350" y2="350" stroke="black"/></svg>
PS: per lo spostamento di div, è possibile che la 'linea' aggiorni le coordinate di conseguenza. Ma per quello dovrai usare JavaScript/JQuery. Visita questo link per sapere come farlo -> https://stackoverflow.com/a/35493737/5947203 – Ani
I made something like this to my project
function adjustLine(from, to, line){
var fT = from.offsetTop + from.offsetHeight/2;
var tT = to.offsetTop + to.offsetHeight/2;
var fL = from.offsetLeft + from.offsetWidth/2;
var tL = to.offsetLeft + to.offsetWidth/2;
var CA = Math.abs(tT - fT);
var CO = Math.abs(tL - fL);
var H = Math.sqrt(CA*CA + CO*CO);
var ANG = 180/Math.PI * Math.acos(CA/H);
if(tT > fT){
var top = (tT-fT)/2 + fT;
}else{
var top = (fT-tT)/2 + tT;
}
if(tL > fL){
var left = (tL-fL)/2 + fL;
}else{
var left = (fL-tL)/2 + tL;
}
if((fT < tT && fL < tL) || (tT < fT && tL < fL) || (fT > tT && fL > tL) || (tT > fT && tL > fL)){
ANG *= -1;
}
top-= H/2;
line.style["-webkit-transform"] = 'rotate('+ ANG +'deg)';
line.style["-moz-transform"] = 'rotate('+ ANG +'deg)';
line.style["-ms-transform"] = 'rotate('+ ANG +'deg)';
line.style["-o-transform"] = 'rotate('+ ANG +'deg)';
line.style["-transform"] = 'rotate('+ ANG +'deg)';
line.style.top = top+'px';
line.style.left = left+'px';
line.style.height = H + 'px';
}
adjustLine(
document.getElementById('div1'),
document.getElementById('div2'),
document.getElementById('line')
);
#content{
position:relative;
}
.mydiv{
border:1px solid #368ABB;
background-color:#43A4DC;
position:absolute;
}
.mydiv:after{
content:no-close-quote;
position:absolute;
top:50%;
left:50%;
background-color:black;
width:4px;
height:4px;
border-radius:50%;
margin-left:-2px;
margin-top:-2px;
}
#div1{
left:200px;
top:200px;
width:50px;
height:50px;
}
#div2{
left:20px;
top:20px;
width:50px;
height:40px;
}
#line{
position:absolute;
width:1px;
background-color:red;
}
<div id="content">
<div id="div1" class="mydiv"></div>
<div id="div2" class="mydiv"></div>
<div id="line"></div>
</div>
- 1. Come nascondere html div
- 2. Come connettere le immersioni trascinabili con jsPlumb?
- 3. Come connettere php7 con mongoDB
- 4. Come connettere boto con fakes3
- 5. Come connettere SQLite con Java?
- 6. Come connettere due server node.js con websocket?
- 7. Come creare e connettere pulsanti/controlli utente personalizzati con linee usando i moduli di Windows
- 8. Layout DIV HTML
- 9. Fill div con html utilizzando JavaScript/jQuery
- 10. Come connettere Jms da PHP?
- 11. Clone HTML DIV con jQuery su select
- 12. aggiungi html a div con jQuery
- 13. html div evento onclick
- 14. inserisci/rimuovi contenuto HTML tra tag div
- 15. Come posizionare tre div in html orizzontalmente?
- 16. Email HTML: tabelle o div?
- 17. div HTML, come avvolgere il contenuto?
- 18. Linee curve che utilizzano solo HTML e/o CSS
- 19. Come connettere Dart a SQLite?
- 20. Come creare linee con Atene?
- 21. linee verticali a piena altezza tra i div
- 22. Div con barra di scorrimento all'interno div con posizione: fisso
- 23. TreeView/TreeViewItem ControlTemplates con linee tratteggiate
- 24. Come connettere jquery.inputmask usando requirejs
- 25. Come connettere jsReport in AngularJS?
- 26. Come connettere Sqlcmd al server?
- 27. Sostituzione di un tag InnerText div con HTML Agility Pack
- 28. Come disegnare le linee tra i cerchi?
- 29. HTML - Carattere newline nel contenuto DIV modificabile?
- 30. caricamento della pagina html all'interno div
hai chiesto è possibile, io dico di sì, ma usando i CSS non dirò – Shadow
forse http://jsplumbtoolkit.com/home/jquery.html –
Penso che questo genere di cose dovrebbe essere sicuramente lasciato a SVG. Principalmente perché questo può essere creato usando gli hack CSS ma il sito diventerà insensibile nei dispositivi mobili – MarsOne